网络断魂 发表于 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:
0069ABB8|.64:8920       mov   dword ptr fs:, esp
0069ABBB|.8D45 F4       lea   eax, dword ptr
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
0069ABD0|.8B08          mov   ecx, dword ptr
0069ABD2|.FF91 78010000 call    dword ptr
0069ABD8|.8B9E 1C030000 mov   ebx, dword ptr
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
0069AC02|.8B08          mov   ecx, dword ptr
0069AC04|.FF51 60       call    dword ptr
0069AC07|.8D45 E4       lea   eax, dword ptr
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          ;//送机器码第一段
0069AC18|.E8 BBA1D6FF   call    00404DD8
0069AC1D|.8B4D E4       mov   ecx, dword ptr           ;//送截取后的机器码
0069AC20|.8D45 E8       lea   eax, dword ptr
0069AC23|.BA A8AE6900   mov   edx, 0069AEA8
0069AC28|.E8 9F9FD6FF   call    00404BCC
0069AC2D|.8B45 E8       mov   eax, dword ptr
0069AC30|.E8 BBEFD6FF   call    00409BF0
0069AC35|.05 50080000   add   eax, 850                         ;//机器码值+850
0069AC3A|.8D3C40      lea   edi, dword ptr        ;//*3
0069AC3D|.8D55 F0       lea   edx, dword ptr
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
0069AC56|.8B08          mov   ecx, dword ptr
0069AC58|.FF51 60       call    dword ptr
0069AC5B|.8D45 DC       lea   eax, dword ptr
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          ;//送机器码第二段
0069AC6C|.E8 67A1D6FF   call    00404DD8
0069AC71|.8B4D DC       mov   ecx, dword ptr           ;//送截取后的值
0069AC74|.8D45 E0       lea   eax, dword ptr
0069AC77|.BA A8AE6900   mov   edx, 0069AEA8
0069AC7C|.E8 4B9FD6FF   call    00404BCC
0069AC81|.8B45 E0       mov   eax, dword ptr
0069AC84|.E8 67EFD6FF   call    00409BF0
0069AC89|.05 50080000   add   eax, 850                         ;//截取后的机器码+850
0069AC8E|.8D3C40      lea   edi, dword ptr        ;//*3
0069AC91|.8D55 EC       lea   edx, dword ptr
0069AC94|.8BC7          mov   eax, edi
0069AC96|.E8 B5EED6FF   call    00409B50                         ;//转换为十进制作为第三段注册码
0069AC9B|.8D55 D4       lea   edx, dword ptr
0069AC9E|.8B86 10030000 mov   eax, dword ptr
0069ACA4|.E8 E3A9DBFF   call    0045568C
0069ACA9|.8B45 D4       mov   eax, dword ptr           ;//送假码第一段
0069ACAC|.8D55 D8       lea   edx, dword ptr
0069ACAF|.E8 C0E9D6FF   call    00409674
0069ACB4|.8B45 D8       mov   eax, dword ptr           ;//送假码第一段
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
0069ACC6|.8B86 20030000 mov   eax, dword ptr
0069ACCC|.E8 BBA9DBFF   call    0045568C
0069ACD1|.8B45 CC       mov   eax, dword ptr
0069ACD4|.8D55 D0       lea   edx, dword ptr
0069ACD7|.E8 98E9D6FF   call    00409674
0069ACDC|.8B45 D0       mov   eax, dword ptr           ;//送假码第二段
0069ACDF|.8B55 F0       mov   edx, dword ptr           ;//送真码第二段
0069ACE2|.E8 DD9FD6FF   call    00404CC4                         ;//字符串比较(内存注册机第二段位置)
0069ACE7      75 26         jnz   short 0069AD0F                   ;//跳往注册码错误
0069ACE9|.8D55 C4       lea   edx, dword ptr
0069ACEC|.8B86 24030000 mov   eax, dword ptr
0069ACF2|.E8 95A9DBFF   call    0045568C
0069ACF7|.8B45 C4       mov   eax, dword ptr
0069ACFA|.8D55 C8       lea   edx, dword ptr
0069ACFD|.E8 72E9D6FF   call    00409674
0069AD02|.8B45 C8       mov   eax, dword ptr           ;//送假码第三段
0069AD05|.8B55 EC       mov   edx, dword ptr           ;//送真码第三段
0069AD08|.E8 B79FD6FF   call    00404CC4                         ;//字符串比较(内存注册机第三段位置)
0069AD0D|.74 52         je      short 0069AD61                   ;//不跳则死
0069AD0F|>33D2          xor   edx, edx
0069AD11|.8B86 10030000 mov   eax, dword ptr
0069AD17|.E8 A0A9DBFF   call    004556BC
0069AD1C|.33D2          xor   edx, edx
0069AD1E|.8B86 20030000 mov   eax, dword ptr
0069AD24|.E8 93A9DBFF   call    004556BC
0069AD29|.33D2          xor   edx, edx
0069AD2B|.8B86 24030000 mov   eax, dword ptr
0069AD31|.E8 86A9DBFF   call    004556BC
0069AD36|.8B86 10030000 mov   eax, dword ptr
0069AD3C|.8B10          mov   edx, dword ptr
0069AD3E|.FF92 C0000000 call    dword ptr
0069AD44|.6A 10         push    10
0069AD46|.B9 BCAE6900   mov   ecx, 0069AEBC
0069AD4B|.BA C8AE6900   mov   edx, 0069AEC8                  ;注册码不正确!请重新输入!
0069AD50|.A1 046C6F00   mov   eax, dword ptr
0069AD55|.8B00          mov   eax, dword ptr
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
0069AD6E|.E8 756EE0FF   call    004A1BE8
0069AD73|.83C4 F8       add   esp, -8
0069AD76|.DD1C24      fstp    qword ptr
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
0069AD88|.FF92 A0000000 call    dword ptr
0069AD8E|.8D55 C0       lea   edx, dword ptr
0069AD91|.8B86 08030000 mov   eax, dword ptr
0069AD97|.E8 F0A8DBFF   call    0045568C
0069AD9C|.8B45 C0       mov   eax, dword ptr
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
0069ADAF|.FF91 B0000000 call    dword ptr
0069ADB5|.8D55 BC       lea   edx, dword ptr
0069ADB8|.8B86 0C030000 mov   eax, dword ptr
0069ADBE|.E8 C9A8DBFF   call    0045568C
0069ADC3|.8B45 BC       mov   eax, dword ptr
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
0069ADD6|.FF91 B0000000 call    dword ptr
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
0069ADEF|.FF91 B0000000 call    dword ptr
0069ADF5|.8BC3          mov   eax, ebx
0069ADF7|.8B10          mov   edx, dword ptr
0069ADF9|.FF92 48020000 call    dword ptr
0069ADFF|.8BC3          mov   eax, ebx
0069AE01|.E8 0ABAE2FF   call    004C6810
0069AE06|.B2 01         mov   dl, 1
0069AE08|.8B86 54030000 mov   eax, dword ptr
0069AE0E|.E8 99A7DBFF   call    004555AC
0069AE13|.BA 3CAF6900   mov   edx, 0069AF3C                  ;您已经成功注册本软件,将可以永久使用本软件,谢谢您的支持。
0069AE18|.8B86 54030000 mov   eax, dword ptr
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:, edx
0069AE2B|.68 72AE6900   push    0069AE72
0069AE30|>8D45 BC       lea   eax, dword ptr
0069AE33|.BA 03000000   mov   edx, 3
0069AE38|.E8 9F9AD6FF   call    004048DC
0069AE3D|.8D45 C8       lea   eax, dword ptr
0069AE40|.E8 739AD6FF   call    004048B8
0069AE45|.8D45 CC       lea   eax, dword ptr
0069AE48|.E8 6B9AD6FF   call    004048B8
0069AE4D|.8D45 D0       lea   eax, dword ptr
0069AE50|.E8 639AD6FF   call    004048B8
0069AE55|.8D45 D4       lea   eax, dword ptr
0069AE58|.E8 5B9AD6FF   call    004048B8
0069AE5D|.8D45 D8       lea   eax, dword ptr
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);//输出第三段注册码
}


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

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

梦晰 发表于 2007-12-17 21:10:46

第一时间来做沙发.
作品越来越精彩啊.

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

[ 本帖最后由 梦晰 于 2007-12-17 21:12 编辑 ]

blitz 发表于 2007-12-17 22:22:17

好强.不过我侧重对注册机编写的学习..

:lol: 楼主注册机什么语言写的?..

blitz 发表于 2007-12-17 22:23:47

还有,我发现习惯上即使软件没加壳,破文作者都会加上PEID检测信息,也可表示出软件的编写类型..

网络断魂 发表于 2007-12-17 23:44:26

vc++(VS 2005)的

angelfish 发表于 2007-12-18 15:46:42

先顶……后收藏,嘿嘿/:018

GGLHY 发表于 2008-1-22 15:05:36

很详细!学习了!!谢谢分享!!!

dhap 发表于 2008-1-23 20:55:31

ddddddddddddddddddddddddddddddddddd

xuewuzhijing 发表于 2008-4-1 15:26:03

还是有些看不懂,努力中!谢谢分享!

lvcaolhx 发表于 2008-4-1 16:01:42

一个字:强
向楼主学习
页: [1] 2
查看完整版本: 信华仓管专家算法分析+注册机源码(适合新手学算法,极力推荐)