先打开这次要破解的软件,任意输入一个注册码“11111111111111111”,点击注册,发现程序需要重启验证
然后,观察一下软件的根目录,发现有一个INI配置文件,打开后发现里面记录了刚才注册时候的机器码和输入注册码
此时,可以判断软件的注册验证流程是:
先让用户输入注册码
然后重启软件,读取INI文件中的记录并进行比对,进而确定用户输入的注册码是否有效。
(这里说明一下:课件提供的这个软件已经脱壳了)
开始破解
第一步 将软件载入OD。
第二步 选择屏幕正上方的快捷工具条,点击工具条最左边的BP,弹出一个菜单
选择Archives INI 下面的第一个选项,下一个INI验证断点
为什么要下一个INI验证断点呢
因为最开始判断软件注册流程的时候,发现软件是通过每次重启后读取INI配置文件的内容,来验证注册码是否正确的。
第三步 断点下好后,F9运行程序。
这时候会发现,程序运行停在了断点处,并且开始读取机器码
此时点击最上方命令栏,调试---执行到用户代码
为什么执行这一步呢
通过观察上图左侧的机器码和标题栏上的模块名kernel32可以发现,此时程序仍处在调用系统API模块阶段,也就是所谓的系统领空。
如果按F8慢慢走的话可能会按很久。
通过“执行到用户代码”,直接跳到程序的执行区域,也就是所谓的程序领空
注意:实际操作中会遇到一个问题就是“执行到用户代码”不起作用,还是和F8一样一步一步执行。
论坛上验证过是64位系统调试下就会出现该问题。32位系统下执行正常。
我是WIN7X64位系统,所以目前的办法只能一直ALT+F9,直到标签栏上模块名变成程序名为止(说明已经到了程序领空)
第四步 通过F8一步步比对,在堆栈窗口获得可疑的注册码,再去注册界面一一验证
第一行 红圈标记的 就是程序领空的第一行
按F8运行到第三行红圈标记处,右侧寄存器窗口开始出现注册时候的机器码,说明方向正确,继续向下
一路F8,直到出现了两个可以的代码段:
此处忘记截图了,将出现的可以代码“复制到剪切板”,依次去注册界面尝试,发现第二个注册码可用。
进入软件注册界面,提示注册完成。