wofan 发表于 2007-2-27 12:04:35

桌面图标任我排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          ; |
00464ED6|.8B40 30       mov   eax, dword ptr           ; |
00464ED9|.50            push    eax                              ; |hOwner
00464EDA|.E8 D526FAFF   call    <jmp.&user32.MessageBoxA>      ; \MessageBoxA


向上找到关键断点在这里:

004B1A8B|.8B45 FC       mov   eax, dword ptr          ;假注册码:123456
004B1A8E|.8A58 01       mov   bl, byte ptr              ;注册码第二位送BL,BL=32
004B1A91|.8B45 FC       mov   eax, dword ptr
004B1A94|.E8 9F2EF5FF   call    00404938
004B1A99|.8B55 FC       mov   edx, dword ptr
004B1A9C|.0FB64402 FE   movzx   eax, byte ptr       ;注册码倒数第二位,送EAX,EAX=35
004B1AA1|.48            dec   eax                              ;自减1,EAX=34
004B1AA2|.50            push    eax                              ;压栈保护结果
004B1AA3|.8D45 FC       lea   eax, dword ptr
004B1AA6|.E8 DD30F5FF   call    00404B88
004B1AAB|.5A            pop   edx
004B1AAC|.8850 01       mov   byte ptr , dl             ;将刚才压栈保护的结果,弹出到DL,替换假注册码的顺数第二位,假注册码变成:143456
004B1AAF|.8B45 FC       mov   eax, dword ptr
004B1AB2|.E8 812EF5FF   call    00404938
004B1AB7|.8BF0          mov   esi, eax
004B1AB9|.8D45 FC       lea   eax, dword ptr
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 , dl         ;还是替换,原来是:分别取假注册码顺数第二位的ASCII码加上2,倒数第二位的ASCII码减1,然后互换而已!!
004B1ACC|.8B87 00030000 mov   eax, dword ptr          ;假注册码123456变化成:143446
004B1AD2|.8B55 FC       mov   edx, dword ptr
004B1AD5|.E8 A224F9FF   call    00443F7C
004B1ADA|.8D45 FC       lea   eax, dword ptr
004B1ADD|.E8 9E2BF5FF   call    00404680
004B1AE2|.8D55 F0       lea   edx, dword ptr
004B1AE5|.8B87 00030000 mov   eax, dword ptr
004B1AEB|.E8 5C24F9FF   call    00443F4C
004B1AF0|.8B45 F0       mov   eax, dword ptr
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
004B1B02|.8B87 00030000 |mov   eax, dword ptr
004B1B08|.E8 3F24F9FF   |call    00443F4C
004B1B0D|.8B45 EC       |mov   eax, dword ptr          ;处理变化后的假注册码:143446
004B1B10|.8A5C30 FF   |mov   bl, byte ptr       ;倒数第一位开始传送。
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
004B1B20|.8BD3          |mov   edx, ebx
004B1B22|.E8 392DF5FF   |call    00404860
004B1B27|.8B55 E8       |mov   edx, dword ptr
004B1B2A|.8D45 FC       |lea   eax, dword ptr
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          ;得到结果: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

给出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
    sub al,3
    mov byte ptr ,al
    dec ecx
    inc edx
    test ecx,ecx
    jnz @loop
    mov cl,byte ptr
    inc cl
    mov al,byte ptr
    sub al,2
    mov byte ptr,cl
    mov byte ptr,al
    jmp @End
@Err:
    push 0
    MOV EAX,DWORD PTR SS:
    PUSH EAX
    MOV EAX,DWORD PTR SS:
    PUSH EAX
    PUSH MB_OK
    Call MessageBox      //提示
@End:
End;//End ASM
End;

//=======================================================================

hanxiucao 发表于 2007-3-14 22:55:41

很不错的算法学习,回个贴支持一下!:victory:

花满楼 发表于 2007-3-25 10:33:44

很不错,详细算法教程

iSky 发表于 2007-4-1 13:16:39

不错,学习了!!

coolmy 发表于 2007-4-15 21:46:13

算法不错,学习!

aaasss123123 发表于 2007-4-24 00:53:50

还是不会呀。。能不能教教我。。

tianxj 发表于 2007-4-24 08:15:01

给个原文件连接,练习一下

yin198888 发表于 2007-4-28 16:03:11

谢谢了已经注册了

zhouray 发表于 2009-5-5 19:41:15

顶一个,好的东西

jams327 发表于 2009-5-15 09:53:05

这个可以用一下呀,觉得不错
页: [1]
查看完整版本: 桌面图标任我排v2.10,分析及注册机源码