【破文标题】佳宜仓库算法分析及注册机编写
【破文作者】shine
【破解平台】winxpsp3
【破解工具】PEiD0.94、TheOD
【作者邮箱】kuailenanhai-1@163.com
【软件名称】佳宜仓库管理软件V3.48 (企业版)
【软件大小】4.11M
【原版下载】http://www3.skycn.com/soft/18980.html
【软件简介】佳宜仓库管理软件参考了各类仓库管理软件精华,溶入了各自
的优点并采纳众多用户的宝 贵意见,真正地从用户的需要出发,为客户需要而设计。本软件适用于中小型企业、商场、生产厂等物资供销、商品流通部门进行物资(商品)的采购、销售、库存的管理。主要功能包括进采购、采购退货、销售、销售退货、物料领用、领料退回、库存盘点、仓库调拨、借入、借出、借入还出、借出还入,供方客户资料管理,供方供货汇总、明细报表,客户供货汇总、明细报表,部门领用汇总、明细报表、仓库汇总、明细报表。销售毛利汇总明细报表,销售年报表等多种报表,使公司业务情况一目了然。本系统采用安全稳定的数据库管理系统设计而成,介面友好,所见即所得,操作简便,多级密码设置及备份功能,数据安全可靠,全真模拟显示功能,经营业务管理成熟,汇集了许多优秀企业的成功管理经验。
1.PEID-----Borland Delphi 6.0 - 7.0
2.OD载入,可以用查找字符串,F12堆栈调用,查找按钮事件到达关键处。
=========================================================================================
005EE780 > A1 A4C66800 mov eax, dword ptr ds:[68C6A4]
005EE785 . 8B00 mov eax, dword ptr ds:[eax] ; eax=CA5D-36Q8
005EE787 . E8 4468E1FF call DepotMan.00404FD0
005EE78C . 50 push eax
005EE78D . 8D55 E4 lea edx, dword ptr ss:[ebp-1C]
005EE790 . 8B45 FC mov eax, dword ptr ss:[ebp-4]
005EE793 . 8B80 F4020000 mov eax, dword ptr ds:[eax+2F4]
005EE799 . E8 FE07E6FF call DepotMan.0044EF9C ; 取机器码
005EE79E . 8B45 E4 mov eax, dword ptr ss:[ebp-1C] ; 机器码给eax
005EE7A1 . E8 2A68E1FF call DepotMan.00404FD0
005EE7A6 . 50 push eax
005EE7A7 . E8 640AFFFF call <jmp.&PunUnitLib.GetRegPass> ; 算法call,F7进
005EE7AC . 8BD0 mov edx, eax
005EE7AE . 8D45 F8 lea eax, dword ptr ss:[ebp-8]
005EE7B1 . E8 5A65E1FF call DepotMan.00404D10
005EE7B6 . 8D55 DC lea edx, dword ptr ss:[ebp-24]
005EE7B9 . 8B45 FC mov eax, dword ptr ss:[ebp-4]
005EE7BC . 8B80 FC020000 mov eax, dword ptr ds:[eax+2FC]
005EE7C2 . E8 D507E6FF call DepotMan.0044EF9C
005EE7C7 . 8B45 DC mov eax, dword ptr ss:[ebp-24]
005EE7CA . 8D55 E0 lea edx, dword ptr ss:[ebp-20]
005EE7CD . E8 4EAFE1FF call DepotMan.00409720
005EE7D2 . 8B45 E0 mov eax, dword ptr ss:[ebp-20]
005EE7D5 . 8B55 F8 mov edx, dword ptr ss:[ebp-8]
005EE7D8 . E8 3F67E1FF call DepotMan.00404F1C
005EE7DD . 0F85 FE000000 jnz DepotMan.005EE8E1 ; 关键跳
=========================================================================================
F7进005EE7A7处call来到下面
=========================================================================================
00889046 E8 65B5F8FF call PunUnitL.008145B0
0088904B 8D45 F0 lea eax, dword ptr ss:[ebp-10]
0088904E 8B55 08 mov edx, dword ptr ss:[ebp+8] ; 机器码给edx
00889051 E8 4AB7F8FF call PunUnitL.008147A0 ; edx清零
00889056 8B45 F0 mov eax, dword ptr ss:[ebp-10] ; 机器码给eax
00889059 E8 0AB8F8FF call PunUnitL.00814868 ; 计算长度放eax=E
0088905E 8BF0 mov esi, eax ; esi=E
00889060 85F6 test esi, esi
00889062 7E 26 jle short PunUnitL.0088908A
00889064 BB 01000000 mov ebx, 1 ; EBX=1
00889069 8D4D E8 lea ecx, dword ptr ss:[ebp-18]
0088906C 8B45 F0 mov eax, dword ptr ss:[ebp-10] ; EAX是机器码
0088906F 0FB64418 FF movzx eax, byte ptr ds:[eax+ebx-1] ; 逐位取ascii值给eax
00889074 33D2 xor edx, edx ; edx清零
00889076 E8 F905F9FF call PunUnitL.00819674 ; ecx清零
0088907B 8B55 E8 mov edx, dword ptr ss:[ebp-18] ; ascii值给edx
0088907E 8D45 FC lea eax, dword ptr ss:[ebp-4]
00889081 E8 EAB7F8FF call PunUnitL.00814870
00889086 43 inc ebx
00889087 4E dec esi
00889088 ^ 75 DF jnz short PunUnitL.00889069
0088908A 8B45 FC mov eax, dword ptr ss:[ebp-4] ; ascii值排列给eax
0088908D E8 D6B7F8FF call PunUnitL.00814868 ; 1C是ascii长度
00889092 8BF0 mov esi, eax
00889094 85F6 test esi, esi
00889096 7E 2C jle short PunUnitL.008890C4
00889098 BB 01000000 mov ebx, 1 ; ebx=1
0088909D 8B45 FC mov eax, dword ptr ss:[ebp-4] ; ascii值排列给eax
008890A0 E8 C3B7F8FF call PunUnitL.00814868
008890A5 2BC3 sub eax, ebx ; 1c-1,EBX玄幻一次加一
008890A7 8B55 FC mov edx, dword ptr ss:[ebp-4] ; 取前两个47给edx
008890AA 8A1402 mov dl, byte ptr ds:[edx+eax] ; 取后一位的7的ascii37给dl
008890AD 8D45 E4 lea eax, dword ptr ss:[ebp-1C]
008890B0 E8 DBB6F8FF call PunUnitL.00814790
008890B5 8B55 E4 mov edx, dword ptr ss:[ebp-1C]
008890B8 8D45 F8 lea eax, dword ptr ss:[ebp-8]
008890BB E8 B0B7F8FF call PunUnitL.00814870
008890C0 43 inc ebx
008890C1 4E dec esi
008890C2 ^ 75 D9 jnz short PunUnitL.0088909D
008890C4 8D45 FC lea eax, dword ptr ss:[ebp-4]
008890C7 50 push eax
008890C8 B9 04000000 mov ecx, 4 ; ECX=4
008890CD BA 01000000 mov edx, 1 ; EDX=1
008890D2 8B45 F8 mov eax, dword ptr ss:[ebp-8] ; 倒序后给eax
008890D5 E8 E6B9F8FF call PunUnitL.00814AC0 ; ecx=0
008890DA 8D45 F8 lea eax, dword ptr ss:[ebp-8]
008890DD 50 push eax
008890DE B9 04000000 mov ecx, 4 ; ECX=4
008890E3 BA 05000000 mov edx, 5 ; edx=5
008890E8 8B45 F8 mov eax, dword ptr ss:[ebp-8] ; 倒序后给eax
008890EB E8 D0B9F8FF call PunUnitL.00814AC0
008890F0 8B45 FC mov eax, dword ptr ss:[ebp-4] ; 取前四位7475
008890F3 E8 70B7F8FF call PunUnitL.00814868 ; 计算位数给eax
008890F8 83F8 04 cmp eax, 4
008890FB 7D 2F jge short PunUnitL.0088912C ; 大于等于四位就跳
008890FD 8B45 FC mov eax, dword ptr ss:[ebp-4]
00889100 E8 63B7F8FF call PunUnitL.00814868
00889105 8BD8 mov ebx, eax
00889107 83FB 03 cmp ebx, 3
0088910A 7F 20 jg short PunUnitL.0088912C
0088910C 8D4D E0 lea ecx, dword ptr ss:[ebp-20]
0088910F 8BC3 mov eax, ebx
00889111 C1E0 02 shl eax, 2
00889114 33D2 xor edx, edx
00889116 E8 5905F9FF call PunUnitL.00819674
0088911B 8B55 E0 mov edx, dword ptr ss:[ebp-20]
0088911E 8D45 FC lea eax, dword ptr ss:[ebp-4]
00889121 E8 4AB7F8FF call PunUnitL.00814870
00889126 43 inc ebx
00889127 83FB 04 cmp ebx, 4
0088912A ^ 75 E0 jnz short PunUnitL.0088910C
0088912C 8B45 F8 mov eax, dword ptr ss:[ebp-8] ; 再取四位E403
0088912F E8 34B7F8FF call PunUnitL.00814868
00889134 83F8 04 cmp eax, 4 ; 是不是大于四
00889137 7D 2F jge short PunUnitL.00889168 ; 大就跳
00889139 8B45 F8 mov eax, dword ptr ss:[ebp-8]
0088913C E8 27B7F8FF call PunUnitL.00814868
00889141 8BD8 mov ebx, eax
00889143 83FB 03 cmp ebx, 3
00889146 7F 20 jg short PunUnitL.00889168
00889148 8D4D DC lea ecx, dword ptr ss:[ebp-24]
0088914B 8BC3 mov eax, ebx
0088914D C1E0 02 shl eax, 2
00889150 33D2 xor edx, edx
00889152 E8 1D05F9FF call PunUnitL.00819674
00889157 8B55 DC mov edx, dword ptr ss:[ebp-24]
0088915A 8D45 F8 lea eax, dword ptr ss:[ebp-8]
0088915D E8 0EB7F8FF call PunUnitL.00814870
00889162 43 inc ebx
00889163 83FB 04 cmp ebx, 4
00889166 ^ 75 E0 jnz short PunUnitL.00889148
00889168 8D45 D8 lea eax, dword ptr ss:[ebp-28] ; 取固定码
0088916B 8B55 0C mov edx, dword ptr ss:[ebp+C] ; CA9D-36Q8
0088916E E8 2DB6F8FF call PunUnitL.008147A0 ; edx=0
00889173 8B45 D8 mov eax, dword ptr ss:[ebp-28] ; eax=CA9D-36Q8
00889176 8D55 F4 lea edx, dword ptr ss:[ebp-C]
00889179 E8 DE03F9FF call PunUnitL.0081955C
0088917E 8D45 D4 lea eax, dword ptr ss:[ebp-2C]
00889181 50 push eax
00889182 B9 04000000 mov ecx, 4 ; ecx=4
00889187 BA 01000000 mov edx, 1 ; edx=1
0088918C 8B45 F4 mov eax, dword ptr ss:[ebp-C] ; eax=CA9D-36Q8
0088918F E8 2CB9F8FF call PunUnitL.00814AC0
00889194 FF75 D4 push dword ptr ss:[ebp-2C] ; CA9D
00889197 68 0C928800 push PunUnitL.0088920C
0088919C FF75 FC push dword ptr ss:[ebp-4] ; 7475
0088919F 8D45 D0 lea eax, dword ptr ss:[ebp-30]
008891A2 50 push eax
008891A3 B9 05000000 mov ecx, 5 ; ecx=5
008891A8 BA 05000000 mov edx, 5 ; edx=5
008891AD 8B45 F4 mov eax, dword ptr ss:[ebp-C] ; eax=CA9D-36Q8
008891B0 E8 0BB9F8FF call PunUnitL.00814AC0
008891B5 FF75 D0 push dword ptr ss:[ebp-30] ; -36Q8
008891B8 68 0C928800 push PunUnitL.0088920C
008891BD FF75 F8 push dword ptr ss:[ebp-8] ; E403
008891C0 8D45 EC lea eax, dword ptr ss:[ebp-14]
008891C3 BA 06000000 mov edx, 6
008891C8 E8 5BB7F8FF call PunUnitL.00814928
008891CD 8B45 EC mov eax, dword ptr ss:[ebp-14]
008891D0 E8 8BB8F8FF call PunUnitL.00814A60 ; 最后连接成19位注册码
===========================================================================================
固定码:CA5D-36Q8
===========================================================================================
算法步骤:
1.机器码转换成Ascii值;
2.各位Ascii字符倒序排列;
3.取排列后的前八位,前四位记做sreg1,后四位sreg2;
4.CA5D放第一位,sreg1第二位,36Q8第三位,sreg2第四位,中间用‘-’号连接,生成注册码。
//=========================================================================================
//delphi注册机源码
//=========================================================================================
var
sreg2,sreg1,s1,s2,reg:string;
i,iasc:integer;
sasci:string; //声明变量
begin
if length(edit1.Text)> 0 then
begin
s1:=edit1.Text;
for i := 1 to length(s1) do
begin
iasc:=ord(s1[i]);
s2:=s2+Format(%.2x,[Ord(iasc)]); //将Ascii转化为字符
end;
sasci:=ReverseString(s2); //倒序后的字符串
sreg1:=copy(sasci,1,4);
sreg2:=copy(sasci,5,4);
reg:=CA5D+-+sreg1+-+36Q8+-+sreg2; //生成注册码
edit2.Text:=reg;//输出注册码
end;
//============================================================================================
我的机器码:GEK854RH1W0NWG
注册码: CA5D-7475-36Q8-E403
PS:以前老版本(V2.87)注册方法有点不同,只是固定码为CA9D-36Q8,其他的算法都一样。
注册码保存在:softwarexajyjydepot