打开软件, 发现下面的注册码已经输入好了, 我们不知道输入的是什么, 我们就随便点下 注册
看下软件会提示什么
很明显是个重启验证, 我们重启软件, 还是那样.

我们看下根目录有没有可疑的程序

打开 config.ini
文件, 里面有我们的机器码, 很可疑.
重启验证对象有可能就是这个文件, 刚才我们没有输入注册码直接点的确定, 这次我们输入 123

可以看到, 这个文件内容改变了. 这说明这个文件就是存放注册码的地方, 然后程序每次启动都读取这个文件, 然后验证机器码与注册码是否匹配.
现在我们基本上知道了程序的执行流程, 没壳, 我们 OD 载入.
我们 BP GetPrivateProfileStringA
, 这是针对 ini 类型重启验证的断点, 我们对程序读取 ini 文件进行拦截

下好断点后 F9 运行程序, 断在系统领空, 程序在读取机器码
然后我们 Alt+F9 返回程序的领空寻找关键地方, 上面就是读取 ini 的 call


我们 F8 单步, 注意寄存器窗口和堆栈窗口, 出现了一串可疑的字符串, 疑似真码

又发现一个, 我们把它们复制过来
0012FD44 011B47C0 ASCII "880b5aecaaf351d289477610dbc73734"
0012FD48 011C2E34 ASCII "acdb9da597f5276c6e4aae7dd29b7524"
推断这两个应该有一个是真的注册码

与上节课不同的是, 我们不能阻止这个程序去访问 ini 文件, 但是我们可以影响一下后面的跳转, 这节课是找注册码