学破解有段时间了,和很多新手一样刚开始也是不晓得如何入手,尽管在学校以前学过汇编,看了看雪的破解精华,但感觉就像是看天书一样,看不懂,不懂那些作者怎么就知道某些汇编指令就是取注册码的,哪些语句是计算注册码的
,也一直没找到可以方便自己破解的软件,前天在网上下了个局域网通讯工具是免费的,就是有一个"闪屏振动"功能只给赞助会员用,还有就是"闪屏振动"有限制的,不能一直发.昨天开始放了三天假,终于有点自己的时间来弄下这个,呵呵,没想到过程还比较顺利,在OD中追到注册码后,一鼓作气,做出内存注册机了,至于算法注册机,我已经大概知道是在哪个call中,现在就是还要要学下汇编,再看看以前大侠们是如何推出算法的,再做吧,不过我是不会把注册机发出来的,因为感觉软件工作者不容易,所以自己也一直犹豫要不要向软件方向发展
这个请高手们赐教下.废话不多说了,下面就是我的破解过程,第一次写这种东西,不懂破文的格式,望版主海涵
前面已经说了"闪屏振动"只给赞助会员用,会出现个提示对话框,有一个计算机标识码(估计用来算序列号的),还有就是个序列号输入框,输入 111111111 点确定,出现 注册码不正确 的提示,好,就用这个了
用peid查壳显示无壳,用VC6.0写的,呵呵,看来作者好像还没有防破解的意识.用od载入,用插件查找ASCII码"注册码",嗯,果真是没有防破解意识,连注册正确的字样都看到了,双击来到代码区,如下所示
004520C6 . EB 05 jmp short 004520CD
004520C8 > 1BC0 sbb eax, eax
004520CA . 83D8 FF sbb eax, -1
004520CD 85C0 test eax, eax
004520CF 74 26 je short 004520F7 ;假注册关键跳转
004520D1 . 68 604D5A00 push 005A4D60
004520D6 . 8D4C24 10 lea ecx, dword ptr [esp+10]
004520DA . E8 E7070D00 call 005228C6
004520DF . 8B47 1C mov eax, dword ptr [edi+1C]
004520E2 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004520E4 . 68 6C185900 push 0059186C ; |提示
004520E9 . 68 58445900 push 00594458 ; |注册码不正确!004520EE . 50 push eax ; |hOwner
004520EF . FF15 B4965400 call dword ptr [<&USER32.MessageBoxA>] ; \MessageBoxA
004520F5 . EB 1D jmp short 00452114
004520F7 > 8B4F 1C mov ecx, dword ptr [edi+1C]
004520FA . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004520FC . 68 50445900 push 00594450 ; |成功
00452101 . 68 40445900 push 00594440 ; |注册码正确!
00452106 . 51 push ecx ; |hOwner
00452107 . FF15 B4965400 call dword ptr [<&USER32.MessageBoxA>] ; \MessageBoxA
从004520E4往上找,嗯,看到004520CF 74 26 je short 004520F7 ,如果相等就跳到004520F7 ,嗯,对就是跳到注册码正确的地方.把它改成jmp,呵呵.保存修改到文件后,自己感觉好像没这么简单吧,再运行修改好的文件,随便输入注册码注册,提示注册码正确,可是再点"闪屏振动"还是提示要注册,果然是没这么简单,再用od重新载入,到上面的地方,再看代码,好像也只是个假注册的跳转,只是提示是注册码正确而已,代码中好像没有其它动作了(比如保存已注册了的信息),那就输入注册码再跟下吧,再往上走到下面在 0045206B 处下断,因为看它上面相关的好像没有call了,应该可以
0045206B . 8BF9 mov edi, ecx ;在此下的断
0045206D . 6A 01 push 1
0045206F . E8 D3F00C00 call 00521147
00452074 . 51 push ecx
00452075 . 8D47 5C lea eax, dword ptr [edi+5C]
00452078 . 8BCC mov ecx, esp
0045207A . 896424 14 mov dword ptr [esp+14], esp
0045207E . 50 push eax
0045207F . E8 2E040D00 call 005224B2
00452084 . 8D4C24 10 lea ecx, dword ptr [esp+10]
00452088 . 51 push ecx
00452089 . E8 722D0200 call 00474E00 ;计算 注册码 的call
0045208E . 83C4 08 add esp, 8
00452091 . 8B77 60 mov esi, dword ptr [edi+60]
00452094 . 8B4424 0C mov eax, dword ptr [esp+C]
00452098 . C74424 1C 00000000 mov dword ptr [esp+1C], 0 ;EAX中出现一个字符串长得蛮像注册码的,呵呵,试了下,果然是
004520A0 > 8A10 mov dl, byte ptr [eax]
004520A2 . 8A1E mov bl, byte ptr [esi]
再重新注册下,用F8单步走了下在00452098 . C74424 1C 00000000 mov dword ptr [esp+1C], 0 ;EAC中出现一个字符串长得蛮像注册码的,呵呵,试了下,果然是,其实对于我个人用来说已经够了,但自己还是跟进了上面两个call,第一个call是用来干嘛的,好像没有跟, call 005224B2 跟了忘 了是做什么,call 00474E00 ;计算 注册码 的call是用来计算注册码的call,我电脑中间会生成一个NOViIRkjjlbcpEh的字符串,还会生成36位的数值串"27254172362365817417217374157220278117493218959120685178213248",再生成注册码,哎,以目前的水平分析出注册码算法还有点难度,以后再做,先还是做内存注册机做了.
内存注册机选好了两个方法,一个是
00452098 . C74424 1C 00000000 mov dword ptr [esp+1C], 0 //此时EAX为注册码
另一个是
先进call 00474E00
00452089 . E8 722D0200 call 00474E00 应该是计算注册码的call
再看00474E00 /$ 6A FF push -1
00474FF8 |. E8 B5D40A00 call 005224B2 //此时EAX为注册码
在自己电脑上试了下第一个,成功了,呵,又给一个同事发了试了下,还是好的
不试了就这样吧,最后还剩算法注册机,等再学学汇编再做吧,就这样发个自己做的内存注册机的截图.
忘了加上去掉 不能频繁地发送闪屏振动 功能限制,不过这个功能也不错,免得骚乱,但还是把它破解了
还是查找ASCI码"您不能频繁地发送闪屏振动",找到地址,下面的,把je改jmp就可以了,也还有其它改法就不说了,反正跳下面的计数及其后的一点代码就行了
00428FBF . 8B87 30310100 mov eax, dword ptr [edi+13130]
00428FC5 . 8B35 44945400 mov esi, dword ptr [<&KERNEL32.GetTi>; kernel32.GetTickCount
00428FCB . 3BC3 cmp eax, ebx
00428FCD 74 2D je short 00428FFC //关键跳,改成jmp
00428FCF . FFD6 call esi ; [GetTickCount
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件: