这小节是通过断在GetPrivateProfileStringA,然后找到注册码的。
1.运行程序
输入假码111111,提示重启。通过这判断这是一个重启来验证的,那么它是如何来验证的呢?观察程序目录下会发现有一个名为“config.ini"的文件
那么判断是通过读取ini文件来进行验证的。所以可以在GetPrivateProfileStringA处下断点,在它读取了ini中的注册码后,必然会与真码进行比较,那么我们就可以找到真码了。载入OD
下API断点:GetPrivateProfileStringA。这次是在这里设置断点:
运行程序,断下来
此时,就位于了GetPrivateProfileStringA函数里面。这里记录一下,我们利用这个断点,是因为这个软件是有壳,我们为了进入用户领空进行操作,所以利用了这个断点。
现在我们要脱离系统领空,进入程序领空,就用不到这个函数断点了。
所以Alt+F9返回到用户代码去。
观察汇编代码
从系统空间返回程序了,可是这里没什么关键跳,也没再寄存器窗口里看到可疑的字符串。只好一路F8直到retn。
跳出了上个call后,还是没发现什么。只好继续F8了。不久,就又断在了GetPrivateProfileStringA处,还是老办法Alt+F9返回到用户代码去。
返回用户空间后,只好继续F8。F8的过程中,观察堆栈和寄存器,不久就会出现这个:
可疑字符串出现了,感觉都复制出来,一一试验一下。
经测试我们找到了真码