小甲鱼 OllyDbg 视频教程
尝试 1 : https://www.bilibili.com/video/av6889190?p=17
尝试 2 : https://www.bilibili.com/video/av6889190?p=18
小甲鱼OD学习第13-14讲:https://www.bbsmax.com/A/QV5ZL1gZzy/
逆向常用 api :https://pan.baidu.com/s/1dypI6la3Gj4i-G6exiCMkg 提取码:v6dq
尝试 1:使用 查找模块间的调用 进行逆向
方法 1:
API 函数 GetWindowTextA 可以取得一个窗体的标题(caption)文字,或者一个控件的内容
可以通过 api 函数 GetWindowTextA 来进行逆向
搜索 API 函数 GetWindowTextA 函数
按 Alt + b ,查看所有断点,可以看到 下了 3 个断点
把 这个 3 个断点删除,使用另外一种方法查找。
方法 2:
按下 Ctrl + n ,查找 getwindowa ,然后 右键 -> 在每个参考上设置断点。按下 Alt + b ,可以看到还是设置三个断点。
查看断点 Alt + b:
然后重新载入程序、运行,看程序有没有在断点处停下来。发现程序在断点处停下来,因为没有输入内容,所以这个断点是没有用的,删除这个断点,按 F9 继续。发现程序又在一个断点处停下来,同样没有输入内容,所以这个断点也是没有用的,删除这个断点,按 F9 继续。发现程序运行,出现界面。点击注册:
发现程序果断的在最后一个断点处停下,
然后开始 F7、F8 调试,寻找关键跳转:
可见是判断al值,那么上一个call可能就是计算加密的函数,下断点进入
神奇的发现有两处call地址相同,附近代码也相同,猜测这是程序怕被破解所以出现的二次验证程序
进入后找到两处retn
由经验得出第一个retn为true,第二个为false
将跳转实现的标志位修改成未实现(修改标志位Z)
修改后确实弹出了注册成功了的对话框,但是发现界面依然显示未注册的信息。
这时候我们就要考虑他的双重验证了,第二个验证call
也可以通过字符串查询方式,寻找关键位置
下断点进入,找到关键跳转关键call
进入函数
找到关键跳转,mov bl,1
后面直接 mov al,bl
我们修改代码 mov al,1
成功
总结:还是要锻炼寻找加密思路,寻找关键的上一个跳转及call是最关键的
尝试 2:查找关键字进行爆破
这次我们的任务是 PJ 这个需要注册码的软件,如下图所示
我们搜索上图相应的提示字符串,看看能找到什么线索,我们搜索 invalid code 试试看,如下图
然后下断点,如下图所示
我们来到断点处的代码,如下图
观察代码,发现0041749C JNZ SHORT XoftSpy.004174E3 能跳转到相应的成功注册的提示信息,如下图
我们干脆把代码改为 jmp SHORT XoftSpy.004174E3,看看效果,如下图
用所有修改保存,运行程序并且注册,发现提示成功,如下图
但是我们又发现,软件还是没有注册成功,如下图所示
我们干脆换个方式,搜索另外一个标志字符串,下断点,如下图所示
观察 00401499 JE SHORT XoftSpy.004014AD,这行代码能跳转到软件注册成功的代码处,如下图
我们尝试着用NOP来代替这行代码看看效果,如下图
用所有修改保存,运行软件,发现已经破解成功!!