飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 8158|回复: 14

[原创] 信华仓管专家算法分析+注册机源码(适合新手学算法,极力推荐)

[复制链接]

该用户从未签到

发表于 2007-12-17 21:06:52 | 显示全部楼层 |阅读模式
【文章作者】: 网络断魂
【软件名称】: 信华仓管专家增强版
【下载地址】: http://www.xinwa.com/
【加壳方式】: 无壳
【保护方式】: 机器码+注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD
【操作平台】: winxp2
【作者声明】: 也不知道分析的对不对,大家别笑话偶

根据字符串提示找到关键处:

0069AB98  /.  55            push    ebp
0069AB99  |.  8BEC          mov     ebp, esp
0069AB9B  |.  B9 08000000   mov     ecx, 8
0069ABA0  |>  6A 00         /push    0
0069ABA2  |.  6A 00         |push    0
0069ABA4  |.  49            |dec     ecx
0069ABA5  |.^ 75 F9         \jnz     short 0069ABA0
0069ABA7  |.  51            push    ecx
0069ABA8  |.  53            push    ebx
0069ABA9  |.  56            push    esi
0069ABAA  |.  57            push    edi
0069ABAB  |.  8BF0          mov     esi, eax
0069ABAD  |.  33C0          xor     eax, eax
0069ABAF  |.  55            push    ebp
0069ABB0  |.  68 6BAE6900   push    0069AE6B
0069ABB5  |.  64:FF30       push    dword ptr fs:[eax]
0069ABB8  |.  64:8920       mov     dword ptr fs:[eax], esp
0069ABBB  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0069ABBE  |.  BA 84AE6900   mov     edx, 0069AE84                    ;  ASCII "L2007168"
0069ABC3  |.  E8 889DD6FF   call    00404950
0069ABC8  |.  B2 01         mov     dl, 1
0069ABCA  |.  8B86 1C030000 mov     eax, dword ptr [esi+31C]
0069ABD0  |.  8B08          mov     ecx, dword ptr [eax]
0069ABD2  |.  FF91 78010000 call    dword ptr [ecx+178]
0069ABD8  |.  8B9E 1C030000 mov     ebx, dword ptr [esi+31C]
0069ABDE  |.  8BC3          mov     eax, ebx
0069ABE0  |.  E8 2BBCE2FF   call    004C6810
0069ABE5  |.  8BC3          mov     eax, ebx
0069ABE7  |.  E8 18BCE2FF   call    004C6804
0069ABEC  |.  8BC3          mov     eax, ebx
0069ABEE  |.  E8 ADE0E2FF   call    004C8CA0
0069ABF3  |.  BA 98AE6900   mov     edx, 0069AE98                    ;  ASCII "CPUID"
0069ABF8  |.  8BC3          mov     eax, ebx
0069ABFA  |.  E8 11CDE2FF   call    004C7910
0069ABFF  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0069AC02  |.  8B08          mov     ecx, dword ptr [eax]
0069AC04  |.  FF51 60       call    dword ptr [ecx+60]
0069AC07  |.  8D45 E4       lea     eax, dword ptr [ebp-1C]
0069AC0A  |.  50            push    eax
0069AC0B  |.  B9 06000000   mov     ecx, 6                           ;  //取6位,
0069AC10  |.  BA 02000000   mov     edx, 2                           ;  //从第2位开始取
0069AC15  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  //送机器码第一段
0069AC18  |.  E8 BBA1D6FF   call    00404DD8
0069AC1D  |.  8B4D E4       mov     ecx, dword ptr [ebp-1C]          ;  //送截取后的机器码
0069AC20  |.  8D45 E8       lea     eax, dword ptr [ebp-18]
0069AC23  |.  BA A8AE6900   mov     edx, 0069AEA8
0069AC28  |.  E8 9F9FD6FF   call    00404BCC
0069AC2D  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
0069AC30  |.  E8 BBEFD6FF   call    00409BF0
0069AC35  |.  05 50080000   add     eax, 850                         ;  //机器码值+850
0069AC3A  |.  8D3C40        lea     edi, dword ptr [eax+eax*2]       ;  //*3
0069AC3D  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
0069AC40  |.  8BC7          mov     eax, edi
0069AC42  |.  E8 09EFD6FF   call    00409B50                         ;  //转换为十进制(作为第二段注册码)
0069AC47  |.  BA B4AE6900   mov     edx, 0069AEB4                    ;  ASCII "HDID"
0069AC4C  |.  8BC3          mov     eax, ebx
0069AC4E  |.  E8 BDCCE2FF   call    004C7910
0069AC53  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
0069AC56  |.  8B08          mov     ecx, dword ptr [eax]
0069AC58  |.  FF51 60       call    dword ptr [ecx+60]
0069AC5B  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
0069AC5E  |.  50            push    eax
0069AC5F  |.  B9 06000000   mov     ecx, 6                           ;  //取6位,
0069AC64  |.  BA 02000000   mov     edx, 2                           ;  //从第2位开始取
0069AC69  |.  8B45 F8       mov     eax, dword ptr [ebp-8]           ;  //送机器码第二段
0069AC6C  |.  E8 67A1D6FF   call    00404DD8
0069AC71  |.  8B4D DC       mov     ecx, dword ptr [ebp-24]          ;  //送截取后的值
0069AC74  |.  8D45 E0       lea     eax, dword ptr [ebp-20]
0069AC77  |.  BA A8AE6900   mov     edx, 0069AEA8
0069AC7C  |.  E8 4B9FD6FF   call    00404BCC
0069AC81  |.  8B45 E0       mov     eax, dword ptr [ebp-20]
0069AC84  |.  E8 67EFD6FF   call    00409BF0
0069AC89  |.  05 50080000   add     eax, 850                         ;  //截取后的机器码+850
0069AC8E  |.  8D3C40        lea     edi, dword ptr [eax+eax*2]       ;  //*3
0069AC91  |.  8D55 EC       lea     edx, dword ptr [ebp-14]
0069AC94  |.  8BC7          mov     eax, edi
0069AC96  |.  E8 B5EED6FF   call    00409B50                         ;  //转换为十进制作为第三段注册码
0069AC9B  |.  8D55 D4       lea     edx, dword ptr [ebp-2C]
0069AC9E  |.  8B86 10030000 mov     eax, dword ptr [esi+310]
0069ACA4  |.  E8 E3A9DBFF   call    0045568C
0069ACA9  |.  8B45 D4       mov     eax, dword ptr [ebp-2C]          ;  //送假码第一段
0069ACAC  |.  8D55 D8       lea     edx, dword ptr [ebp-28]
0069ACAF  |.  E8 C0E9D6FF   call    00409674
0069ACB4  |.  8B45 D8       mov     eax, dword ptr [ebp-28]          ;  //送假码第一段
0069ACB7  |.  BA 84AE6900   mov     edx, 0069AE84                    ;  ASCII "L2007168"
0069ACBC  |.  E8 03A0D6FF   call    00404CC4                         ;  //字符串比较(内存注册机第一段位置)
0069ACC1      75 4C         jnz     short 0069AD0F                   ;  //跳往注册码错误
0069ACC3  |.  8D55 CC       lea     edx, dword ptr [ebp-34]
0069ACC6  |.  8B86 20030000 mov     eax, dword ptr [esi+320]
0069ACCC  |.  E8 BBA9DBFF   call    0045568C
0069ACD1  |.  8B45 CC       mov     eax, dword ptr [ebp-34]
0069ACD4  |.  8D55 D0       lea     edx, dword ptr [ebp-30]
0069ACD7  |.  E8 98E9D6FF   call    00409674
0069ACDC  |.  8B45 D0       mov     eax, dword ptr [ebp-30]          ;  //送假码第二段
0069ACDF  |.  8B55 F0       mov     edx, dword ptr [ebp-10]          ;  //送真码第二段
0069ACE2  |.  E8 DD9FD6FF   call    00404CC4                         ;  //字符串比较(内存注册机第二段位置)
0069ACE7      75 26         jnz     short 0069AD0F                   ;  //跳往注册码错误
0069ACE9  |.  8D55 C4       lea     edx, dword ptr [ebp-3C]
0069ACEC  |.  8B86 24030000 mov     eax, dword ptr [esi+324]
0069ACF2  |.  E8 95A9DBFF   call    0045568C
0069ACF7  |.  8B45 C4       mov     eax, dword ptr [ebp-3C]
0069ACFA  |.  8D55 C8       lea     edx, dword ptr [ebp-38]
0069ACFD  |.  E8 72E9D6FF   call    00409674
0069AD02  |.  8B45 C8       mov     eax, dword ptr [ebp-38]          ;  //送假码第三段
0069AD05  |.  8B55 EC       mov     edx, dword ptr [ebp-14]          ;  //送真码第三段
0069AD08  |.  E8 B79FD6FF   call    00404CC4                         ;  //字符串比较(内存注册机第三段位置)
0069AD0D  |.  74 52         je      short 0069AD61                   ;  //不跳则死
0069AD0F  |>  33D2          xor     edx, edx
0069AD11  |.  8B86 10030000 mov     eax, dword ptr [esi+310]
0069AD17  |.  E8 A0A9DBFF   call    004556BC
0069AD1C  |.  33D2          xor     edx, edx
0069AD1E  |.  8B86 20030000 mov     eax, dword ptr [esi+320]
0069AD24  |.  E8 93A9DBFF   call    004556BC
0069AD29  |.  33D2          xor     edx, edx
0069AD2B  |.  8B86 24030000 mov     eax, dword ptr [esi+324]
0069AD31  |.  E8 86A9DBFF   call    004556BC
0069AD36  |.  8B86 10030000 mov     eax, dword ptr [esi+310]
0069AD3C  |.  8B10          mov     edx, dword ptr [eax]
0069AD3E  |.  FF92 C0000000 call    dword ptr [edx+C0]
0069AD44  |.  6A 10         push    10
0069AD46  |.  B9 BCAE6900   mov     ecx, 0069AEBC
0069AD4B  |.  BA C8AE6900   mov     edx, 0069AEC8                    ;  注册码不正确!请重新输入!
0069AD50  |.  A1 046C6F00   mov     eax, dword ptr [6F6C04]
0069AD55  |.  8B00          mov     eax, dword ptr [eax]
0069AD57  |.  E8 A4C4DDFF   call    00477200
0069AD5C  |.  E9 C2000000   jmp     0069AE23
0069AD61  |>  8BC3          mov     eax, ebx
0069AD63  |.  E8 44E3E2FF   call    004C90AC
0069AD68  |.  8B86 58030000 mov     eax, dword ptr [esi+358]
0069AD6E  |.  E8 756EE0FF   call    004A1BE8
0069AD73  |.  83C4 F8       add     esp, -8
0069AD76  |.  DD1C24        fstp    qword ptr [esp]
0069AD79  |.  9B            wait
0069AD7A  |.  BA ECAE6900   mov     edx, 0069AEEC                    ;  et
0069AD7F  |.  8BC3          mov     eax, ebx
0069AD81  |.  E8 8ACBE2FF   call    004C7910
0069AD86  |.  8B10          mov     edx, dword ptr [eax]
0069AD88  |.  FF92 A0000000 call    dword ptr [edx+A0]
0069AD8E  |.  8D55 C0       lea     edx, dword ptr [ebp-40]
0069AD91  |.  8B86 08030000 mov     eax, dword ptr [esi+308]
0069AD97  |.  E8 F0A8DBFF   call    0045568C
0069AD9C  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
0069AD9F  |.  50            push    eax
0069ADA0  |.  BA F8AE6900   mov     edx, 0069AEF8                    ;  用户名称
0069ADA5  |.  8BC3          mov     eax, ebx
0069ADA7  |.  E8 64CBE2FF   call    004C7910
0069ADAC  |.  5A            pop     edx
0069ADAD  |.  8B08          mov     ecx, dword ptr [eax]
0069ADAF  |.  FF91 B0000000 call    dword ptr [ecx+B0]
0069ADB5  |.  8D55 BC       lea     edx, dword ptr [ebp-44]
0069ADB8  |.  8B86 0C030000 mov     eax, dword ptr [esi+30C]
0069ADBE  |.  E8 C9A8DBFF   call    0045568C
0069ADC3  |.  8B45 BC       mov     eax, dword ptr [ebp-44]
0069ADC6  |.  50            push    eax
0069ADC7  |.  BA 0CAF6900   mov     edx, 0069AF0C                    ;  公司名称
0069ADCC  |.  8BC3          mov     eax, ebx
0069ADCE  |.  E8 3DCBE2FF   call    004C7910
0069ADD3  |.  5A            pop     edx
0069ADD4  |.  8B08          mov     ecx, dword ptr [eax]
0069ADD6  |.  FF91 B0000000 call    dword ptr [ecx+B0]
0069ADDC  |.  BA 20AF6900   mov     edx, 0069AF20                    ;  flat
0069ADE1  |.  8BC3          mov     eax, ebx
0069ADE3  |.  E8 28CBE2FF   call    004C7910
0069ADE8  |.  BA 30AF6900   mov     edx, 0069AF30                    ;  是
0069ADED  |.  8B08          mov     ecx, dword ptr [eax]
0069ADEF  |.  FF91 B0000000 call    dword ptr [ecx+B0]
0069ADF5  |.  8BC3          mov     eax, ebx
0069ADF7  |.  8B10          mov     edx, dword ptr [eax]
0069ADF9  |.  FF92 48020000 call    dword ptr [edx+248]
0069ADFF  |.  8BC3          mov     eax, ebx
0069AE01  |.  E8 0ABAE2FF   call    004C6810
0069AE06  |.  B2 01         mov     dl, 1
0069AE08  |.  8B86 54030000 mov     eax, dword ptr [esi+354]
0069AE0E  |.  E8 99A7DBFF   call    004555AC
0069AE13  |.  BA 3CAF6900   mov     edx, 0069AF3C                    ;  您已经成功注册本软件,将可以永久使用本软件,谢谢您的支持。
0069AE18  |.  8B86 54030000 mov     eax, dword ptr [esi+354]
0069AE1E  |.  E8 99A8DBFF   call    004556BC
0069AE23  |>  33C0          xor     eax, eax
0069AE25  |.  5A            pop     edx
0069AE26  |.  59            pop     ecx
0069AE27  |.  59            pop     ecx
0069AE28  |.  64:8910       mov     dword ptr fs:[eax], edx
0069AE2B  |.  68 72AE6900   push    0069AE72
0069AE30  |>  8D45 BC       lea     eax, dword ptr [ebp-44]
0069AE33  |.  BA 03000000   mov     edx, 3
0069AE38  |.  E8 9F9AD6FF   call    004048DC
0069AE3D  |.  8D45 C8       lea     eax, dword ptr [ebp-38]
0069AE40  |.  E8 739AD6FF   call    004048B8
0069AE45  |.  8D45 CC       lea     eax, dword ptr [ebp-34]
0069AE48  |.  E8 6B9AD6FF   call    004048B8
0069AE4D  |.  8D45 D0       lea     eax, dword ptr [ebp-30]
0069AE50  |.  E8 639AD6FF   call    004048B8
0069AE55  |.  8D45 D4       lea     eax, dword ptr [ebp-2C]
0069AE58  |.  E8 5B9AD6FF   call    004048B8
0069AE5D  |.  8D45 D8       lea     eax, dword ptr [ebp-28]
0069AE60  |.  BA 0A000000   mov     edx, 0A
0069AE65  |.  E8 729AD6FF   call    004048DC
0069AE6A  \.  C3            retn
0069AE6B   .^ E9 B093D6FF   jmp     00404220
0069AE70   .^ EB BE         jmp     short 0069AE30
0069AE72   .  5F            pop     edi
0069AE73   .  5E            pop     esi
0069AE74   .  5B            pop     ebx
0069AE75   .  8BE5          mov     esp, ebp
0069AE77   .  5D            pop     ebp
0069AE78   .  C3            retn


算法总结:
1、第一段注册码为固定值:L2007168
2、取第一段机器码(十六进制字符串)中的2-7位,+850H,再乘以3,转换为十进制作为第二段注册码!
3、取第二段机器码(十六进制字符串)中的2-7位,+850H,再乘以3,转换为十进制作为第三段注册码!

算法注册机源码:

void C华信仓管专家注册机Dlg::OnBnClickedOk()
{
        // TODO: 在此添加控件通知处理程序代码
        CString jqm1;
        CString jqm2;
        CString zcm1;
        CString zcm2;
        GetDlgItemText(IDC_EDIT_JQM1,jqm1);  //获取输入的第一段机器码
        GetDlgItemText(IDC_EDIT_JQM2,jqm2);  //获取输入的第二段机器码
        jqm1 = jqm1.Left(7);                 //取第一段机器码的左7位
        jqm1 = jqm1.Right(6);                //再取右边6位
        jqm2 = jqm2.Left(7);                 //取第二段机器码的左7位,
        jqm2 = jqm2.Right(6);                //再取右边6位
        long zcm1_d = (strtol(jqm1,NULL,16) + 2128) * 3;   //十六进制字符串转换成整数+2128,再乘3
        long zcm2_d = (strtol(jqm2,NULL,16) + 2128) * 3;   //十六进制字符串转换成整数+2128,再乘3
        zcm1.Format("%d",zcm1_d);            //格式化输出
        zcm2.Format("%d",zcm2_d);            //格式化输出
        SetDlgItemText(IDC_EDIT_ZCM1,"L2007168");  //输出第一段注册码,固定值
        SetDlgItemText(IDC_EDIT_ZCM2,zcm1);  //输出第二段注册码
        SetDlgItemText(IDC_EDIT_ZCM3,zcm2);  //输出第三段注册码
}
注册机.jpeg (28.04 KB, 下载次数: 37)

为图省事,注册机中我没有加入非法字符的较验,各位自己加进去哈!

[ 本帖最后由 网络断魂 于 2007-12-17 21:08 编辑 ]

注册机.jpeg

28.04 KB, 下载次数: 25, 下载积分: 飘云币 -2 枚

PYG19周年生日快乐!

该用户从未签到

发表于 2007-12-17 21:10:46 | 显示全部楼层
第一时间来做沙发.
作品越来越精彩啊.

真不知道啥时候我也发一个我现在破的这个东西的破文,继续努力了.

[ 本帖最后由 梦晰 于 2007-12-17 21:12 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2007-12-17 22:22:17 | 显示全部楼层
好强.不过我侧重对注册机编写的学习..

:lol: 楼主注册机什么语言写的?..
PYG19周年生日快乐!

该用户从未签到

发表于 2007-12-17 22:23:47 | 显示全部楼层
还有,我发现习惯上即使软件没加壳,破文作者都会加上PEID检测信息,也可表示出软件的编写类型..
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-12-17 23:44:26 | 显示全部楼层
vc++(VS 2005)的
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2025-1-11 19:28
  • 签到天数: 983 天

    [LV.10]以坛为家III

    发表于 2007-12-18 15:46:42 | 显示全部楼层
    先顶……后收藏,嘿嘿/:018
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2008-1-22 15:05:36 | 显示全部楼层
    很详细!学习了!!谢谢分享!!!
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2019-3-31 02:09
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-1-23 20:55:31 | 显示全部楼层
    ddddddddddddddddddddddddddddddddddd
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-4-1 15:26:03 | 显示全部楼层
    还是有些看不懂,努力中!谢谢分享!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-13 13:43
  • 签到天数: 1992 天

    [LV.Master]伴坛终老

    发表于 2008-4-1 16:01:42 | 显示全部楼层
    一个字:强
    向楼主学习
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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