【文章标题】: 我的第一个破解
【文章作者】: 我从零KS
【作者邮箱】: pyw800923@yahoo.com.cn
【软件名称】: echap303.exe
【软件大小】: 303KB
【下载地址】: 自己搜索下载
【加壳方式】: 无
【编写语言】: delphi
【使用工具】: od peid keymake2.0
【操作平台】: win XP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
首先运行程序,发现有错误提示“Wrong code”
用OD载入,字串查找“Wrong code”来到下面:
004417C6 |. 55 push ebp
004417C7 |. 68 60184400 push echap303.00441860
004417CC |. 64:FF30 push dword ptr fs:[eax]
004417CF |. 64:8920 mov dword ptr fs:[eax], esp
004417D2 |. 8D55 FC lea edx, dword ptr ss:[ebp-4]
004417D5 |. 8B83 C8020000 mov eax, dword ptr ds:[ebx+2C8]
004417DB |. E8 C419FEFF call echap303.004231A4
004417E0 |. 8B45 FC mov eax, dword ptr ss:[ebp-4]
004417E3 |. 50 push eax
004417E4 |. 8D55 F4 lea edx, dword ptr ss:[ebp-C]
004417E7 |. 8B83 C4020000 mov eax, dword ptr ds:[ebx+2C4]
004417ED |. E8 B219FEFF call echap303.004231A4
004417F2 |. 8B45 F4 mov eax, dword ptr ss:[ebp-C]
004417F5 |. 8D55 F8 lea edx, dword ptr ss:[ebp-8]
004417F8 |. E8 FBFEFFFF call echap303.004416F8
004417FD |. 8B55 F8 mov edx, dword ptr ss:[ebp-8]
00441800 |. 58 pop eax
00441801 |. E8 3E23FCFF call echap303.00403B44
00441806 |. 75 1A jnz short echap303.00441822
00441808 |. 6A 40 push 40
0044180A |. B9 6C184400 mov ecx, echap303.0044186C ; ASCII "U made it"
0044180F |. BA 78184400 mov edx, echap303.00441878 ; ASCII "Right Code"
00441814 |. A1 302C4400 mov eax, dword ptr ds:[442C30]
00441819 |. 8B00 mov eax, dword ptr ds:[eax]
0044181B |. E8 D4D6FFFF call echap303.0043EEF4
00441820 |. EB 18 jmp short echap303.0044183A
00441822 |> 6A 10 push 10
00441824 |. B9 84184400 mov ecx, echap303.00441884 ; ASCII "Error"
00441829 |. BA 8C184400 mov edx, echap303.0044188C ; ASCII "Wrong Code"
从下向上寻找,可以发现00441806此处的跳转,可以跳到此处。所以,可以在004417C6处,按F2下断,按F9运行程序,用户名:pyw,序列号:7878
点OK,被OD断下:
F8一步一步分析:
004417E0 |. 8B45 FC mov eax, dword ptr ss:[ebp-4] ; 取输入的假注册码
004417E3 |. 50 push eax ; 放入堆栈
004417E4 |. 8D55 F4 lea edx, dword ptr ss:[ebp-C]
004417E7 |. 8B83 C4020000 mov eax, dword ptr ds:[ebx+2C4]
004417ED |. E8 B219FEFF call echap303.004231A4
004417F2 |. 8B45 F4 mov eax, dword ptr ss:[ebp-C] ; 取用户名到EAX
004417F5 |. 8D55 F8 lea edx, dword ptr ss:[ebp-8]
004417F8 |. E8 FBFEFFFF call echap303.004416F8 ; 针对用户名的注册码生成算法
004417FD |. 8B55 F8 mov edx, dword ptr ss:[ebp-8] ; 将最终计算出的注册码,放入EDX,为后面的比较,作准备
00441800 |. 58 pop eax
00441801 |. E8 3E23FCFF call echap303.00403B44 ;此过程,用于,将计算出的注册码,与输入的进行比较
00441806 |. 75 1A jnz short echap303.00441822
通过分析,可以发现004417F8所调用的过程是将输入的用户名,进行计算,得出最后的注册码,然后通过,00441801所调用的过程,与输入的假码,进行比较
相等转成功,否则转失败。
进入call echap303.004416F8,其代码为:
004416F8 /$ 53 push ebx
004416F9 |. 56 push esi
004416FA |. 57 push edi
004416FB |. 83C4 DC add esp, -24
004416FE |. 891424 mov dword ptr ss:[esp], edx
00441701 |. 8BF8 mov edi, eax ; 将用户名放到EDI中,准备处理
00441703 |. BB 05033949 mov ebx, 49390305 ; I9..
00441708 |. BE 20126348 mov esi, 48631220 ; Hc.
0044170D |. 8BC7 mov eax, edi
0044170F |. E8 2023FCFF call echap303.00403A34 ; 求用户名的长度
00441714 |. 85C0 test eax, eax ; 判断是否是空用户名
00441716 |. 7E 2E jle short echap303.00441746
00441718 |. BA 01000000 mov edx, 1 ; 进行循环前EDX先置1
0044171D |> 33C9 /xor ecx, ecx
0044171F |. 8A4C17 FF |mov cl, byte ptr ds:[edi+edx-1] ; 依次取用户名的每一位
00441723 |. 33D9 |xor ebx, ecx ; 与EBX异或,放入EBX
00441725 |. 33F3 |xor esi, ebx ; 上面处理的结果,再与ESI异或,放入ESI
00441727 |. F6C3 01 |test bl, 1
0044172A |. 74 0F |je short echap303.0044173B
0044172C |. D1FB |sar ebx, 1 ; 右移1位
0044172E |. 79 03 |jns short echap303.00441733
00441730 |. 83D3 00 |adc ebx, 0
00441733 |> 81F3 11032001 |xor ebx, 1200311 ; 再与1200311异或,放入EBX
00441739 |. EB 07 |jmp short echap303.00441742
0044173B |> D1FB |sar ebx, 1
0044173D |. 79 03 |jns short echap303.00441742
0044173F |. 83D3 00 |adc ebx, 0
00441742 |> 42 |inc edx
00441743 |. 48 |dec eax
00441744 |.^ 75 D7 \jnz short echap303.0044171D
00441746 |> 8B0424 mov eax, dword ptr ss:[esp] ; 将以上循环计算的最终结果,放在EBX,ESI中
00441749 |. 50 push eax ; /Arg1
0044174A |. 8BC3 mov eax, ebx ; |下面的程序段,是把EBX,ESI中的值,修正为"EBX的低16位-EBX的高16位-ESI的低16位-ESI的高16位"
0044174C |. 25 FFFF0000 and eax, 0FFFF ; |
00441751 |. 894424 08 mov dword ptr ss:[esp+8], eax ; |
00441755 |. C64424 0C 00 mov byte ptr ss:[esp+C], 0 ; |
0044175A |. C1EB 10 shr ebx, 10 ; |
0044175D |. 895C24 10 mov dword ptr ss:[esp+10], ebx ; |
00441761 |. C64424 14 00 mov byte ptr ss:[esp+14], 0 ; |
00441766 |. 8BC6 mov eax, esi ; |
00441768 |. 25 FFFF0000 and eax, 0FFFF ; |
0044176D |. 894424 18 mov dword ptr ss:[esp+18], eax ; |
00441771 |. C64424 1C 00 mov byte ptr ss:[esp+1C], 0 ; |
00441776 |. C1EE 10 shr esi, 10 ; |
00441779 |. 897424 20 mov dword ptr ss:[esp+20], esi ; |
0044177D |. C64424 24 00 mov byte ptr ss:[esp+24], 0 ; |
00441782 |. 8D5424 08 lea edx, dword ptr ss:[esp+8] ; |
00441786 |. B9 03000000 mov ecx, 3 ; |
0044178B |. B8 A4174400 mov eax, echap303.004417A4 ; |ASCII "%.4x-%.4x-%.4x-%.4x"
00441790 |. E8 6F68FCFF call echap303.00408004 ; \echap303.00408004
00441795 |. 83C4 24 add esp, 24
00441798 |. 5F pop edi
00441799 |. 5E pop esi
0044179A |. 5B pop ebx
0044179B \. C3 retn
该过程进行完毕,后退出到时:
004417FD |. 8B55 F8 mov edx, dword ptr ss:[ebp-8] ; 将最终计算出的注册码,放入EDX,为后面的比较,作准备
00441800 |. 58 pop eax
00441801 |. E8 3E23FCFF call echap303.00403B44 ;此过程,用于,将计算出的注册码,与输入的假码进行比较
00441806 |. 75 1A jnz short echap303.00441822
这就是该程序的整个运算过程,通过分析,可以采用keymake2.0来开发注册机。
用户名:pyw
注册码:208F-096F-D299-3638
我还没有权限,上传原程序和注册机,请大家原谅!!!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年05月01日 12:24:10
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!