桌面图标任我排v2.10,分析及注册机源码
桌面图标任我排v2.10
DIYDeskTop.exe
申请码:
Z3WIL6UF
注册码:
123456
偶尔在PYG看到,分析,发现真是超级简单,不过软件还是很有趣。
ASPack 2.12 -> Alexey Solodovnikov
Borland Delphi 6.0 - 7.0
居然有提示消息:
注册码错误,请重新输入!
bpx MessageBoxA
填入注册信息,会断在这里:
00464ED0 |. 53 push ebx ; /Style
00464ED1 |. 57 push edi ; |Title
00464ED2 |. 56 push esi ; |Text
00464ED3 |. 8B45 FC mov eax, dword ptr [ebp-4] ; |
00464ED6 |. 8B40 30 mov eax, dword ptr [eax+30] ; |
00464ED9 |. 50 push eax ; |hOwner
00464EDA |. E8 D526FAFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
向上找到关键断点在这里:
004B1A8B |. 8B45 FC mov eax, dword ptr [ebp-4] ; 假注册码:123456
004B1A8E |. 8A58 01 mov bl, byte ptr [eax+1] ; 注册码第二位送BL,BL=32
004B1A91 |. 8B45 FC mov eax, dword ptr [ebp-4]
004B1A94 |. E8 9F2EF5FF call 00404938
004B1A99 |. 8B55 FC mov edx, dword ptr [ebp-4]
004B1A9C |. 0FB64402 FE movzx eax, byte ptr [edx+eax-2] ; 注册码倒数第二位,送EAX,EAX=35
004B1AA1 |. 48 dec eax ; 自减1,EAX=34
004B1AA2 |. 50 push eax ; 压栈保护结果
004B1AA3 |. 8D45 FC lea eax, dword ptr [ebp-4]
004B1AA6 |. E8 DD30F5FF call 00404B88
004B1AAB |. 5A pop edx
004B1AAC |. 8850 01 mov byte ptr [eax+1], dl ; 将刚才压栈保护的结果,弹出到DL,替换假注册码的顺数第二位,假注册码变成:143456
004B1AAF |. 8B45 FC mov eax, dword ptr [ebp-4]
004B1AB2 |. E8 812EF5FF call 00404938
004B1AB7 |. 8BF0 mov esi, eax
004B1AB9 |. 8D45 FC lea eax, dword ptr [ebp-4]
004B1ABC |. E8 C730F5FF call 00404B88
004B1AC1 |. 33D2 xor edx, edx
004B1AC3 |. 8AD3 mov dl, bl ; 原来的假注册码码的顺数第二位,即32
004B1AC5 |. 83C2 02 add edx, 2 ; 加2,变成34
004B1AC8 |. 885430 FE mov byte ptr [eax+esi-2], dl ; 还是替换,原来是:分别取假注册码顺数第二位的ASCII码加上2,倒数第二位的ASCII码减1,然后互换而已!!
004B1ACC |. 8B87 00030000 mov eax, dword ptr [edi+300] ; 假注册码123456变化成:143446
004B1AD2 |. 8B55 FC mov edx, dword ptr [ebp-4]
004B1AD5 |. E8 A224F9FF call 00443F7C
004B1ADA |. 8D45 FC lea eax, dword ptr [ebp-4]
004B1ADD |. E8 9E2BF5FF call 00404680
004B1AE2 |. 8D55 F0 lea edx, dword ptr [ebp-10]
004B1AE5 |. 8B87 00030000 mov eax, dword ptr [edi+300]
004B1AEB |. E8 5C24F9FF call 00443F4C
004B1AF0 |. 8B45 F0 mov eax, dword ptr [ebp-10]
004B1AF3 |. E8 402EF5FF call 00404938
004B1AF8 |. 8BF0 mov esi, eax
004B1AFA |. 83FE 01 cmp esi, 1
004B1AFD |. 7C 38 jl short 004B1B37
004B1AFF |> 8D55 EC /lea edx, dword ptr [ebp-14]
004B1B02 |. 8B87 00030000 |mov eax, dword ptr [edi+300]
004B1B08 |. E8 3F24F9FF |call 00443F4C
004B1B0D |. 8B45 EC |mov eax, dword ptr [ebp-14] ; 处理变化后的假注册码:143446
004B1B10 |. 8A5C30 FF |mov bl, byte ptr [eax+esi-1] ; 倒数第一位开始传送。
004B1B14 |. 33C0 |xor eax, eax
004B1B16 |. 8AC3 |mov al, bl
004B1B18 |. 83C0 03 |add eax, 3 ; 每一位都加3
004B1B1B |. 8BD8 |mov ebx, eax
004B1B1D |. 8D45 E8 |lea eax, dword ptr [ebp-18]
004B1B20 |. 8BD3 |mov edx, ebx
004B1B22 |. E8 392DF5FF |call 00404860
004B1B27 |. 8B55 E8 |mov edx, dword ptr [ebp-18]
004B1B2A |. 8D45 FC |lea eax, dword ptr [ebp-4]
004B1B2D |. E8 0E2EF5FF |call 00404940
004B1B32 |. 4E |dec esi
004B1B33 |. 85F6 |test esi, esi
004B1B35 |.^ 75 C8 \jnz short 004B1AFF ; 循环,循环次数就是注册码的位数
004B1B37 |> B8 300D4C00 mov eax, 004C0D30
004B1B3C |. 8B55 FC mov edx, dword ptr [ebp-4] ; 得到结果:977674
004B1B3F |. E8 902BF5FF call 004046D4
004B1B44 |. E8 AFF3FFFF call 004B0EF8 ; 比较函数,两个参数,一个是机器码,另一个就是上面用注册码运算的结果:977674
总结:
本机机器码:Z3WIL6UF
对应的ASCII码是:
5A 33 57 49 4C 36 55 46
每一位的ASCII码都减3:
57 30 54 46 49 33 52 43
然后逆序。
43 52 33 49 46 54 30 57
顺数第二位加1,52+1=53
倒数第二位减2,30-2=2E
互换:
43 2E 33 49 46 54 53 57
转换成字符串形式就是注册码:
C.3IFTSW
11:02 2007-2-27
by wofan[OCN]
顺手给出KeyGen源码。
//-----------------------------------------------------------------------
//============= 函数,过程,回调函数 ==================================
//=======================================================================
procedure wofanKeygen(hdlg:HWND);
var
Title,text:string;
Begin
Title:='提示';
Text:='输入机器码了吗?';
ZeroMemory(@mCode,sizeof(mCode));
ZeroMemory(@mName,sizeof(mName));
GetDlgItemText(hDlg,IDC_Name,@mName,sizeof(mName));
asm
LEA ESI,mName //把机器码的地址传到ESI
test eax,eax //EAX 是GetDlgItemText函数返回值,它是字串实际长度
JE @Err //测试的结果,如果EAX为零,使Flag标志寄存器中的Z标志为零,则出错
lea edi,mCode //===========存放注册码=====================
mov ecx,eax //存放机器码的位数
xor edx,edx
@loop:
mov al,byte ptr [esi+ecx-1]
sub al,3
mov byte ptr [edi+edx],al
dec ecx
inc edx
test ecx,ecx
jnz @loop
mov cl,byte ptr[edi+1]
inc cl
mov al,byte ptr[edi+edx-2]
sub al,2
mov byte ptr[edi+edx-2],cl
mov byte ptr[edi+1],al
jmp @End
@Err:
push 0
MOV EAX,DWORD PTR SS:[Title]
PUSH EAX
MOV EAX,DWORD PTR SS:[Text]
PUSH EAX
PUSH MB_OK
Call MessageBox //提示
@End:
End; //End ASM
End;
//=======================================================================
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!