软件破解入门(暴力破解CrackMe)
所谓暴力破解,就是通过修改汇编代码进而控制程序的运行流程,达到不需注册码也能正常使用软件的目的。相对于解出算法进而编写注册机,暴破的技术含量是比较低的。但也正是因为一本05年的杂志上介绍“暴力破解”的文章,让我入了这个大坑。近来想重拾调试器,就先从最简单的CrackMe入手,熟练一下各工具方法。
下载CrackMe3文件(我用的是看雪《加密与解密》中的CFF CrackMe #3 程序 http://pan.baidu.com/s/1dD9v9x3 )。
1.查看此程序是否加壳。加壳的话还得进行脱壳处理。将CrackMe拖到PEID上,显示用Delphi编写。无壳,甚好。
3.打开程序,看看注册码出现异常的时候有何提示。恩,输入错误的注册码,确认。显示了“Wrong Serial,try again!”。我们记下这一串字符,接下来用得到。
4.退出程序,打开OllyDbg,并载入此程序。(当年用的是W32Dasm,属于静态反汇编软件,支持WIN API,具有强大的串式参考功能。因此成为破解入门软件的最佳选择。这次用OllyDbg实施爆破,只是复习一下操作。爆破原理都是相同的)下图是OllyICE,是OllyDbg的汉化版。也一样好用。
载入程序后,出现如下界面:
title上面的“模块 — crackme3”标明了程序领空,我们当前是在crackme的代码内。
5.我们在反汇编窗口“右键——查找——所有参考文本字符串”:
然后会弹出一个文本字符串的对话框,继续“右键——查找文本”:
然后会弹出对话框,输入前面记下来的那串“Wrong Serial,try again!”。其实为了方便,可以只输入“Wrong”这个字符串,毕竟程序里带“Wrong”的字符不会太多,如下图:
点击“确定”后,会高亮查找结果,此时在对应字符串处“右键——反汇编窗口中跟随”,会在反汇编窗口中跳到对应此串字符的汇编指令:
看到上图的指令,分析一下程序流程:输入ID和注册码后,call调用子函数来判断注册码是否正确(00440F51处,call 00403B2C处的子函数),如果不正确,一个jnz跳到00440F72,弹出“Wrong Serial ,try again!”,提醒说你丫注册码是错的。
为了验证我们的想法,我们在call的前面按F2下个断点,然后一步步跟进,看看call了个什么函数过来:
然后F9让程序跑起来,输入假的ID “wwwwww” ,按下“注册”。此时程序自然要去call子函数来验证我们的注册码是否正确。可惜它还没走到call的那一步,就停在了我们设的断点上(可以看到信息窗口中的堆栈内容“wwwww”,不知会不会存在缓冲区溢出?XD):
然后按下几次F8单步步过,直到了00440F34 call指令,程序就要召唤子程序来检验注册码是否正确了!此时改为F7单步步入,跟踪到所call的函数(如图,此函数地址在00403B2C处):
跟进去之后,这就是用来验证注册码的程序(从 三个push压入堆栈 开始,到 三个pop弹出堆栈+retn 结束):
从代码中可以发现,程序将输入的注册码与内置的注册码用cmp指令做了比较。(cmp指令执行后,将对标志寄存器ZF产生影响。比如 CMP AX , BX ,当AX=BX时,ZF=1;AX!=BX时,ZF=0。)
也就是说,如果注册码与输入的字符串不相等,ZF=0。此时子程序返回,执行00440F39处的JNZ指令。因为输入的注册码不对,ZF=0,开始执行JNZ,跳转到00440F8C,弹出“Wrong Serial”对话框提示注册码错误。
这就是传说中的“关键跳”,如果将JNZ(ZF=0时就跳转)改为JE(ZF=1时就跳转),得到的结果就会正好相反,即错误的注册码反而会提示注册成功,对的注册码反而会提示错误。
6.那么现在找出那两个“关键跳”(输入ID时call了一下,然后一个jnz。输入注册码时又call了一下,再一个jnz。),如下图:
好,现在只剩下修改汇编代码了。双击对应的JNZ指令,弹出“汇编于此处”的对话框。将只需将“jnz”改为“je”,点击“汇编”即可。用同样的方法修改另一处“jnz”:
修改完毕,“右键——复制到可执行文件——所有修改“:
在弹出的对话框中点击“全部复制”:
然后在出现的新对话框中“右键——保存文件”,完毕。
此时打开新保存的文件,随意输入一个ID和注册码,点击“注册”,即弹出“注册成功”的对话框:
小结:本次主要是重温了OllyDbg的操作。爆破无外乎就是改变程序的验证流程,譬如将关键处的jne改为je,或者jmp,比较不优雅。更优雅的是揣摩出程序作者的验证算法,写出内存补丁或者注册机,这才是高大上的方法。无奈算法一类的是我的软肋,仍需努力啊。
转载于:https://www.cnblogs.com/codex/p/4051817.html
软件破解入门(暴力破解CrackMe)相关推荐
- CTF-Show密码学:ZIP文件密码破解【暴力破解】
萌新 隐写23 题目内容: 文件的主人喜欢用生日做密码,而且还是个90后. 一.已知条件 在这个题目中,我们有以下已知条件: 文件的主人喜欢用生日做密码 - 这个条件告诉我们,密码可能是一个八位的纯数 ...
- 其它 以字典的方式 暴力破解 压缩文件密码
以前加密了一个压缩文件,里面全是回忆的照片,结果密码搞忘记了,我勒个去,然后就在网上下载了个软件暴力破解,结果很明显,没有破解出来.然后自己就思索怎么破解. 一开始是加QQ群,让别人帮忙破解,仍然没有 ...
- 黑客暴力破解必备的12大逆向工具!设置再复杂的密码也没用!
暴力破解攻击是最流行的密码破解方法之一,然而,它不仅仅是密码破解.暴力攻击还可用于发现Web应用程序中的隐藏页面和内容,在你成功之前,这种攻击基本上是"攻击一次尝试一次". 暴力破 ...
- IT知识百科:什么是暴力破解?
暴力破解是一种常见的网络安全攻击方法,它利用计算机程序自动尝试大量的密码组合来破解密码.这种攻击方法通常用于获取未经授权的访问权限,如入侵网络系统或个人账户.在本文中,我们将探讨暴力破解的原理.工具和 ...
- 口令暴力破解--Telnet协议暴力破解、数据库暴力破解与远程桌面暴力破解
Telnet协议暴力破解 Telnet Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.要开始一个 ...
- FTP暴力破解登陆漏洞复现(Windows Server 2003)
FTP暴力破解漏洞复现 0x01 漏洞简述 FTP弱口令,一般指使用FTP的用户的密码长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. 知道FTP ...
- 暴力破解攻击工具汇总——字典很关键,肉鸡也关键
lasercrack是一款爆力破解工具,ruby写的,现如今市面上常见的暴力工具如hydra,medusa都有着不错的破解效率. 破解RDP的软件也有很多,比如ncrack和Fast RDP Brut ...
- linux暴力破解工具
对于 Linux 操作系统来说,一般通过 VNC.Teamviewer 和 SSH 等工具来进行远程管理,SSH 是 Secure Shell 的缩写,由 IETF 的网络小组(Network Wor ...
- 手把手教你一步一步暴力破解密码,学不会来找我
目录 一.什么是暴力破解? 二.暴力破解弱口令实验 三.如何防御暴力破解攻击? 一.什么是暴力破解? 暴力破解也可称为穷举法.枚举法,是一种针对于密码的破译方法,将密码进行逐个推算直到找出真正的密码为 ...
最新文章
- 一文读懂微服务架构的重构策略
- tomcat 设定自定义图片路径
- List数组,string数组,Dictionary字典三种contain方法的查询速度
- Solr入门和实践以及我对Solr的8点理解
- 使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
- http 412 precondition failed
- 面向对象之封装的成本价值
- 宋体(Simsun)和新宋体(NSimsun)的区别
- linux geos 动态库,未经sudo许可在linux上安装GEOS库
- Tecplot新手进阶--使用tecplot宏操作批量处理数据输出图片(详细步骤)
- 致远OA办公网“office控件不可用”及“无注册表类”解决办法
- ffmpeg从mp4(音视频)中提取音频aac
- 透过案例--了解循环栅栏
- 3d效果图设计师接私单的渠道介绍和避坑指南
- 数字化时代的数据安全与治理
- STM32精英板连接wifi,通过指令控制继电器
- 学计算机Java和c语言哪个出路比较好
- [Java学习] 最小生成树——Prim算法
- 外包三年准备跳槽了!
- android studio(自带SDK)安装教程