【破文标题】CRACKME分析
【破文作者】逍遥风
【破解工具】OD PEID
【破解平台】winXP
【原版下载】www.crackmes.de
【破解声明】算法练习,简单的循环计算(www.crackmes.de真是个好地方,呵呵!)
----------------------------------------------------------------------
1)PEID检查。ASPack 2.11 -> Alexey Solodovnikov。简单的壳,轻松脱掉。再检查发现是用Delphi写的
2)用字符串查找很容易找到关键处。
3)根据提示来到以下代码处。
算法开始:
00458159 |. 55 push ebp ; 在这里下断
0045815A |. 68 90824500 push 00458290
0045815F |. 64:FF30 push dword ptr fs:[eax]
00458162 |. 64:8920 mov fs:[eax], esp
00458165 |. 8D55 F8 lea edx, [ebp-8]
00458168 |. 8B45 FC mov eax, [ebp-4]
0045816B |. 8B80 D8020000 mov eax, [eax+2D8]
00458171 |. E8 16BFFCFF call 0042408C ; 取注册名
00458176 |. 8D55 EC lea edx, [ebp-14]
00458179 |. 8B45 FC mov eax, [ebp-4]
0045817C |. 8B80 D8020000 mov eax, [eax+2D8]
00458182 |. E8 05BFFCFF call 0042408C ; 取注册名位数
00458187 |. 837D EC 00 cmp dword ptr [ebp-14], >; 注册名位数与0比较(输入注册名了吗?)
0045818B |. 75 0A jnz short 00458197 ; 没有输入注册名就出现提示
0045818D |. B8 A8824500 mov eax, 004582A8 ; enter you name, pls.
00458192 |. E8 4DC1FEFF call 004442E4
00458197 |> 8D55 E8 lea edx, [ebp-18]
0045819A |. 8B45 FC mov eax, [ebp-4]
0045819D |. 8B80 DC020000 mov eax, [eax+2DC]
004581A3 |. E8 E4BEFCFF call 0042408C ; 取输入的注册码位数
004581A8 |. 837D E8 00 cmp dword ptr [ebp-18], >; 输入注册码了吗?
004581AC |. 75 0A jnz short 004581B8 ; 没有输入注册码就出现提示
004581AE |. B8 C8824500 mov eax, 004582C8 ; enter the serial, pls.
004581B3 |. E8 2CC1FEFF call 004442E4
004581B8 |> 8B45 F8 mov eax, [ebp-8]
004581BB |. E8 BCB9FAFF call 00403B7C ; 取注册名位数
004581C0 |. 8BF8 mov edi, eax ; 注册名位数放进EDI,作为循环计算的次数
004581C2 |. 85FF test edi, edi
004581C4 |. 7E 50 jle short 00458216
004581C6 |. BB 01000000 mov ebx, 1 ; 使EBX=1
004581CB |> 8B45 F8 /mov eax, [ebp-8] ; 取出注册名
004581CE |. 0FB67418 FF |movzx esi, byte ptr [eax+>; 取注册名每一位的ASCII值
004581D3 |. 8BC6 |mov eax, esi ; EAX=注册名每一位的ASCII值
004581D5 |. B9 06000000 |mov ecx, 6 ; 使ECX=6
004581DA |. 33D2 |xor edx, edx ; EDX清零
004581DC |. F7F1 |div ecx ; EAX中的值除以ECX中的值(注册名每一位的ASCII码除以0x6,A1)
004581DE |. 8B55 F8 |mov edx, [ebp-8] ; 取出注册名
004581E1 |. 8BD6 |mov edx, esi ; EAX=注册名每一位的ASCII值
004581E3 |. C1EA 02 |shr edx, 2 ; EDX中的值除以2的平方(注册名每一位的ASCII码除以2的平方,A2)
004581E6 |. F7EA |imul edx ; EAX=EAX*EDX
004581E8 |. 50 |push eax ; 把所得的积储存(把积设为A)
004581E9 |. 8B45 F8 |mov eax, [ebp-8] ; 取出注册名
004581EC |. 8BC6 |mov eax, esi ; EAX=注册名每一位的ASCII值
004581EE |. B9 0A000000 |mov ecx, 0A ; 使ECX=0xA
004581F3 |. 33D2 |xor edx, edx ; EDX清零
004581F5 |. F7F1 |div ecx ; EAX中的值除以ECX中的值(注册名每一位的ASCII值除以0xA)。结果设为B
004581F7 |. 5A |pop edx ; 取出A
004581F8 |. 92 |xchg eax, edx
004581F9 |. 8BCA |mov ecx, edx ; 使ECX=EDX
004581FB |. 33D2 |xor edx, edx ; EDX清零
004581FD |. F7F1 |div ecx ; EAX/ECX(用A除以B)
004581FF |. 8D55 E4 |lea edx, [ebp-1C]
00458202 |. E8 FDF8FAFF |call 00407B04 ; A除以B所得的商转换成对应的十进制数
00458207 |. 8B55 E4 |mov edx, [ebp-1C] ; 结果放进EDX中
0045820A |. 8D45 F4 |lea eax, [ebp-C]
0045820D |. E8 72B9FAFF |call 00403B84 ; 合并每次计算的结果组成一个字符串设为C
00458212 |. 43 |inc ebx ; 每计算一次EBX+1
00458213 |. 4F |dec edi ; 每计算一次EDI-1
00458214 |.^ 75 B5 \jnz short 004581CB ; 循环计算
00458216 |> 68 E8824500 push 004582E8 ; adcm4-(固定字符串1)
0045821B |. FF75 F4 push dword ptr [ebp-C]
0045821E |. 68 F8824500 push 004582F8 ; -yeah!(固定字符串2)
00458223 |. 8D45 F0 lea eax, [ebp-10]
00458226 |. BA 03000000 mov edx, 3
0045822B |. E8 0CBAFAFF call 00403C3C ; 将计算结果C与固定字符串合并,字符串1-C-字符串2
00458230 |. 8D55 E0 lea edx, [ebp-20]
00458233 |. 8B45 FC mov eax, [ebp-4]
00458236 |. 8B80 DC020000 mov eax, [eax+2DC]
0045823C |. E8 4BBEFCFF call 0042408C ; 取输入的注册码
00458241 |. 8B55 E0 mov edx, [ebp-20] ; EDX=输入的注册码
00458244 |. 8B45 F0 mov eax, [ebp-10] ; EAX=正确的注册码
00458247 |. E8 40BAFAFF call 00403C8C ; 注册码比较CALL
0045824C |. 75 0A jnz short 00458258 ; 不相等就跳向失败
0045824E |. B8 08834500 mov eax, 00458308 ; well done cracker, you did it!
算法结束
----------------------------------------------------------------------
算法总结:
1)用注册名每一位的ASCII值除以0x6。得到结果设为A1
2)用注册名每一位的ASCII值除以2的平方。得到的结果设为A2
3)设A=(A1)*(A2)
4)用注册名每一位的ASCII值除以0xA。得到结果设为B
5)将A除以B所得的商转换成对应的十进制数。设为Cn (n为循环次数)
6)如上循环计算,注册名位数为循环次数。并把每次计算结果C1。。。Cn合并得到C
7)把C与两个固定字符串合并,形如:固定字符串1-C-固定字符串2
例
注册名:lovetc
注册码:ADCM4-484450405042-YEAH!
----------------------------------------------------------------------
【版权声明】本文只为交流,转载请保留作者及文章完整性。
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!
上传的附件: