一、破解过程
1、通过查找字符串“注册”找到了注册验证的地方,很快就找到了关键call。
006D5AD5 . E8 AE020000 call 006D5D88
这里调用了关键call 006D5D88,修改关键call的返回值为1,就能够让软件提示注册成功。但是重启以后还会死未注册。
这说明这是一个重启验证的软件。要想爆破它,就得修改软件启动时的验证代码。但是怎么找到那里呢?
不急,去关键call
006D5D88 /$ 55 push ebp ; 这就是关键call
单步F8,发现了这个:
006D5DE8 |. E8 FF000000 call 006D5EEC ; 这个call后,真码出来了。
调用了006D5EEC后,真码就出来了。
2、过去看看006D5EEC这个call
006D5EEC /$ 55 push ebp
来到这个生成真码的call。发现它被两处地方调用了,一处是上面提到的006D5DE8,另外一处是
006D7BD7 . E8 10E3FFFF call 006D5EEC
006D5DE8处的调用是在点击注册时,生成真码与填写的假码进行对比。那么006D7BD7这里为什么也要生成真码呢?可以肯定也是为了将生成的真码和假码进行对比。那么在006D7BD7下断点。
3、重新运行程序,发现在程序界面出来之前就断下来了,说明这里就是重启验证的地方了。
006D7BD7 . E8 10E3FFFF call 006D5EEC ; 过了这个call。就生成了真码
006D7BDC . 8B55 C0 mov edx,dword ptr ss:[ebp-0x40] ; edx就是真码了
006D7BDF . A1 3C3F7000 mov eax,dword ptr ds:[0x703F3C] ;
006D7BE4 . 8B00 mov eax,dword ptr ds:[eax]
006D7BE6 . 8B80 80060000 mov eax,dword ptr ds:[eax+0x680] ; eax就是假码了
006D7BEC . E8 4BD2D2FF call 00404E3C ; 在这里比较真码和假码了
006D7BF1 75 7D jnz short 006D7C70 ; 这里就是关键跳,直接nop掉。
对这些代码进行简单分析,就找到了关键跳,直接nop掉就行了。此时就不会再出现要试用的界面了,直接进入主界面。
4、把修改后的程序进行保存。
二、总结
这个软件的破解关键就是找到软件启动时的重启验证的代码。我自己是歪打正着找到的,而视频中是用的设置API断点的方法。
既然是重启验证,那么在验证时肯定要读取原来输入的假码;而注册表就是保存假码的好地方。根据这个,对RegCreateKeyExA这个API下断点从而找到了重启验证的地方。
网友评论