信华仓管专家算法分析+注册机源码(适合新手学算法,极力推荐)
【文章作者】: 网络断魂【软件名称】: 信华仓管专家增强版
【下载地址】: 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:12 编辑 ] 好强.不过我侧重对注册机编写的学习..
:lol: 楼主注册机什么语言写的?.. 还有,我发现习惯上即使软件没加壳,破文作者都会加上PEID检测信息,也可表示出软件的编写类型.. vc++(VS 2005)的 先顶……后收藏,嘿嘿/:018 很详细!学习了!!谢谢分享!!! ddddddddddddddddddddddddddddddddddd 还是有些看不懂,努力中!谢谢分享! 一个字:强
向楼主学习
页:
[1]
2