《第3期-14 注册表返回值快速定位》学习笔记

用作例子的软件是 HyperSnap 7 专业版


在未注册时,一打开会提示注册,猜测这是从注册表中读取了注册信息,所以可以对注册表操作函数下断点,从而找到验证的关键代码并进行分析修改达到破解的目的。
一、
1、来到软件主程序,右键——查找——所有模块间调用


根据前面的经验,知道注册表函数都以Reg开头,所以可以按键盘上的r e g键,这会自动跳到以Reg开头的函数那里。


我们要寻找的是打开注册表的函数,找到后右键,对每个调用下断点。
2、重新载入程序并运行,断下来后观察堆栈窗口中是否会出现和进程名HyperSnap相似的字符串。
出现后就单步跟踪,还可能得跳出call后继续跟踪。主要是看读取注册信息的代码所在的call返回值是否是0或者1。
如果出call后发现返回值不是0也不是1,证明这个call就不是关键call,要么继续出call;要么继续F9,找下一个断下来的。这是最要紧最难的一步了,也就是在这一步找到了关键call。
在第10次断下来后,出call一次还得再出call一次,才找到了关键call。
在这一过程中,看到可疑的关键处,可以修改一下试试,看能够达到破解目的。

004A0B5E  |.  E8 2DBA0800   call    0052C590                                  ;  这个就是关键call了。第2次出call会来到这里
004A0B63  |.  A3 F0B07200   mov     dword ptr ds:[0x72B0F0],eax               ;  关键处,eax的值影响了验证是否通过
004A0B68  |.  E8 53CD0900   call    0053D8C0

3、原本想直接修改关键call的返回值,但是OD提示重定位的问题


那么只好对关键call进行替换了

004A0B5E      B8 01000000                     mov     eax,0x1                                   ;  把关键call替换了
004A0B63  |.  A3 F0B07200                     mov     dword ptr ds:[0x72B0F0],eax               ;  关键处,eax的值影响了验证是否通过
004A0B68  |.  E8 53CD0900                     call    0053D8C0

你可能感兴趣的:(《第3期-14 注册表返回值快速定位》学习笔记)