记录最初学习逆向的经历
《逆向工程核心原理》--第六章
首先需要下载abex'crackme#1这个由汇编代码编写的程序
我是从别的大佬处下载的,很感谢大佬分享abexcm1.exe_免费高速下载|百度网盘-分享无限制 (baidu.com)
下载好之后,先在桌面运行(可能被系统视作危险,需要自己恢复)
1.运行程序
点击运行后会出现下面的弹窗,显示"Make me think your HD is a CD-Rom"消息
作为初学者,不知道这是什么消息,只能继续点确定
出现下面的界面,一脸懵,任然不知道是干嘛。
2.用ollydbg打开这个exe文件
这个exe文件的EP非常简单,说明是直接用汇编写的,如果是用开发工具写的,那么进去后的代码会很复杂
我们可以看到这里调用了三次MessageBoxA,看书上的意思是修改代码,让它最后执行了最后那个MessageBoxA,那个MessageBoxA的内容看起来也符合类似答案的那种语言---Title="YEAH!".............,OK,所以我们需要修改代码,让它去执行最后那个MessageBoxA。
3.分析代码
先一路F8,我们直接调试一遍,看看程序是具体怎么执行
这句是垃圾代码,没意义
这句跳转,也没有跳转
会发现一开始都是顺序执行,在第二个MessageBoxA调用后,调用结束后直接跳转到程序结束处
即是那句JMP SHORT abexcm1.00401050直接跳转到了程序结束(ExitProcess)
所以会发现,如果想让程序去执行第三个MessageBoxA,我们需要修改跳转的地址,而一路F8下来,能够修改的地方就是
4.修改代码
我们可以看到这个跳转的地址是0040103D
这个地址正好是第三个开始的地址,所以我们要想办法让程序跳转到这
代码是JE,跳转指令的上一个是CMP EAX,ESI,代码比较了EAX和ESI的值的大小,因为不相同,所以Z(ZF位)是0,所以JE没有跳转
方法1:ok,我直接改成JMP,把JE改成JMP(直接跳转)
使用Copy to executable把修改后的保存,然后我再来运行修改后的代码
成功让程序跳转到第三个MessageBoxA的地方,成功破解
方法2:书本和网上都是方法1,我想了想,可以试着不用改JE,没有跳转的原因是因为ZF为0,ok,我让它弄成1,那不就可以了嘛,因为CMP EAX,ESI这段代码,代码比较了EAX和ESI的值的大小,EAX和ESI不相等,所以ZF为0,我可以改成CMP EAX,EAX ,这样改后,ZF就会被置为1,下一句JE就可以跳转
修改后:
执行到CMP那句时我们看看ZF位
ok,Z位被置为1了
运行程序我们可以看到成功破解!!!
方法是多种多样的,大家也可以自己发挥自己修改,不一定局限于网上的思路!
因为只有自己创新想出来的自己才觉得有意思!