【文章标题】: happytown的CRACK入门系列第4题
【文章作者】: 铁面王子
【作者QQ号】: 173991904
【软件名称】: KeyGenMe_04.exe
【下载地址】: http://bbs.pediy.com/showthread.php?t=33853
【加壳方式】: 无
【编写语言】: delphi
【使用工具】: OD+计算器
【操作平台】: sp sq2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
无壳,输入假码无任何反应,直接用OD打开程序.
先来找找看是否有,有用的字符串,,居然找到 good job,man!
高兴之余,直接双击来这里
0045015F |. 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00450161 |. 68 98014500 push 00450198 ; |congratulations
00450166 |. 68 A8014500 push 004501A8 ; |good job,man!
0045016B |. 6A 00 push 0 ; |hOwner = NULL
0045016D |. E8 2E63FBFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
向上翻翻, 好我们就在00450034处下断试试吧
输入注册名:123456
注册码:456789
00450034 /. 55 push ebp :断在这里按F8单步执行
00450035 |. 8BEC mov ebp, esp
00450037 |. 83C4 F8 add esp, -8
0045003A |. 8955 F8 mov dword ptr [ebp-8], edx
0045003D |. 8945 FC mov dword ptr [ebp-4], eax
00450040 |. E8 DB3CFBFF call 00403D20
00450045 |. 59 pop ecx
00450046 |. 59 pop ecx
00450047 |. 5D pop ebp
00450048 \. C3 retn
00450049 8D40 00 lea eax, dword ptr [eax]
0045004C /. 55 push ebp
0045004D |. 8BEC mov ebp, esp
0045004F |. 83C4 DC add esp, -24
00450052 |. 33C9 xor ecx, ecx
00450054 |. 894D F8 mov dword ptr [ebp-8], ecx
00450057 |. 894D F4 mov dword ptr [ebp-C], ecx
0045005A |. 8955 E0 mov dword ptr [ebp-20], edx
0045005D |. 8945 FC mov dword ptr [ebp-4], eax
00450060 |. 33C0 xor eax, eax
00450062 |. 55 push ebp
00450063 |. 68 8D014500 push 0045018D
00450068 |. 64:FF30 push dword ptr fs:[eax]
0045006B |. 64:8920 mov dword ptr fs:[eax], esp
0045006E |. 8D55 F8 lea edx, dword ptr [ebp-8]
00450071 |. 8B45 FC mov eax, dword ptr [ebp-4]
00450074 |. 8B80 00030000 mov eax, dword ptr [eax+300]
0045007A |. E8 D9F2FDFF call 0042F358
0045007F |. 8B45 F8 mov eax, dword ptr [ebp-8] ; 注册名传入
00450082 |. E8 4940FBFF call 004040D0 ; 检测用户名长度
00450087 |. 8945 F0 mov dword ptr [ebp-10], eax ; 注册名长度传入
0045008A |. 837D F0 02 cmp dword ptr [ebp-10], 2 ; 注册名不能小于2
0045008E |. 0F8C DE000000 jl 00450172
00450094 |. 8D55 F4 lea edx, dword ptr [ebp-C]
00450097 |. 8B45 FC mov eax, dword ptr [ebp-4]
0045009A |. 8B80 08030000 mov eax, dword ptr [eax+308]
004500A0 |. E8 B3F2FDFF call 0042F358
004500A5 |. 8B45 F4 mov eax, dword ptr [ebp-C] ; 传入注册码
004500A8 |. E8 2340FBFF call 004040D0 ; 测度注册码长度
004500AD |. 8945 EC mov dword ptr [ebp-14], eax ; 注册码位数传入
004500B0 |. 837D EC 0A cmp dword ptr [ebp-14], 0A ; 注册码一定等于10位,出错(这里看出我们输入的注册码少于10位重新来过)
004500B4 |. 0F85 B8000000 jnz 00450172
004500BA |. 8B45 EC mov eax, dword ptr [ebp-14]
004500BD |. 85C0 test eax, eax
004500BF |. 7E 34 jle short 004500F5
004500C1 |. 8945 E4 mov dword ptr [ebp-1C], eax
004500C4 |. C745 E8 01000>mov dword ptr [ebp-18], 1 ; 初始化循环变量
004500CB |> 8B45 F4 /mov eax, dword ptr [ebp-C] ; 这里到....
004500CE |. 8B55 E8 |mov edx, dword ptr [ebp-18]
004500D1 |. 807C10 FF 30 |cmp byte ptr [eax+edx-1], 30
004500D6 |. 0F82 96000000 |jb 00450172
004500DC |. 8B45 F4 |mov eax, dword ptr [ebp-C]
004500DF |. 8B55 E8 |mov edx, dword ptr [ebp-18]
004500E2 |. 807C10 FF 39 |cmp byte ptr [eax+edx-1], 39
004500E7 |. 0F87 85000000 |ja 00450172
004500ED |. FF45 E8 |inc dword ptr [ebp-18]
004500F0 |. FF4D E4 |dec dword ptr [ebp-1C]
004500F3 |.^ 75 D6 \jnz short 004500CB ; 这部分检测注册码中有没有字母
004500F5 |> 8B45 F4 mov eax, dword ptr [ebp-C] ; 假注册码传入
004500F8 |. 0FB600 movzx eax, byte ptr [eax] ; 取注册码的第1位
004500FB |. 8B55 F4 mov edx, dword ptr [ebp-C]
004500FE |. 0FB652 05 movzx edx, byte ptr [edx+5] ; 取注册码的第5位
00450102 |. 03C2 add eax, edx ; 注册码第一位和第六位相加必须等于6D
00450104 |. 83F8 6D cmp eax, 6D ; 比较是不是等于6D
00450107 |. 75 69 jnz short 00450172 ; 不相等就跳出
00450109 |. 8B45 F4 mov eax, dword ptr [ebp-C]
0045010C |. 0FB640 01 movzx eax, byte ptr [eax+1] ; 取注册码的第2位
00450110 |. 8B55 F4 mov edx, dword ptr [ebp-C]
00450113 |. 0FB652 06 movzx edx, byte ptr [edx+6] ; 取注册码的第6位
00450117 |. 03C2 add eax, edx ; 第1位和第6位相加,结果一定要等于67
00450119 |. 83F8 67 cmp eax, 67 ; 比较结果
0045011C |. 75 54 jnz short 00450172
0045011E |. 8B45 F4 mov eax, dword ptr [ebp-C]
00450121 |. 0FB640 02 movzx eax, byte ptr [eax+2]
00450125 |. 8B55 F4 mov edx, dword ptr [ebp-C]
00450128 |. 0FB652 07 movzx edx, byte ptr [edx+7]
0045012C |. 03C2 add eax, edx ; 第2位和第7位相加,结果一定要等于69
0045012E |. 83F8 69 cmp eax, 69
00450131 |. 75 3F jnz short 00450172
00450133 |. 8B45 F4 mov eax, dword ptr [ebp-C]
00450136 |. 0FB640 03 movzx eax, byte ptr [eax+3]
0045013A |. 8B55 F4 mov edx, dword ptr [ebp-C]
0045013D |. 0FB652 08 movzx edx, byte ptr [edx+8]
00450141 |. 03C2 add eax, edx ; 第3位和第8位相加,结果一定要等于70
00450143 |. 83F8 70 cmp eax, 70
00450146 |. 75 2A jnz short 00450172
00450148 |. 8B45 F4 mov eax, dword ptr [ebp-C]
0045014B |. 0FB640 04 movzx eax, byte ptr [eax+4]
0045014F |. 8B55 F4 mov edx, dword ptr [ebp-C]
00450152 |. 0FB652 09 movzx edx, byte ptr [edx+9]
00450156 |. F7EA imul edx ; 第4位和第9位相*,结果一定要等于A8C
00450158 |. 3D 8C0A0000 cmp eax, 0A8C
0045015D |. 75 13 jnz short 00450172
0045015F |. 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00450161 |. 68 98014500 push 00450198 ; |congratulations
00450166 |. 68 A8014500 push 004501A8 ; |good job,man!
0045016B |. 6A 00 push 0 ; |hOwner = NULL
0045016D |. E8 2E63FBFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
注册名要大于1,用户必须等10
算法很简单,注册码和用户名没有关系
0位+5位=6D
1位+6位=67
2位+7位=69
3位+8位=70
4位*9位=A8C
可用注册码;8448253586
--------------------------------------------------------------------------------
【经验总结】
算法比较简单,有相关字符串参考
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年03月08日 22:22:02
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!