【文章标题】: CRACKME破解分析
【文章作者】: 逍遥风
【下载地址】: 本地下载
【使用工具】: OD,计算器
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
菜鸟偶得一点心得,与大家分享
----------------------------------------------------------------------
【详细过程】
这个CRACKME用到了SHA加密算法。
注意用字符串查找功能找不到关键的提示信息,所以在命令行下断点
BP GetWindowTextLengthA
或者
BP GetWindowTextA
都可以中断在关键处
0040555B |. E8 94EAFFFF call ; \GetWindowTextA
00405560 |. 8D45 F8 lea eax, [ebp-8] ; 取注册名的位数
00405563 |. E8 A0D8FFFF call 00402E08
00405568 |. A1 34754000 mov eax, [407534]
0040556D |. 50 push eax ; /hWnd => 000E04C6 (class='Edit',parent=000D0518)
0040556E |. E8 89EAFFFF call ; \GetWindowTextLengthA
00405573 |. 99 cdq ; 取输入的注册码的位数
00405574 |. 8945 E8 mov [ebp-18], eax
00405577 |. 8955 EC mov [ebp-14], edx
0040557A |. 8B5D E8 mov ebx, [ebp-18]
0040557D |. 85DB test ebx, ebx
0040557F |. 7E 10 jle short 00405591
00405581 |> 8D45 F8 /lea eax, [ebp-8]
00405584 |. BA 8C564000 |mov edx, 0040568C
00405589 |. E8 9AD9FFFF |call 00402F28
0040558E |. 4B |dec ebx
0040558F |.^ 75 F0 \jnz short 00405581
00405591 |> 6A 20 push 20
00405593 |. 8B45 F8 mov eax, [ebp-8]
00405596 |. E8 55DAFFFF call 00402FF0
0040559B |. 50 push eax ; |Buffer
0040559C |. A1 34754000 mov eax, [407534] ; |
004055A1 |. 50 push eax ; |hWnd => 000E04C6 (class='Edit',parent=000D0518)
004055A2 |. E8 4DEAFFFF call ; \GetWindowTextA
004055A7 |. 8D45 F8 lea eax, [ebp-8] ; 取输入的注册码
004055AA |. 8B4D F8 mov ecx, [ebp-8] ; 使ECX等于输入的注册码
004055AD |. BA 98564000 mov edx, 00405698 ; 0
004055B2 |. E8 B5D9FFFF call 00402F6C
004055B7 |. 83C9 FF or ecx, FFFFFFFF
004055BA |. 837D F4 00 cmp dword ptr [ebp-C], 0
004055BE |. 75 08 jnz short 004055C8
004055C0 |. 837D F0 1E cmp dword ptr [ebp-10], 1E
004055C4 |. 77 53 ja short 00405619
004055C6 |. EB 02 jmp short 004055CA
004055C8 |> 7F 4F jg short 00405619
以上分别是对注册名/码的位数,进行一些检验。
检验完毕后运行到下面代码处。
004055CA |> 8D45 FC lea eax, [ebp-4] ; 取输入的注册名
004055CD |. 8B4D FC mov ecx, [ebp-4] ; 使ECX等于输入的注册名
004055D0 |. BA A4564000 mov edx, 004056A4 ; diken
004055D5 |. E8 92D9FFFF call 00402F6C ; 取固定字符串"DiKeN"
004055DA |. 8B45 FC mov eax, [ebp-4] ; 固定字符串DiKeN与注册名合并,组成字符串A
将固定字符串DiKeN与注册名合并组成字符串A
以注册名lovetc为例:
组成的字符串A就是 DiKeNlovetc
004055DD |. E8 3ED9FFFF call 00402F20 ; 取字符串A的位数
004055E2 |. 99 cdq
004055E3 |. 8945 F0 mov [ebp-10], eax ; 保存字符串A的位数
004055E6 |. 8955 F4 mov [ebp-C], edx
004055E9 |. 8D45 D4 lea eax, [ebp-2C]
004055EC |. 8B4D FC mov ecx, [ebp-4] ; 使ECX等于字符串A
004055EF |. BA 04000000 mov edx, 4 ; 使EDX等于4
004055F4 |. E8 0FFDFFFF call 00405308 ; 对字符串A进行SHA计算
关键部分,对字符串A进行SHA计算。如何得知是SHA计算呢?
[注意]看雪招聘,专注安全领域的专业人才平台!