crack小实验
本文是按照《0day安全》一书中的实验一步步实现的,对于反汇编也有了新的认识。
工具:winxp sp3虚拟机,IDA Pro 6.6,OllyDbg,UltraEditor,VC 6.0,LordPE。
因为在win7下面虚拟内存有重定向的问题,不利于分析,因此在虚拟机win xp下面进行实验,win7下也可以通过ALSR插件来实现。
一、VC下编写小程序
程序实现密码验证,只有正确的密码才能成功。
二、IDA Pro反汇编程序
可见“jz short loc_4010F6"是程序的判断语句,正确则进入右侧输出”Congratulation!",否则进入左侧,输出"incorrect password!"。
按空格键,找到语句所在位置“.text:004010E5 jz short loc_4010F6”。
三、OllyDbg动态调试
Ctrl+G找到“004010E5”所在位置:
CPU Disasm
地址 十六进制数据 汇编代码 注释
004010E5 /74 0F je short 004010F6
F2添加断点调试,发现程序确实在这里分支。
而通过将je(74)修改为jne(75)即可实现错误密码可以通过,而正确密码不能通过的现象。
四、LordPE计算文件偏移地址
可知文件偏移地址为:0x004010E5-0x00400000 = 0x10E5
五、UltraEditor编辑PE文件
用UltraEditor打开PE文件,Ctrl+G找到0x10E5位置发现确实是"74",改为“75”即可,保存后运行发现程序确实发生了预期的变化。