能力值:
( LV6,RANK:90 )
|
-
-
26 楼
good,学习
|
能力值:
( LV8,RANK:130 )
|
-
-
27 楼
最初由 suddymail 发布 readfile--〉01187048,只访问一次,
40a589--〉 01185A20,只访问一次,
4041ed-〉 011859CE ,访问两次 ........
在 011859CE 处设置硬件断点,会发现调试器在此处中断两次(不清除断点)。第一次跟飞,第二次会到达目的地
|
能力值:
( LV9,RANK:1250 )
|
-
-
28 楼
感谢楼主的破文。
我根据楼主的文章终于尝试了破解重启验证。受益匪浅,再次感谢。
根据我的跟踪补充一下:
首先楼主没有在WriteFile下断判断程序是否对注册码输入后进行计算或比较,我试了下,没有,直接就写在xxxx.dat里了。
因此下ReadFile才有说服力。
还有楼主提到的这段代码:
00415273 /cmp dword ptr ds:[450B28],1
0041527A |jle short StartupC.00415288
0041527C |push 4
0041527E |push esi
0041527F |call StartupC.0041BDD1
00415284 |pop ecx
00415285 |pop ecx
00415286 |jmp short StartupC.00415293
00415288 |mov eax,dword ptr ds:[45091C]
0041528D |mov al,byte ptr ds:[eax+esi*2]
00415290 |and eax,4
00415293 |test eax,eax
00415295 |je short StartupC.004152A4
00415297 |lea eax,dword ptr ds:[ebx+ebx*4]
0041529A |lea ebx,dword ptr ds:[esi+eax*2-30]
0041529E |movzx esi,byte ptr ds:[edi]
004152A1 |inc edi
004152A2 \jmp short StartupC.00415273
其实就是将输入的注册码进行转换成十六进制比,可以用EAX=EAX*A+EBX来计算,也可以用计算机直接转换十进制到十六进制,所以该段程序有用的地方是0041529A的ebx,循环完了ebx就是得到转换后的值,然后再跟踪他。
最后,正如n楼的说的,算法的确很简单,精华都在00402BDA cmp eax,181C0
,将181C0转成十进制为98752,然后*2/3=65834.666666666666666666666666667
四舍五入为65835就是注册码。
不足之处请指教。
再次谢谢楼主提供的思路,让我茅塞顿开。
|
能力值:
( LV8,RANK:130 )
|
-
-
29 楼
很高兴能对你有帮助。
我也很菜,所以我的方法很苯,很难看。:)
|
能力值:
( LV2,RANK:10 )
|
-
-
30 楼
多谢楼主!
|
能力值:
( LV4,RANK:50 )
|
-
-
31 楼
我一看到与硬件有关就有点头痛,不过为了达到一个更高的层次,不得不破
感谢了 很受用
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
学习学习
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
好东西!我学习了!
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
强,收藏,电脑要换新硬盘了
|
|
|