系统 : Windows xp
程序 : Bxm_CrackMe1
程序下载地址 :http://pan.baidu.com/s/1pK0a0xt
要求 : 分析算法
使用工具 :OD
可在看雪论坛中查找关于此程序的讨论:传送门
OD载入程序,利用插件查看字串表,双击“破解成功”的字串进入关键算法:
00402406 |. 50 push eax ; /src 00402407 |. 8D45 D0 lea eax, dword ptr [ebp-30] ; | 0040240A |. 50 push eax ; |dest 0040240B |. E8 24EDFFFF call <jmp.&MSVCRTD.strcpy> ; \strcpy 00402410 |. 83C4 08 add esp, 8 00402413 |. 8D4D D0 lea ecx, dword ptr [ebp-30] ; 取出字串地址 00402416 |. 51 push ecx ; /s 00402417 |. E8 1EEDFFFF call <jmp.&MSVCRTD.strlen> ; \strlen 0040241C |. 83C4 04 add esp, 4 0040241F |. 8945 E8 mov dword ptr [ebp-18], eax ; 保存长度 00402422 |. C745 EC 00000>mov dword ptr [ebp-14], 0 ; 取出一段内存置零 00402429 |. EB 09 jmp short 00402434 0040242B |> 8B55 EC /mov edx, dword ptr [ebp-14] 0040242E |. 83C2 01 |add edx, 1 00402431 |. 8955 EC |mov dword ptr [ebp-14], edx ; 循环变量自增 00402434 |> 8B45 EC mov eax, dword ptr [ebp-14] 00402437 |. 3B45 E8 |cmp eax, dword ptr [ebp-18] ; 迭代字串完毕则跳转 0040243A |. 7D 12 |jge short 0040244E 0040243C |. 8B4D EC |mov ecx, dword ptr [ebp-14] 0040243F |. 0FBE540D D0 |movsx edx, byte ptr [ebp+ecx-30] ; 取出字符 00402444 |. 8B45 F8 |mov eax, dword ptr [ebp-8] 00402447 |. 03C2 |add eax, edx ; 累加 00402449 |. 8945 F8 |mov dword ptr [ebp-8], eax ; 保存结果 0040244C |.^ EB DD \jmp short 0040242B 0040244E |> 8B4D F8 mov ecx, dword ptr [ebp-8] 00402451 |. F7D9 neg ecx ; 对结果进行求补运算 00402453 |. 8B55 F8 mov edx, dword ptr [ebp-8] 00402456 |. 0355 E8 add edx, dword ptr [ebp-18] ; 结果加上用户名字串的长度 00402459 |. 0FAFCA imul ecx, edx ; 相乘 0040245C |. 894D F4 mov dword ptr [ebp-C], ecx ; 保存结果 0040245F |. 8B4D FC mov ecx, dword ptr [ebp-4] 00402462 |. 83C1 64 add ecx, 64 00402465 |. E8 2AFBFFFF call <jmp.&MFC42D.#880> 0040246A |. 50 push eax ; /src 0040246B |. 8D45 B8 lea eax, dword ptr [ebp-48] ; | 0040246E |. 50 push eax ; |dest 0040246F |. E8 C0ECFFFF call <jmp.&MSVCRTD.strcpy> ; \strcpy 00402474 |. 83C4 08 add esp, 8 00402477 |. C745 B0 01000>mov dword ptr [ebp-50], 1 0040247E |. 8D4D B8 lea ecx, dword ptr [ebp-48] 00402481 |. 51 push ecx ; /s 00402482 |. E8 B3ECFFFF call <jmp.&MSVCRTD.strlen> ; \strlen 00402487 |. 83C4 04 add esp, 4 0040248A |. 83E8 01 sub eax, 1 ; 长度-1 0040248D |. 8945 B4 mov dword ptr [ebp-4C], eax ; 保存 00402490 |. EB 09 jmp short 0040249B 00402492 |> 8B55 B4 /mov edx, dword ptr [ebp-4C] 00402495 |. 83EA 01 |sub edx, 1 ; 循环变量自减 00402498 |. 8955 B4 |mov dword ptr [ebp-4C], edx 0040249B |> 837D B4 00 cmp dword ptr [ebp-4C], 0 ; 迭代完毕则跳转 0040249F |. 7C 22 |jl short 004024C3 004024A1 |. 8B45 B4 |mov eax, dword ptr [ebp-4C] 004024A4 |. 0FBE4C05 B8 |movsx ecx, byte ptr [ebp+eax-48] ; 倒序取字符 004024A9 |. 83E9 30 |sub ecx, 30 ; 转化为十进制 004024AC |. 0FAF4D B0 |imul ecx, dword ptr [ebp-50] ; 相乘 004024B0 |. 8B55 F0 |mov edx, dword ptr [ebp-10] 004024B3 |. 03D1 |add edx, ecx 004024B5 |. 8955 F0 |mov dword ptr [ebp-10], edx ; 保存累加结果 004024B8 |. 8B45 B0 |mov eax, dword ptr [ebp-50] 004024BB |. 6BC0 0A |imul eax, eax, 0A ; eax * 0A 004024BE |. 8945 B0 |mov dword ptr [ebp-50], eax ; 再存回去 004024C1 |.^ EB CF \jmp short 00402492 004024C3 |> 8B4D F0 mov ecx, dword ptr [ebp-10] ; 取结果 004024C6 |. 6BC9 FF imul ecx, ecx, -1 ; 取相反数 004024C9 |. 894D F0 mov dword ptr [ebp-10], ecx ; 再存回去 004024CC |. 837D E8 00 cmp dword ptr [ebp-18], 0 ; 用户名长度为0? 004024D0 |. 74 2F je short 00402501 ; 为0则破解失败 004024D2 |. 8B55 F0 mov edx, dword ptr [ebp-10] 004024D5 |. 0FAF55 F0 imul edx, dword ptr [ebp-10] ; 相反数 * 相反数 004024D9 |. 8B45 F0 mov eax, dword ptr [ebp-10] ; 取出结果 004024DC |. 0FAF45 E8 imul eax, dword ptr [ebp-18] ; 结果乘以用户名长度 004024E0 |. 8B4D F4 mov ecx, dword ptr [ebp-C] ; 取F(用户名) 004024E3 |. 03CA add ecx, edx ; 累加之前的结果 004024E5 |. 03C1 add eax, ecx 004024E7 |. 85C0 test eax, eax ; eax为0? 004024E9 |. 75 16 jnz short 00402501 ; 不为0则破解失败 004024EB |. 6A 00 push 0 004024ED |. 68 20514100 push 00415120 ; 恭喜你 004024F2 |. 68 14514100 push 00415114 ; 破解成功! 004024F7 |. 8B4D FC mov ecx, dword ptr [ebp-4] 004024FA |. E8 71ECFFFF call <jmp.&MFC42D.#3517> 004024FF |. EB 14 jmp short 00402515 00402501 |> 6A 00 push 0 00402503 |. 68 08514100 push 00415108 ; 破解失败 00402508 |. 68 58504100 push 00415058 ; 重试? 0040250D |. 8B4D FC mov ecx, dword ptr [ebp-4] 00402510 |. E8 5BECFFFF call <jmp.&MFC42D.#3517>
算法比较简单,就不一一说明了,直接修改4024E9处的跳转指令就可以完成爆破。
有兴趣的朋友可以尝试写出注册机。
时间: 2024-10-14 02:44:58