第一期 09 API 断点 GetPrivateProfileStringA

GetPrivateProfileStringA

打开软件, 发现下面的注册码已经输入好了, 我们不知道输入的是什么, 我们就随便点下 注册 看下软件会提示什么

很明显是个重启验证, 我们重启软件, 还是那样.

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

打开 config.ini 文件, 里面有我们的机器码, 很可疑.

重启验证对象有可能就是这个文件, 刚才我们没有输入注册码直接点的确定, 这次我们输入 123

可以看到, 这个文件内容改变了. 这说明这个文件就是存放注册码的地方, 然后程序每次启动都读取这个文件, 然后验证机器码与注册码是否匹配.

现在我们基本上知道了程序的执行流程, 没壳, 我们 OD 载入.

我们 BP GetPrivateProfileStringA, 这是针对 ini 类型重启验证的断点, 我们对程序读取 ini 文件进行拦截

下好断点后 F9 运行程序, 断在系统领空, 程序在读取机器码

然后我们 Alt+F9 返回程序的领空寻找关键地方, 上面就是读取 ini 的 call

程序调用API
程序读取机器码

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

疑似真正的注册码

又发现一个, 我们把它们复制过来

0012FD44   011B47C0  ASCII "880b5aecaaf351d289477610dbc73734"
0012FD48 011C2E34 ASCII "acdb9da597f5276c6e4aae7dd29b7524"

推断这两个应该有一个是真的注册码

注册成功

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