先打开这次要破解的软件,任意输入一个注册码“11111111111111111”,点击注册,发现程序需要重启验证

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_注册码

然后,观察一下软件的根目录,发现有一个INI配置文件,打开后发现里面记录了刚才注册时候的机器码和输入注册码

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_INI_02

此时,可以判断软件的注册验证流程是:

先让用户输入注册码

然后重启软件,读取INI文件中的记录并进行比对,进而确定用户输入的注册码是否有效。

(这里说明一下:课件提供的这个软件已经脱壳了)

开始破解

第一步 将软件载入OD。

第二步 选择屏幕正上方的快捷工具条,点击工具条最左边的BP,弹出一个菜单

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_INI_03

选择Archives INI

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_注册码_04

 

为什么要下一个INI验证断点呢

因为最开始判断软件注册流程的时候,发现软件是通过每次重启后读取INI配置文件的内容,来验证注册码是否正确的。

第三步 断点下好后,F9运行程序。

这时候会发现,程序运行停在了断点处,并且开始读取机器码

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_注册码_05

此时点击最上方命令栏,调试---执行到用户代码

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_机器码_06

为什么执行这一步呢

通过观察上图左侧的机器码和标题栏上的模块名kernel32可以发现,此时程序仍处在调用系统API模块阶段,也就是所谓的系统领空。

如果按F8慢慢走的话可能会按很久。

通过“执行到用户代码”,直接跳到程序的执行区域,也就是所谓的程序领空

 

注意:实际操作中会遇到一个问题就是“执行到用户代码”不起作用,还是和F8一样一步一步执行。

论坛上验证过是64位系统调试下就会出现该问题。32位系统下执行正常。

我是WIN7X64位系统,所以目前的办法只能一直ALT+F9,直到标签栏上模块名变成程序名为止(说明已经到了程序领空)

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_机器码_07

 

 

第四步 通过F8一步步比对,在堆栈窗口获得可疑的注册码,再去注册界面一一验证

 

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_注册码_08

第一行 红圈标记的 就是程序领空的第一行

按F8运行到第三行红圈标记处,右侧寄存器窗口开始出现注册时候的机器码,说明方向正确,继续向下

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_机器码_09

一路F8,直到出现了两个可以的代码段:

此处忘记截图了,将出现的可以代码“复制到剪切板”,依次去注册界面尝试,发现第二个注册码可用。

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_注册码_10

进入软件注册界面,提示注册完成。

商业软件的注册码激活码的实现方法java 软件注册码怎么获取_INI_11