最近和论坛的小廷一起参加了西电的网络***比赛,我负责了Crack的部分,学到了很多。本人也是初学破解,小菜一枚。很喜欢破解,很享受其中分析的过程。下面分享一下我的经验,能力有限,难免有不对的地方,希望大家多多指正,共同进步~

下面分享的是crackme2。爆破,以及破解自校验。

首先是爆破,寻找关键点。
1、用PEID查看,nothing found,什么也没找到,不用着急,我们还有后续的判断措施;
2、用OD载入,f9,运行程序,发现正常显示了对话框,说明没有设置侦测OD等调试工具的措施。如果该程序设置了反调试函数,则OD无法正常运行程序的,会直接退出;
3、选择内存查看'M',或者按快捷键'alt+M',查看当前代码所在的区块。发现在代码区,没有加壳。如果程序加了壳的话,程序载入的时候,控制权会首先掌握在壳的手里,隐藏真正的入口位置。载入时当前代码就不在代码区了;


4、接着随意填入name,serial值,点击register ,出现消息框提示‘wrong’,什么都不输入,出现'not be empty',输入超过16个字符,出现‘less than 16 bytes’。将这些提示字符串都在参考字符串中搜索,发现都找不到。
现在这个方法不行了,我们再想其他的办法。既然有消息框,那么我们就直接寻找消息框的函数,MessageBox.
5、打开当前模块的名称,或者按下快捷键'ctrl+N',直接输入'MessageBox'。右击选中MessageBox,选择‘反汇编窗口中跟随’,然后在USER32 的领空先下好断点。
序列号破解 注意api下断点方法_第1张图片

序列号破解 注意api下断点方法_第2张图片

不能直接在输入函数窗口中下断点,输入函数窗口中显示的地址是pe输入表中函数字符串存放的地址。
6、ctrl+f2重新载入,f9运行,输入name和serial,程序断下了,ctrl+f9执行到返回。接着可以看到右边寄存器窗口中字符串'Wrong',还有上面有一个可疑的je跳转,发现上面的call eax就调用了Messagebox。这样,我们在上面的je下断点。


再次重新载入运行,输入name和serial,程序直接断下。我们直接将je 改为jmp,直接f9运行,爆破成功,出现恭喜消息框。

序列号破解 注意api下断点方法_第3张图片


这样我们就实现了爆破。保存修改后。点击运行发现程序直接跳出。这就是文件自校验了。
文件的自校验手段有文件大小校验,时间校验等等。
这个程序的校验方法,我们依旧采取对比跟踪的思路,但是为了减小工作量,我们直接采用createfile函数下断点的方法进行破解。
createfile函数可以获得一个文件的句柄,从而获取文件的大小等操作。
1、载入破解的程序,ctrl+N打开输入函数列表。找到createfile。这里介绍另一种下断点的方法,右键选择查看“调用树”,里面罗列了所有调用了这个库函数的位置。在第一个位置下断点。
2、f9运行,程序断下,查看堆栈窗口的filename 是本文件的地址。说明在读自己。


3、od打开原始文件,同样在craetefile位置下断点。接着运行两个程序,进行比对,找到不同的地方。


4、发现在PostQuitMessage的地方出现了不同,修改上面的jnz为jmp强制跳转,自校验破解成功。

序列号破解 注意api下断点方法_第4张图片


总结一下:
对于爆破,获取提示信息很重要,通过提示信息查找字符串是一种方法,当这种方法行不通的时候,就打开输入函数列表,查找相关函数下断点。如MessageBox,GetWindowTeXt等,

GetWindowTeXt会获取控件的字符串。一般程序获取输入的用户名密码等等,都会用到这个函数,本程序也可以使用这个方法来找到关键点,朋友们可以试试,只是绕的弯要多一点。不过对于初学的我们,多多的把玩一个程序,多种方法都尝试下,是很有帮助的~




罗列一下看雪里面的一般处理的断点函数:


bpx hmemcpy


bpx MessageBox


bpx MessageBoxExA


bpx MessageBeep


bpx SendMessage



bpx GetDlgItemText


bpx GetDlgItemInt


bpx GetWindowText


bpx GetWindowWord


bpx GetWindowInt



对于破解自校验,比较有效但是花费时间的方法就是OD跟踪对比源文件与破解的文件,寻找不同。为了减小工作量,可以用

createfile来锁定位置。




破解原件下载地址:欢迎大家把玩,以及提出其他好玩的方法来破解~吼吼


http://pan.baidu.com/s/11MPpj