飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3066|回复: 3

【yqlxj申请加入PYG】 佳宜销售管理软件 V2.24 (企业版) 算法分析及注册机 (三)

[复制链接]
  • TA的每日心情
    开心
    2018-5-24 12:03
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-5-28 14:33:01 | 显示全部楼层 |阅读模式
    【破文标题】【yqlxj申请加入PYG】  佳宜销售管理软件 V2.24 (企业版) 分析及注册机 (三)
    【破文作者】yqlxj
    【作者邮箱】[email protected]
    破解工具】PEID OD
    【破解平台】XP SP2
    【软件名称】 佳宜销售管理软件 V2.24 (企业版)
    【软件大小】
    【原版下载】http://www.onlinedown.net/soft/39873.htm
    【保护方式】无
    【软件简介】本软件提供了完备的销售业务管理功能,包括销售管理(销售订单、销售出货、销售退货、收款登记)、基本信息(公司基本资料、客户资料、货品资料、员工档案、其他基础设置)、单据查询(订货单查询、收货单查询、付款单查询)、系统维护(操作权限、数据备份及恢复、数据压缩、数据清理)等功能。

    ------------------------------------------------------------------------
    【算法分析过程 】:
    用PEID查,无壳,Borland Delphi 6.0 - 7.0.
    OD载入,查找到字符串'系统注册成功,欢迎你使用本软件!,双击来到,
    注册开始:
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    005E591C  push    ebp
    005E591D  mov     ebp, esp
    005E591F  mov     ecx, 6
    005E5924  push    0
    005E5926  push    0
    005E5928  dec     ecx
    005E5929  jnz     short 005E5924
    005E592B  push    ecx
    005E592C  push    ebx
    005E592D  push    esi
    005E592E  push    edi
    005E592F  mov     dword ptr [ebp-4], eax
    005E5932  xor     eax, eax
    005E5934  push    ebp
    005E5935  push    005E5B9A
    005E593A  push    dword ptr fs:[eax]
    005E593D  mov     dword ptr fs:[eax], esp
    005E5940  lea     edx, dword ptr [ebp-10]
    005E5943  mov     eax, dword ptr [ebp-4]
    005E5946  mov     eax, dword ptr [eax+304]
    005E594C  call    0044E9E8
    005E5951  mov     eax, dword ptr [ebp-10]
    005E5954  lea     edx, dword ptr [ebp-C]
    005E5957  call    004096E8
    005E595C  cmp     dword ptr [ebp-C], 0             ;  判断用户名称是否为空
    005E5960  jnz     short 005E5984
    005E5962  push    0
    005E5964  push    005E5BA8                         ;  请填写用户名称!
    005E5969  call    <jmp.&PunUnitLib.ShowMess>
    005E596E  mov     eax, dword ptr [ebp-4]
    005E5971  mov     eax, dword ptr [eax+304]
    005E5977  mov     edx, dword ptr [eax]
    005E5979  call    dword ptr [edx+C0]
    005E597F  jmp     005E5B35
    005E5984  lea     edx, dword ptr [ebp-18]
    005E5987  mov     eax, dword ptr [ebp-4]
    005E598A  mov     eax, dword ptr [eax+2FC]
    005E5990  call    0044E9E8
    005E5995  mov     eax, dword ptr [ebp-18]
    005E5998  lea     edx, dword ptr [ebp-14]
    005E599B  call    004096E8
    005E59A0  cmp     dword ptr [ebp-14], 0            ;  授权号是否为空
    005E59A4  jnz     short 005E59C8
    005E59A6  push    0
    005E59A8  push    005E5BBC                         ;  授权号不能为空,请填写授权号!
    005E59AD  call    <jmp.&PunUnitLib.ShowMess>
    005E59B2  mov     eax, dword ptr [ebp-4]
    005E59B5  mov     eax, dword ptr [eax+2FC]
    005E59BB  mov     edx, dword ptr [eax]
    005E59BD  call    dword ptr [edx+C0]
    005E59C3  jmp     005E5B35
    005E59C8  mov     eax, dword ptr [6505F0]
    005E59CD  mov     eax, dword ptr [eax]
    005E59CF  call    00404F3C
    005E59D4  push    eax                              ;  固定码  C26D-Q638
    005E59D5  lea     edx, dword ptr [ebp-1C]
    005E59D8  mov     eax, dword ptr [ebp-4]
    005E59DB  mov     eax, dword ptr [eax+2F4]
    005E59E1  call    0044E9E8
    005E59E6  mov     eax, dword ptr [ebp-1C]          ;  机器码放到EAX中
    005E59E9  call    00404F3C
    005E59EE  push    eax
    005E59EF  call    <jmp.&PunUnitLib.GetRegPass>     ;  算法CALL





    ------------------------------------------------------------------------------------------------------------------------------------------------------
    关键算法CALL:
    00829024 >push    ebp
    00829025  mov     ebp, esp
    00829027  mov     ecx, 6
    0082902C  push    0
    0082902E  push    0
    00829030  dec     ecx
    00829031  jnz     short 0082902C
    00829033  push    ebx
    00829034  push    esi
    00829035  xor     eax, eax
    00829037  push    ebp
    00829038  push    008291F2
    0082903D  push    dword ptr fs:[eax]
    00829040  mov     dword ptr fs:[eax], esp
    00829043  lea     eax, dword ptr [ebp-14]
    00829046  call    007B45B0
    0082904B  lea     eax, dword ptr [ebp-10]
    0082904E  mov     edx, dword ptr [ebp+8]
    00829051  call    007B47A0
    00829056  mov     eax, dword ptr [ebp-10]
    00829059  call    007B4868                         ; 去机器码的长度
    0082905E  mov     esi, eax
    00829060  test    esi, esi
    00829062  jle     short 0082908A
    00829064  mov     ebx, 1
    00829069  lea     ecx, dword ptr [ebp-18]
    0082906C  mov     eax, dword ptr [ebp-10]
    0082906F  movzx   eax, byte ptr [eax+ebx-1]        ; 依次取字符的ASCII码值
    00829074  xor     edx, edx                         ; 清零EDX
    00829076  call    007B9674
    0082907B  mov     edx, dword ptr [ebp-18]
    0082907E  lea     eax, dword ptr [ebp-4]
    00829081  call    007B4870
    00829086  inc     ebx
    00829087  dec     esi
    00829088  jnz     short 00829069
    0082908A  mov     eax, dword ptr [ebp-4]           ; 连接所有字符的ASCII码值放到EAX中去
    0082908D  call    007B4868
    00829092  mov     esi, eax
    00829094  test    esi, esi
    00829096  jle     short 008290C4
    00829098  mov     ebx, 1
    0082909D  mov     eax, dword ptr [ebp-4]
    008290A0  call    007B4868                         ; 取EAX中数值的长度
    008290A5  sub     eax, ebx
    008290A7  mov     edx, dword ptr [ebp-4]
    008290AA  mov     dl, byte ptr [edx+eax]           ; 从后往前取字符放到DL中
    008290AD  lea     eax, dword ptr [ebp-1C]
    008290B0  call    007B4790
    008290B5  mov     edx, dword ptr [ebp-1C]
    008290B8  lea     eax, dword ptr [ebp-8]
    008290BB  call    007B4870
    008290C0  inc     ebx
    008290C1  dec     esi
    008290C2  jnz     short 0082909D
    008290C4  lea     eax, dword ptr [ebp-4]
    008290C7  push    eax
    008290C8  mov     ecx, 4
    008290CD  mov     edx, 1
    008290D2  mov     eax, dword ptr [ebp-8]           ; 把所有字符连接起来放到EAX中去
    008290D5  call    007B4AC0
    008290DA  lea     eax, dword ptr [ebp-8]
    008290DD  push    eax
    008290DE  mov     ecx, 4
    008290E3  mov     edx, 5
    008290E8  mov     eax, dword ptr [ebp-8]
    008290EB  call    007B4AC0
    008290F0  mov     eax, dword ptr [ebp-4]           ; 取前四位,放到EAX中
    008290F3  call    007B4868
    008290F8  cmp     eax, 4                           ; 和4进行比较 相等跳
    008290FB  jge     short 0082912C
    008290FD  mov     eax, dword ptr [ebp-4]
    00829100  call    007B4868
    00829105  mov     ebx, eax
    00829107  cmp     ebx, 3
    0082910A  jg      short 0082912C
    0082910C  lea     ecx, dword ptr [ebp-20]
    0082910F  mov     eax, ebx
    00829111  shl     eax, 2
    00829114  xor     edx, edx
    00829116  call    007B9674
    0082911B  mov     edx, dword ptr [ebp-20]
    0082911E  lea     eax, dword ptr [ebp-4]
    00829121  call    007B4870
    00829126  inc     ebx
    00829127  cmp     ebx, 4
    0082912A  jnz     short 0082910C
    0082912C  mov     eax, dword ptr [ebp-8]           ; 取次四位 放到EAX中
    0082912F  call    007B4868
    00829134  cmp     eax, 4
    00829137  jge     short 00829168
    00829139  mov     eax, dword ptr [ebp-8]
    0082913C  call    007B4868
    00829141  mov     ebx, eax
    00829143  cmp     ebx, 3
    00829146  jg      short 00829168
    00829148  lea     ecx, dword ptr [ebp-24]
    0082914B  mov     eax, ebx
    0082914D  shl     eax, 2
    00829150  xor     edx, edx
    00829152  call    007B9674
    00829157  mov     edx, dword ptr [ebp-24]
    0082915A  lea     eax, dword ptr [ebp-8]
    0082915D  call    007B4870
    00829162  inc     ebx
    00829163  cmp     ebx, 4
    00829166  jnz     short 00829148
    00829168  lea     eax, dword ptr [ebp-28]
    0082916B  mov     edx, dword ptr [ebp+C]           ; 把固定码C26D-Q638放到EDX中
    0082916E  call    007B47A0
    00829173  mov     eax, dword ptr [ebp-28]
    00829176  lea     edx, dword ptr [ebp-C]
    00829179  call    007B955C
    0082917E  lea     eax, dword ptr [ebp-2C]
    00829181  push    eax
    00829182  mov     ecx, 4
    00829187  mov     edx, 1
    0082918C  mov     eax, dword ptr [ebp-C]
    0082918F  call    007B4AC0
    00829194  push    dword ptr [ebp-2C]               ; 取C26D-Q638前四位字符
    00829197  push    0082920C
    0082919C  push    dword ptr [ebp-4]                ; 取前面得到的连接字符的前四位
    0082919F  lea     eax, dword ptr [ebp-30]
    008291A2  push    eax
    008291A3  mov     ecx, 5
    008291A8  mov     edx, 5
    008291AD  mov     eax, dword ptr [ebp-C]
    008291B0  call    007B4AC0
    008291B5  push    dword ptr [ebp-30]               ; 取C26D-Q638中的-Q638
    008291B8  push    0082920C
    008291BD  push    dword ptr [ebp-8]                ; 取前面得到的连接字符的次四位
    008291C0  lea     eax, dword ptr [ebp-14]
    008291C3  mov     edx, 6
    008291C8  call    007B4928                         ; 把连接起来的值放到EBP-14中去
    008291CD  mov     eax, dword ptr [ebp-14]          ; 得到的注册码放到EAX中
    008291D0  call    007B4A60
    008291D5  mov     ebx, eax
    008291D7  xor     eax, eax
    008291D9  pop     edx
    008291DA  pop     ecx
    008291DB  pop     ecx
    008291DC  mov     dword ptr fs:[eax], edx
    008291DF  push    008291F9
    008291E4  lea     eax, dword ptr [ebp-30]
    008291E7  mov     edx, 0C
    008291EC  call    007B45D4


    ------------------------------------------------------------------------------------------------------------------------------------------------------
    ------------------------------------------------------------------------
    【算法总结】:
    1).序列号取按位取每个字符16进制ASCII码,排列起来.
    2).然后进行颠倒顺序,。
    3).取前8个字符,组成两个字符串前四个字符a,后四个字符b
    4).然后和C26D-Q638进行有序连接   C26D-a-Q638-b
    5).最后输出
    ------------------------------------------------------------------------
    【注册机源码(c语言)】:

    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    extern char *hex10to16(int n);
    extern change1(int m);
    void main(void)
    {
            int i=0,j=0,k=0,g=0,h=0,l=0;
            char *p,a[10]={0},*p2,*p3,c;
            char sernumber[10]={0};
            printf("请输入机器码:");
            scanf("%s",sernumber);
            int length,length2;
            length=strlen(sernumber);
            for(i=0;i<8;i++)
            {
                    p=hex10to16((int)sernumber[length-1]);
                    a=*p;
                    a[i+1]=*(p+1);
                    i++;
                    length--;
            }
            printf("注册码:C26D-");
            for(i=0;i<8;i++)
            {
                    if((int)a>58)
                    {
                            printf("%c",a);       
                    }
                    else
                    {
                            printf("%d",a);       
                    }
                    h++;
                    if(h==4)
                    {
                            printf("-Q638-");
                    }
            }
            printf("\n");
            printf("手动输入得到的注册码,直接关掉黑色界面\n");
            scanf("%s",sernumber);        //输入用户名
    }


    char *hex10to16(int n)
    {
           
            char s[10]={0};
            char v,*p;
            int div;
            int rev;
            int i=0;
            div = n;
            if(div<16)
                    s[0] = div;
            else
            {       
                    do{
                            rev = div%16;
                            s[1] = change1(rev);
                            div = div/16;
                    }
                    while(div >= 16);
                    s[0] = change1(div);
            }
            v=s[0];
            s[0]=s[1];
            s[1]=v;
            p=&s[0];
            return (p);
    }
    change1(int m)
    {
            char s;
            switch(m)
            {
            case 10: s = 'A';
                    break;
            case 11: s = 'B';
                    break;
            case 12: s = 'C';
                    break;
            case 13: s = 'D';
                    break;
            case 14: s = 'E';
                    break;
            case 15: s = 'F';
                    break;
            default: s = m;
                    break;
            }
            return(s);
    }

    ----------------------------------------------------------------------

    【版权声明】本文原创于PYG论坛,转载请注明作者并保持文章的完整, 谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2024-7-18 13:59
  • 签到天数: 65 天

    [LV.6]常住居民II

    发表于 2009-11-14 21:50:12 | 显示全部楼层
    高手啊。多谢,一直比较关注这个软件,,,
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-12-12 19:49:04 | 显示全部楼层
    算法对我来说太难了。
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-3-4 10:36
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2017-3-1 23:57:18 | 显示全部楼层
    谢谢楼主分享快乐
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表