佳宜进销存管理软件--简单注册分析
【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 佳宜进销存管理软件
【软件地址】 http://www.jyitsoft.com/
【编写语言】 Borland Delphi 6.0 - 7.0
介绍:
易用商品进销存管理软件参考了各类进销存管理软件精华,溶入了各自的优点并采纳众多用户的宝贵意见,真正地从用户的需要出发,为客户需要而设计。
本软件适用于大中小型企业、商畅?生产厂等物资供销、商品流通部门进行物资(商品)的采购、销售、库存的管理。主要功能包括进采购、采购退货、销售、销售退货、物料领用、领料退回、库存盘点、仓库调拨、借入、借出、借入还出、借出还入,供方客户资料管理,供方供货汇总、明细报表,客户供货汇总、明细报表,部门领用汇总、明细报表、仓库汇总、明细报表。销售毛利汇总
明细报表,销售年报表等多种报表,使公司业务情况一目了然。
本系统采用安全稳定的数据库管理系统设计而成,介面友好,所见即所得,操作简便,多级密码设置及备份功能,数据安全可靠,全真模拟显示功能,经营业务管理成熟,汇集了许多优秀企业的成功管理经验。
现已广泛应用于:大中小型企业集团、工厂、进出口公司`、五交化公司、商畅?购物中心、酒店、连锁店、专卖店、批发部;化工、建材、五金水电、医药、汽配、食品、服装、电子、电脑、图书、仓储、化装品等行业。
过程:
………………………………………………………………………………………………………………………………
00695777 . 51 push ecx
00695778 . 53 push ebx
00695779 . 56 push esi
0069577A . 57 push edi
0069577B . 89>mov dword ptr ss:[ebp-4],eax
0069577E . 33>xor eax,eax
00695780 . 55 push ebp
00695781 . 68>push JxcAcces.006959E6
00695786 . 64>push dword ptr fs:[eax]
00695789 . 64>mov dword ptr fs:[eax],esp
0069578C . 8D>lea edx,dword ptr ss:[ebp-10]
0069578F . 8B>mov eax,dword ptr ss:[ebp-4]
00695792 . 8B>mov eax,dword ptr ds:[eax+304]
00695798 . E8>call JxcAcces.0044F070 ; 取得用户名 返回位数
0069579D . 8B>mov eax,dword ptr ss:[ebp-10]
006957A0 . 8D>lea edx,dword ptr ss:[ebp-C]
006957A3 . E8>call JxcAcces.00409720
006957A8 . 83>cmp dword ptr ss:[ebp-C],0 ; 检查用户名是否输入
006957AC . 75>jnz short JxcAcces.006957D0
006957AE . 6A>push 0
006957B0 . 68>push JxcAcces.006959F4
006957B5 . E8>call <jmp.&PunUnitLib.ShowMess>
006957BA . 8B>mov eax,dword ptr ss:[ebp-4]
006957BD . 8B>mov eax,dword ptr ds:[eax+304]
006957C3 . 8B>mov edx,dword ptr ds:[eax]
006957C5 . FF>call dword ptr ds:[edx+C0]
006957CB . E9>jmp JxcAcces.00695981
006957D0 > 8D>lea edx,dword ptr ss:[ebp-18]
006957D3 . 8B>mov eax,dword ptr ss:[ebp-4]
006957D6 . 8B>mov eax,dword ptr ds:[eax+2FC]
006957DC . E8>call JxcAcces.0044F070 ; 取得输入码 返回位数
006957E1 . 8B>mov eax,dword ptr ss:[ebp-18]
006957E4 . 8D>lea edx,dword ptr ss:[ebp-14]
006957E7 . E8>call JxcAcces.00409720
006957EC . 83>cmp dword ptr ss:[ebp-14],0 ; 检查是否输入
006957F0 . 75>jnz short JxcAcces.00695814
006957F2 . 6A>push 0
006957F4 . 68>push JxcAcces.00695A08
006957F9 . E8>call <jmp.&PunUnitLib.ShowMess> ; 错误窗口,授权号不能为空
006957FE . 8B>mov eax,dword ptr ss:[ebp-4]
00695801 . 8B>mov eax,dword ptr ds:[eax+2FC]
00695807 . 8B>mov edx,dword ptr ds:[eax]
00695809 . FF>call dword ptr ds:[edx+C0]
0069580F . E9>jmp JxcAcces.00695981
00695814 > A1>mov eax,dword ptr ds:[6A870C]
00695819 . 8B>mov eax,dword ptr ds:[eax] ; 得到一个固定字符串C26P-Q618
0069581B . E8>call JxcAcces.00404FD0
00695820 . 50 push eax
00695821 . 8D>lea edx,dword ptr ss:[ebp-1C]
00695824 . 8B>mov eax,dword ptr ss:[ebp-4]
00695827 . 8B>mov eax,dword ptr ds:[eax+2F4]
0069582D . E8>call JxcAcces.0044F070 ; 计算出机器码 返回字符串位数
00695832 . 8B>mov eax,dword ptr ss:[ebp-1C] ; 取出机器码字符形式
00695835 . E8>call JxcAcces.00404FD0
0069583A . 50 push eax ; 压入机器码准备处理
0069583B . E8>call <jmp.&PunUnitLib.GetRegPass> ; 看名称就知道,到了关键的CALL 进入
00695840 . 8B>mov edx,eax ; 结果得到字符窜4组 这个就是真正的注册码
00695842 . 8D>lea eax,dword ptr ss:[ebp-8]
00695845 . E8>call JxcAcces.00404D10
0069584A . 8D>lea edx,dword ptr ss:[ebp-24]
0069584D . 8B>mov eax,dword ptr ss:[ebp-4]
00695850 . 8B>mov eax,dword ptr ds:[eax+2FC]
00695856 . E8>call JxcAcces.0044F070
0069585B . 8B>mov eax,dword ptr ss:[ebp-24]
0069585E . 8D>lea edx,dword ptr ss:[ebp-20]
00695861 . E8>call JxcAcces.00409720
00695866 . 8B>mov eax,dword ptr ss:[ebp-20]
00695869 . 8B>mov edx,dword ptr ss:[ebp-8]
0069586C . E8>call JxcAcces.00404F1C ; 输入码与注册码比较了
00695871 . 0F>jnz JxcAcces.00695975 ; 关键跳转
00695877 . 33>xor eax,eax
00695879 . 55 push ebp
0069587A . 68>push JxcAcces.00695961
0069587F . 64>push dword ptr fs:[eax]
00695882 . 64>mov dword ptr fs:[eax],esp
00695885 . B2>mov dl,1
00695887 . A1>mov eax,dword ptr ds:[473094]
0069588C . E8>call JxcAcces.00473200
00695891 . 8B>mov ebx,eax
00695893 . BA>mov edx,80000002
00695898 . 8B>mov eax,ebx
0069589A . E8>call JxcAcces.004732DC
0069589F . B1>mov cl,1
006958A1 . 8B>mov edx,dword ptr ds:[6A7D20] ; JxcAcces.006956C4
006958A7 . 8B>mov eax,ebx
006958A9 . E8>call JxcAcces.00473420
006958AE . 8D>lea edx,dword ptr ss:[ebp-28]
006958B1 . 8B>mov eax,dword ptr ss:[ebp-4]
006958B4 . 8B>mov eax,dword ptr ds:[eax+304]
006958BA . E8>call JxcAcces.0044F070
006958BF . 8B>mov ecx,dword ptr ss:[ebp-28]
006958C2 . BA>mov edx,JxcAcces.00695A30 ; ASCII "UserName"
006958C7 . 8B>mov eax,ebx
006958C9 . E8>call JxcAcces.004735BC
006958CE . 8D>lea edx,dword ptr ss:[ebp-30]
006958D1 . 8B>mov eax,dword ptr ss:[ebp-4]
006958D4 . 8B>mov eax,dword ptr ds:[eax+2F4]
006958DA . E8>call JxcAcces.0044F070
006958DF . 8B>mov eax,dword ptr ss:[ebp-30]
006958E2 . E8>call JxcAcces.00404FD0
006958E7 . 50 push eax
006958E8 . E8>call <jmp.&PunUnitLib.SavePass>
006958ED . 8B>mov edx,eax
006958EF . 8D>lea eax,dword ptr ss:[ebp-2C]
006958F2 . E8>call JxcAcces.00404D10
006958F7 . 8B>mov ecx,dword ptr ss:[ebp-2C]
006958FA . BA>mov edx,JxcAcces.00695A44 ; ASCII "SignCode"
006958FF . 8B>mov eax,ebx
00695901 . E8>call JxcAcces.004735BC
00695906 . 8B>mov eax,dword ptr ss:[ebp-8]
00695909 . E8>call JxcAcces.00404FD0
0069590E . 50 push eax
0069590F . E8>call <jmp.&PunUnitLib.SavePass>
00695914 . 8B>mov edx,eax
00695916 . 8D>lea eax,dword ptr ss:[ebp-34]
00695919 . E8>call JxcAcces.00404D10
0069591E . 8B>mov ecx,dword ptr ss:[ebp-34]
00695921 . BA>mov edx,JxcAcces.00695A58 ; ASCII "RegCode"
00695926 . 8B>mov eax,ebx
00695928 . E8>call JxcAcces.004735BC
0069592D . 8B>mov eax,ebx
0069592F . E8>call JxcAcces.00403C2C
00695934 . 6A>push 0
00695936 . 68>push JxcAcces.00695A60
0069593B . E8>call <jmp.&PunUnitLib.ShowMess> ; 成功信息!!!!!
00695940 . A1>mov eax,dword ptr ds:[6A8708]
00695945 . C7>mov dword ptr ds:[eax],2
0069594B . A1>mov eax,dword ptr ds:[6A84AC]
00695950 . 8B>mov eax,dword ptr ds:[eax]
00695952 . E8>call JxcAcces.00470C6C
00695957 . 33>xor eax,eax
00695959 . 5A pop edx
0069595A . 59 pop ecx
0069595B . 59 pop ecx
0069595C . 64>mov dword ptr fs:[eax],edx
0069595F . EB>jmp short JxcAcces.00695981
00695961 .^ E9>jmp JxcAcces.0040410C
00695966 . 8B>mov eax,dword ptr ss:[ebp-4]
00695969 . E8>call JxcAcces.0046D3BC
0069596E . E8>call JxcAcces.00404538
00695973 . EB>jmp short JxcAcces.00695981
00695975 > 6A>push 3
00695977 . 68>push JxcAcces.00695A84
0069597C . E8>call <jmp.&PunUnitLib.ShowMess> ; 注册失败!!!!!
00695981 > 33>xor eax,eax
…………………………………………………………………………………………………………………………
进入006957F9 . E8>call <jmp.&PunUnitLib.ShowMess>
…………………………………………………………………………………………………………………………
008D9040 |. 64>mov dword ptr fs:[eax],esp
008D9043 |. 8D>lea eax,dword ptr ss:[ebp-14]
008D9046 |. E8>call PunUnitL.008645B0
008D904B |. 8D>lea eax,dword ptr ss:[ebp-10]
008D904E |. 8B>mov edx,dword ptr ss:[ebp+8] ; 取出机器吗
008D9051 |. E8>call PunUnitL.008647A0 ; 比较机器吗是否为0
008D9056 |. 8B>mov eax,dword ptr ss:[ebp-10]
008D9059 |. E8>call PunUnitL.00864868 ; 机器码的位数
008D905E |. 8B>mov esi,eax
008D9060 |. 85>test esi,esi
008D9062 |. 7E>jle short PunUnitL.008D908A ; 注册码位数次循环
008D9064 |. BB>mov ebx,1
008D9069 |> 8D>/lea ecx,dword ptr ss:[ebp-18]
008D906C |. 8B>|mov eax,dword ptr ss:[ebp-10] ; 取出机器吗
008D906F |. 0F>|movzx eax,byte ptr ds:[eax+ebx-1] ; 依次取机器码的每一位ASCII
008D9074 |. 33>|xor edx,edx
008D9076 |. E8>|call PunUnitL.00869674 ; 把ASCII转化为字符量
008D907B |. 8B>|mov edx,dword ptr ss:[ebp-18] ; 得到转化的结果,是字符了
008D907E |. 8D>|lea eax,dword ptr ss:[ebp-4]
008D9081 |. E8>|call PunUnitL.00864870 ; 一次一次字符组合起来,注册码一共8位,处理后成为16位字符
008D9086 |. 43 |inc ebx
008D9087 |. 4E |dec esi
008D9088 |.^ 75>\jnz short PunUnitL.008D9069 ; 这个循环把8位输入码的ASCII收集组合起来
008D908A |> 8B>mov eax,dword ptr ss:[ebp-4] ; 得到上面组合后的地址
008D908D |. E8>call PunUnitL.00864868 ; 得到组合后的位数
008D9092 |. 8B>mov esi,eax
008D9094 |. 85>test esi,esi
008D9096 |. 7E>jle short PunUnitL.008D90C4
008D9098 |. BB>mov ebx,1
008D909D |> 8B>/mov eax,dword ptr ss:[ebp-4] ; 得到组合后全部字符
008D90A0 |. E8>|call PunUnitL.00864868 ; 得到位数
008D90A5 |. 2B>|sub eax,ebx ; 每次减去1
008D90A7 |. 8B>|mov edx,dword ptr ss:[ebp-4] ; 再次得到组合后的字符
008D90AA |. 8A>|mov dl,byte ptr ds:[edx+eax] ; 依次从最后一位得到组合后的每以为字符
008D90AD |. 8D>|lea eax,dword ptr ss:[ebp-1C]
008D90B0 |. E8>|call PunUnitL.00864790
008D90B5 |. 8B>|mov edx,dword ptr ss:[ebp-1C] ; 得到结果地址
008D90B8 |. 8D>|lea eax,dword ptr ss:[ebp-8]
008D90BB |. E8>|call PunUnitL.00864870 ; 收集组合!!
008D90C0 |. 43 |inc ebx
008D90C1 |. 4E |dec esi
008D90C2 |.^ 75>\jnz short PunUnitL.008D909D ; 这一段把上面组合后的字符反过来储存在EBP-8中
008D90C4 |> 8D>lea eax,dword ptr ss:[ebp-4]
008D90C7 |. 50 push eax
008D90C8 |. B9>mov ecx,4
008D90CD |. BA>mov edx,1
008D90D2 |. 8B>mov eax,dword ptr ss:[ebp-8] ; 得到刚反过来的字符窜
008D90D5 |. E8>call PunUnitL.00864AC0 ; 得到前4位放在EBP-4
008D90DA |. 8D>lea eax,dword ptr ss:[ebp-8]
008D90DD |. 50 push eax
008D90DE |. B9>mov ecx,4
008D90E3 |. BA>mov edx,5
008D90E8 |. 8B>mov eax,dword ptr ss:[ebp-8] ; 得到刚反过来的字符窜
008D90EB |. E8>call PunUnitL.00864AC0 ; 又取了5-8位
008D90F0 |. 8B>mov eax,dword ptr ss:[ebp-4]
008D90F3 |. E8>call PunUnitL.00864868 ; 位数
008D90F8 |. 83>cmp eax,4
008D90FB |. 7D>jge short PunUnitL.008D912C
008D90FD |. 8B>mov eax,dword ptr ss:[ebp-4]
008D9100 |. E8>call PunUnitL.00864868
008D9105 |. 8B>mov ebx,eax
008D9107 |. 83>cmp ebx,3
008D910A |. 7F>jg short PunUnitL.008D912C
008D910C |> 8D>/lea ecx,dword ptr ss:[ebp-20]
008D910F |. 8B>|mov eax,ebx
008D9111 |. C1>|shl eax,2
008D9114 |. 33>|xor edx,edx
008D9116 |. E8>|call PunUnitL.00869674
008D911B |. 8B>|mov edx,dword ptr ss:[ebp-20]
008D911E |. 8D>|lea eax,dword ptr ss:[ebp-4]
008D9121 |. E8>|call PunUnitL.00864870
008D9126 |. 43 |inc ebx
008D9127 |. 83>|cmp ebx,4
008D912A |.^ 75>\jnz short PunUnitL.008D910C
008D912C |> 8B>mov eax,dword ptr ss:[ebp-8]
008D912F |. E8>call PunUnitL.00864868 ; 得到位数
008D9134 |. 83>cmp eax,4
008D9137 |. 7D>jge short PunUnitL.008D9168
008D9139 |. 8B>mov eax,dword ptr ss:[ebp-8]
008D913C |. E8>call PunUnitL.00864868
008D9141 |. 8B>mov ebx,eax
008D9143 |. 83>cmp ebx,3
008D9146 |. 7F>jg short PunUnitL.008D9168
008D9148 |> 8D>/lea ecx,dword ptr ss:[ebp-24]
008D914B |. 8B>|mov eax,ebx
008D914D |. C1>|shl eax,2
008D9150 |. 33>|xor edx,edx
008D9152 |. E8>|call PunUnitL.00869674
008D9157 |. 8B>|mov edx,dword ptr ss:[ebp-24]
008D915A |. 8D>|lea eax,dword ptr ss:[ebp-8]
008D915D |. E8>|call PunUnitL.00864870
008D9162 |. 43 |inc ebx
008D9163 |. 83>|cmp ebx,4
008D9166 |.^ 75>\jnz short PunUnitL.008D9148
008D9168 |> 8D>lea eax,dword ptr ss:[ebp-28]
008D916B |. 8B>mov edx,dword ptr ss:[ebp+C] ; 得到固定C26P-Q618
008D916E |. E8>call PunUnitL.008647A0 ; 没什么
008D9173 |. 8B>mov eax,dword ptr ss:[ebp-28]
008D9176 |. 8D>lea edx,dword ptr ss:[ebp-C]
008D9179 |. E8>call PunUnitL.0086955C
008D917E |. 8D>lea eax,dword ptr ss:[ebp-2C]
008D9181 |. 50 push eax
008D9182 |. B9>mov ecx,4
008D9187 |. BA>mov edx,1
008D918C |. 8B>mov eax,dword ptr ss:[ebp-C]
008D918F |. E8>call PunUnitL.00864AC0 ; 得到固定值的前4 C26P
008D9194 |. FF>push dword ptr ss:[ebp-2C]
008D9197 |. 68>push PunUnitL.008D920C
008D919C |. FF>push dword ptr ss:[ebp-4] ; 机器吗的计算出来的前4 4475
008D919F |. 8D>lea eax,dword ptr ss:[ebp-30]
008D91A2 |. 50 push eax
008D91A3 |. B9>mov ecx,5
008D91A8 |. BA>mov edx,5
008D91AD |. 8B>mov eax,dword ptr ss:[ebp-C] ; 取固定字符串
008D91B0 |. E8>call PunUnitL.00864AC0
008D91B5 |. FF>push dword ptr ss:[ebp-30] ; 固定字符的后5位 -Q618
008D91B8 |. 68>push PunUnitL.008D920C
008D91BD |. FF>push dword ptr ss:[ebp-8] ; 取机器吗计算出来的5-8位
008D91C0 |. 8D>lea eax,dword ptr ss:[ebp-14]
008D91C3 |. BA>mov edx,6
008D91C8 |. E8>call PunUnitL.00864928 ; 组合前4位是固定字符穿第2组是机器吗计算出来的前4位第3组是固定字符后4位第4组是机器吗计算出来的5-8位
008D91CD |. 8B>mov eax,dword ptr ss:[ebp-14]
008D91D0 |. E8>call PunUnitL.00864A60
008D91D5 |. 8B>mov ebx,eax
008D91D7 |. 33>xor eax,eax
008D91D9 |. 5A pop edx
008D91DA |. 59 pop ecx
008D91DB |. 59 pop ecx
008D91DC |. 64>mov dword ptr fs:[eax],edx
008D91DF |. 68>push PunUnitL.008D91F9
008D91E4 |> 8D>lea eax,dword ptr ss:[ebp-30]
008D91E7 |. BA>mov edx,0C
008D91EC |. E8>call PunUnitL.008645D4
008D91F1 \. C3 retn
………………………………………………………………………………………………………………………………
进入008D91C8 |. E8>call PunUnitL.00864928
………………………………………………………………………………………………………………………………
0086492B . 52 push edx
0086492C . 50 push eax
0086492D . 89>mov ebx,edx
0086492F . 31>xor edi,edi
00864931 . 8B>mov ecx,dword ptr ss:[esp+edx*4+14] ; 固定值的前4位
00864935 . 85>test ecx,ecx
00864937 . 74>je short PunUnitL.0086493F
00864939 . 39>cmp dword ptr ds:[eax],ecx
0086493B . 75>jnz short PunUnitL.0086493F
0086493D . 89>mov edi,eax
0086493F > 31>xor eax,eax
00864941 > 8B>mov ecx,dword ptr ss:[esp+edx*4+14]
00864945 . 85>test ecx,ecx
00864947 . 74>je short PunUnitL.00864952
00864949 . 03>add eax,dword ptr ds:[ecx-4]
0086494C . 39>cmp edi,ecx
0086494E . 75>jnz short PunUnitL.00864952
00864950 . 31>xor edi,edi
00864952 > 4A dec edx
00864953 .^ 75>jnz short PunUnitL.00864941 ; 这里得到要组合后的总位数
00864955 . 85>test edi,edi
00864957 . 74>je short PunUnitL.0086496D
00864959 . 89>mov edx,eax
0086495B . 89>mov eax,edi
0086495D . 8B>mov esi,dword ptr ds:[edi]
0086495F . 8B>mov esi,dword ptr ds:[esi-4]
00864962 . E8>call PunUnitL.00864BEC
00864967 . 57 push edi
00864968 . 03>add esi,dword ptr ds:[edi]
0086496A . 4B dec ebx
0086496B . EB>jmp short PunUnitL.00864975
0086496D > E8>call PunUnitL.00864674
00864972 . 50 push eax ; 得到没有反过来的机器吗计算出来的枝
00864973 . 89>mov esi,eax
00864975 > 8B>mov eax,dword ptr ss:[esp+ebx*4+18] ; 依次取得前面压入的4个字符串和一些“-”
00864979 . 89>mov edx,esi
0086497B . 85>test eax,eax
0086497D . 74>je short PunUnitL.00864989
0086497F . 8B>mov ecx,dword ptr ds:[eax-4]
00864982 . 01>add esi,ecx
00864984 . E8>call PunUnitL.00862918 ; 组合前4位是固定字符穿第2组是机器吗计算出来的前4位第3组是固定字符后4位第4组是机器吗计算出来的5-8位储存在ESP里面!!
00864989 > 4B dec ebx
0086498A .^ 75>jnz short PunUnitL.00864975
0086498C . 5A pop edx
0086498D . 58 pop eax
0086498E . 85>test edi,edi
00864990 . 75>jnz short PunUnitL.0086499E
………………………………………………………………………………………………………………………………
将8位机器码的每一位字符转化为2位16进制ASCII一共有16位,然后把16位数据,转化为字符形式
,再将16位字符反过来存储。,
注册码的形式一共有4组并用-连接,其中第1是固定的必为C26P,第3组也是固定的必为Q618,
最后注册码的形式为:
C26P-机器码计算出来的1-4位-Q618-机器码计算出来的5-8位
与用户名无关!!
算法比较简单,注册机不做了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)