【破文作者】 小弟[爆破王]
【文章题目】 菜鸟必看的破解文章(2)-追出软件注册码-答案
【软件名称】 crackme
【破解难度】 初级 +++中级+++ 高级 超难
【破解平台】 XP SP2
----------------------------------------------------------------------------------------------
【文章简介】
是上篇帖子"菜鸟必看的破解文章(2)-追出软件注册码"的答案.
----------------------------------------------------------------------------------------------
【破解过程】
呵呵,答案我就写的不是很详细了,希望广大菜鸟能多多包涵.
用OllyDbg v1.10b载入后运行程序,随便输入姓名和序列号,点击registet,弹出提示"No, no just try again."
记下来,在反汇编后的代码上右击,搜索->字符参考,找到ASCII "No, no just try again."双击来到这里
00401969 . 68 83414000 push unpacked.00404183 ; |Text = "No, no just try again."
然后向上找,
004016D3 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004016D5 . 68 19414000 push unpacked.00404119 ; |Title = "Info"
004016DA . 68 1E414000 push unpacked.0040411E ; |Text = "Please enter a key"
004016DF . 6A 00 push 0 ; |hOwner = NULL
004016E1 . E8 C60D0000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
004016E6 . E9 8A020000 jmp unpacked.00401975
004016EB > 33C0 xor eax,eax
004016ED . 33DB xor ebx,ebx
004016EF . 33C9 xor ecx,ecx
004016F1 . B1 10 mov cl,10
004016F3 . BE 9B424000 mov esi,unpacked.0040429B
004016F8 . BF AF424000 mov edi,unpacked.004042AF
004016FD > 8A06 mov al,byte ptr ds:[esi]
004016FF . 8A66 01 mov ah,byte ptr ds:[esi+1]
00401702 . 3C 60 cmp al,60
00401704 . 76 02 jbe short unpacked.00401708
00401706 . 2C 20 sub al,20
00401708 > 80FC 60 cmp ah,60
0040170B . 76 03 jbe short unpacked.00401710
0040170D . 80EC 20 sub ah,20
00401710 > 2C 30 sub al,30
00401712 . 80EC 30 sub ah,30
00401715 . 3C 09 cmp al,9
00401717 . 76 02 jbe short unpacked.0040171B
00401719 . 2C 07 sub al,7
0040171B > 80FC 09 cmp ah,9
0040171E . 76 03 jbe short unpacked.00401723
00401720 . 80EC 07 sub ah,7
00401723 > 83C6 02 add esi,2
00401726 . C0E0 04 shl al,4
00401729 . 0AC4 or al,ah
0040172B . 8807 mov byte ptr ds:[edi],al
0040172D . 47 inc edi
0040172E . 49 dec ecx
0040172F .^ E2 CC loopd short unpacked.004016FD
00401731 . A1 73424000 mov eax,dword ptr ds:[404273]
00401736 . 8B1D 77424000 mov ebx,dword ptr ds:[404277]
0040173C . 2BC3 sub eax,ebx
0040173E . 66:8B1D AF424000 mov bx,word ptr ds:[4042AF]
00401745 . 66:3BC3 cmp ax,bx
00401748 . 74 05 je short unpacked.0040174F<---这个要改
0040174A . E9 13020000 jmp unpacked.00401962
0040174F > A1 69424000 mov eax,dword ptr ds:[404269]
00401754 . 8B1D 6D424000 mov ebx,dword ptr ds:[40426D]
0040175A . 03C3 add eax,ebx
0040175C . 66:35 1010 xor ax,1010
00401760 . 0FCB bswap ebx
00401762 . 2AC3 sub al,bl
00401764 . 33DB xor ebx,ebx
00401766 . 66:8B1D B1424000 mov bx,word ptr ds:[4042B1]
0040176D . B9 4E230000 mov ecx,234E
00401772 . 66:83F1 03 xor cx,3
00401776 . 02D9 add bl,cl
00401778 . 66:81F1 1010 xor cx,1010
0040177D . 03D9 add ebx,ecx
0040177F . 66:3BC3 cmp ax,bx
00401782 . 74 05 je short unpacked.00401789<----这个要改
00401784 . E9 D9010000 jmp unpacked.00401962
00401789 > 33C0 xor eax,eax
0040178B . 33DB xor ebx,ebx
0040178D . 33D2 xor edx,edx
0040178F . 66:A1 B3424000 mov ax,word ptr ds:[4042B3]
00401795 . 8BD8 mov ebx,eax
00401797 . 0FCB bswap ebx
00401799 . E8 7C000000 call unpacked.0040181A
0040179E . 66:3D 7D19 cmp ax,197D
004017A2 . 74 02 je short unpacked.004017A6<-----这个要改
004017A4 . EB 02 jmp short unpacked.004017A8
004017A6 > EB 0B jmp short unpacked.004017B3
004017A8 > 66:3D 5517 cmp ax,1755
004017AC . 74 05 je short unpacked.004017B3<----这个要改
004017AE . E9 AF010000 jmp unpacked.00401962
004017B3 > 33C0 xor eax,eax
004017B5 . 66:8B1D B5424000 mov bx,word ptr ds:[4042B5]
004017BC . 0FCB bswap ebx
004017BE . 8BC3 mov eax,ebx
004017C0 . 0BC0 or eax,eax
004017C2 . 74 21 je short unpacked.004017E5<-----这个要改
004017C4 . 0FBDD0 bsr edx,eax
004017C7 . B9 1F000000 mov ecx,1F
004017CC . 2BCA sub ecx,edx
004017CE . D3E0 shl eax,cl
004017D0 . 8D15 CB424000 lea edx,dword ptr ds:[4042CB]
004017D6 > D1E0 shl eax,1
004017D8 . 0F9202 setb byte ptr ds:[edx]
004017DB . 8002 30 add byte ptr ds:[edx],30
004017DE . 42 inc edx
004017DF . 41 inc ecx
004017E0 . 83F9 20 cmp ecx,20
004017E3 .^ 7C F1 jl short unpacked.004017D6
004017E5 > A1 CB424000 mov eax,dword ptr ds:[4042CB]
004017EA . 0B05 CF424000 or eax,dword ptr ds:[4042CF]
004017F0 . 0B05 D3424000 or eax,dword ptr ds:[4042D3]
004017F6 . 3D 31313130 cmp eax,30313131
004017FB . 74 05 je short unpacked.00401802<--------这个要改
004017FD . E9 60010000 jmp unpacked.00401962
00401802 > 6A 30 push 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00401804 . 68 31414000 push unpacked.00404131 ; |Title = "Info"
00401809 . 68 36414000 push unpacked.00404136 ; |Text = "Well done you have made it, send the solution to......"
0040180E . 6A 00 push 0 ; |hOwner = NULL
00401810 . E8 970C0000 call <jmp.&USER32.MessageBoxA> ; \MessageBoxA
把上面所有这个要改的跳转指令改为jne,注册成功
也许各位菜鸟都看到了,几乎每一个je后面都是无条件跳转指令jmp,而且每个jmp都跳转到错误提示信息那里
而那个je正好跳过了那个无条件跳转.所以我们改了他就可以爆破,估计这么多跳转是特意防止我们爆破的,
不过还是让我们爆破了.呵呵^_^
----------------------------------------------------------------------------------------------
【破解心得】
整理成程序格式
if 注册码正确 then<---这个是cmp加je的那个跳转,下面的都是
if 注册码正确 then
if 注册码正确 then
if 注册码正确 then
if 注册码正确 then
goto 注册码正确
else
goto 注册失败<----那个jmp
end if
else
goto 注册失败<----还是jmp
end if
else
goto 注册失败<----下面是注册失败的语句的都是jmp
end if
else
goto 注册失败
end if
else
goto 注册失败
end if
注册正确:
提示注册正确
注册失败:
提示注册失败
这个程序的注册验证部分整理成程序格式真折腾人,嵌套if语句都要把我弄昏了.可是编这个crackme的人竟然没有昏~~~~
厉害:)
----------------------------------------------------------------------------------------------
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
----------------------------------------------------------------------------------------------
文章写于2005-1-24 11:19:00
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)