-
-
[原创]一个很简单的CrackMe的算法分析+注册机
-
发表于:
2006-7-14 15:45
8042
-
[原创]一个很简单的CrackMe的算法分析+注册机
【文章标题】: 一个很简单的CrackMe的算法分析+注册机
【文章作者】: bxm
【作者邮箱】: bxm78@163.com
【软件名称】: AD_CM#3
【保护方式】: name,serial
【编写语言】: Borland Delphi 4.0 - 5.0
【使用工具】: peid,od
【操作平台】: winxp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
用peid查壳,无壳,运行,收集足够信息用OD载入,通过字符串“enter you name, pls.”下断点,断点在[004581A1]
004581A1 |. B8 88824500 mov eax, 00458288 ; enter you name, pls.
004581A6 |. E8 39C1FEFF call 004442E4
004581AB |> 8D55 EC lea edx, [ebp-14]
004581AE |. 8B87 DC020000 mov eax, [edi+2DC]
004581B4 |. E8 D3BEFCFF call 0042408C
004581B9 |. 837D EC 00 cmp dword ptr [ebp-14], 0
004581BD |. 75 0A jnz short 004581C9
004581BF |. B8 A8824500 mov eax, 004582A8 ; enter the serial, pls.
004581C4 |. E8 1BC1FEFF call 004442E4
004581C9 |> 8B45 FC mov eax, [ebp-4]
004581CC |. E8 ABB9FAFF call 00403B7C
004581D1 |. 8BD8 mov ebx, eax
004581D3 |. 85DB test ebx, ebx
004581D5 |. 7E 2D jle short 00458204
004581D7 |. BE 01000000 mov esi, 1
004581DC |> 8B45 FC /mov eax, [ebp-4] ; name入EAX
004581DF |. 0FB64430 FF |movzx eax, byte ptr [eax+esi-1] ; name的每个字符依次入EAX
004581E4 |. B9 03000000 |mov ecx, 3 ; 除数3入ECX
004581E9 |. 33D2 |xor edx, edx
004581EB |. F7F1 |div ecx ; EAX/ECX,商在EAX中
004581ED |. 8D55 E8 |lea edx, [ebp-18]
004581F0 |. E8 0FF9FAFF |call 00407B04 ; 把商转换成十进制数的ASCII
004581F5 |. 8B55 E8 |mov edx, [ebp-18]
004581F8 |. 8D45 F8 |lea eax, [ebp-8]
004581FB |. E8 84B9FAFF |call 00403B84 ; 连接两个字符串
00458200 |. 46 |inc esi
00458201 |. 4B |dec ebx
00458202 |.^ 75 D8 \jnz short 004581DC
00458204 |> 8D45 F4 lea eax, [ebp-C]
00458207 |. 8B4D F8 mov ecx, [ebp-8]
0045820A |. BA C8824500 mov edx, 004582C8 ; adcm3-
0045820F |. E8 B4B9FAFF call 00403BC8 ; 把字符串“adcm3-”转换成大写,再与根据name算出的serial相连接
00458214 |. 8D55 E4 lea edx, [ebp-1C]
00458217 |. 8B87 DC020000 mov eax, [edi+2DC]
0045821D |. E8 6ABEFCFF call 0042408C
00458222 |. 8B55 E4 mov edx, [ebp-1C]
00458225 |. 8B45 F4 mov eax, [ebp-C]
00458228 |. E8 5FBAFAFF call 00403C8C ; 真码与假码比较
0045822D |. 75 0A jnz short 00458239 ; 相同,成功
0045822F |. B8 D8824500 mov eax, 004582D8 ; well done cracker, you did it!
00458234 |. E8 ABC0FEFF call 004442E4
算法小结:
1、用naem的每个字符除以3,把商转换成十进制数,并依次连接,结果记为A。
2、固定字符串“ADCM3-”与A连接即成注册码。
附注册机:
#include<string.h>
main()
{
char name[64];
char serial[128];
int i,len,temp;
scanf("%s",&name);
len=strlen(name);
for(i=0;i<len;i++)
{
temp=name[i]/3;
serial[i*2]=temp/10+0x30;
serial[i*2+1]=temp%10+0x30;
}
printf("ADCM3-");
for(i=0;i<2*len;i++)
printf("%c",serial[i]);
}
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年07月14日 下午 03:43:42
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!