[PYG]算法分析入门第七课
【破文标题】算法分析入门第七课【破文作者】飘云
【作者主页】https://www.chinapyg.com
【破解平台】winxp
【破解工具】PEiD0.93、AspackDie、w32dasm、OD二哥修改版
【作者邮箱】[email protected]
【软件名称】佳宜仓库管理软件 V2.25 单机版
【软件大小】7169 KB
【原版下载】http://www3.skycn.com/soft/18980.html
【软件简介】本软件适用于中小型企业、商场、生产厂等物资供销、商品流通部门进行物资(商品)的采购、销售、库存的管理。主要功能包括进采购、采购退货、销售、销售退货、物料领用、领料退回、库存盘点、仓库调拨、借入、借出、借入还出、借出还入,供方客户资料管理,供方供货汇总、明细报表,客户供货汇总、明细报表,部门领用汇总、明细报表、仓库汇总、明细报表。
销售毛利汇总明细报表,销售年报表等多种报表,使公司业务情况一目了然。
本系统采用安全稳定的数据库管理系统设计而成,介面友好,所见即所得,操作简便,多级密码设置及备份功能,数据安全可靠,全真模拟显示功能,经营业务管理成熟,汇集了许多优秀企业的成功管理经验。
现已广泛应用于:鞋业、外贸企业、医药、汽配、食品、服装、电子、电脑等行业。
【分析过程】先用PEiD探测一下:没有加壳,Borland Delphi 6.0 - 7.0编写。
用W32找到关键:
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:005EF981(C), :005EF98B(C), :005EF995(C) ★就是从这些地方跳向死亡★
|
:005EFA99 6A03 push 00000003
* Possible StringData Ref from Code Obj ->"系统注册失败,请检查注册是否有误!"
*************************************************************************************************
输入假信息:
用户名:piaoyun
注册码:789456123abcde
用od载入来到关键代码处:
005EF92A .8D55 DC lea edx,dword ptr ss:
005EF92D .8B45 F8 mov eax,dword ptr ss:
005EF930 .E8 EB9DE1FF call DepotMan.00409720
005EF935 .8B45 DC mov eax,dword ptr ss: ;假码入栈
005EF938 .E8 9B54E1FF call DepotMan.00404DD8 ;计算假码位数
005EF93D .83F8 0C cmp eax,0C ;是否小于12位
005EF940 .7E 3C jle short DepotMan.005EF97E ;小于就没得玩了
005EF942 .8B45 F8 mov eax,dword ptr ss: ;是假码
005EF945 .8078 03 4D cmp byte ptr ds:,4D ;第4位是否为 4D(即字符“M”)
005EF949 .74 04 je short DepotMan.005EF94F ;是则跳(到底该不该跳呢?看下面的分析)
005EF94B .33DB xor ebx,ebx
005EF94D .EB 02 jmp short DepotMan.005EF951
005EF94F >B3 01 mov bl,1 ;跳到这里则bl=1
005EF951 >8B45 F8 mov eax,dword ptr ss:
005EF954 .8078 05 44 cmp byte ptr ds:,44 ;第6位是否位44(即字符“D”)
005EF958 .75 20 jnz short DepotMan.005EF97A ;不是则跳
005EF95A .C645 F7 01 mov byte ptr ss:,1 ;不跳则=1
005EF95E .8B45 F8 mov eax,dword ptr ss:
005EF961 .8078 09 46 cmp byte ptr ds:,46 ;第10位是否位46(即字符“F”)
005EF965 .75 04 jnz short DepotMan.005EF96B ;不是则跳
005EF967 .C645 F6 01 mov byte ptr ss:,1 ;否则=1
005EF96B >8B45 F8 mov eax,dword ptr ss:
005EF96E .8078 0B 38 cmp byte ptr ds:,38 ;第12位是否为38(即十进制8)
005EF972 .75 0A jnz short DepotMan.005EF97E ;不是就跳
005EF974 .C645 F5 01 mov byte ptr ss:,1 ;否则=1
005EF978 .EB 04 jmp short DepotMan.005EF97E
005EF97A >C645 F7 00 mov byte ptr ss:,0 ;等于0
005EF97E >845D F7 test byte ptr ss:,bl ;bl为1就不跳
005EF981 .0F84 12010000 je DepotMan.005EFA99 ;跳则完蛋~
005EF987 .807D F6 00 cmp byte ptr ss:,0 ;是否为0
005EF98B .0F84 08010000 je DepotMan.005EFA99 ;不能跳
005EF991 .807D F5 00 cmp byte ptr ss:,0 ;是否为0
005EF995 .0F84 FE000000 je DepotMan.005EFA99 ;不能跳
★★★从这几句可分析出:前面的条件必须成立★★★
005EF99B .33C0 xor eax,eax
005EF99D .55 push ebp
005EF99E .68 85FA5E00 push DepotMan.005EFA85 ;以下是把用户名和机器码以及注册码加密换算后保存到注册表中
005EF9A3 .64:FF30 push dword ptr fs:
005EF9A6 .64:8920 mov dword ptr fs:,esp
005EF9A9 .B2 01 mov dl,1
005EF9AB .A1 94304700 mov eax,dword ptr ds:
005EF9B0 .E8 4B38E8FF call DepotMan.00473200
005EF9B5 .8BD8 mov ebx,eax
005EF9B7 .BA 02000080 mov edx,80000002
005EF9BC .8BC3 mov eax,ebx
005EF9BE .E8 1939E8FF call DepotMan.004732DC
005EF9C3 .B1 01 mov cl,1
005EF9C5 .8B15 B0DA6700 mov edx,dword ptr ds: ;DepotMan.005EF7B0
005EF9CB .8BC3 mov eax,ebx
005EF9CD .E8 4E3AE8FF call DepotMan.00473420
005EF9D2 .8D55 D8 lea edx,dword ptr ss:
005EF9D5 .8B45 FC mov eax,dword ptr ss:
005EF9D8 .8B80 0C030000 mov eax,dword ptr ds:
005EF9DE .E8 8DF6E5FF call DepotMan.0044F070
005EF9E3 .8B4D D8 mov ecx,dword ptr ss:
005EF9E6 .BA 54FB5E00 mov edx,DepotMan.005EFB54 ;ASCII "UserName"
005EF9EB .8BC3 mov eax,ebx
005EF9ED .E8 CA3BE8FF call DepotMan.004735BC
005EF9F2 .8D55 D0 lea edx,dword ptr ss:
005EF9F5 .8B45 FC mov eax,dword ptr ss:
005EF9F8 .8B80 F4020000 mov eax,dword ptr ds:
005EF9FE .E8 6DF6E5FF call DepotMan.0044F070
005EFA03 .8B45 D0 mov eax,dword ptr ss:
005EFA06 .E8 C555E1FF call DepotMan.00404FD0
005EFA0B .50 push eax
005EFA0C .E8 970AFFFF call <jmp.&PunUnitLib.SavePass>
005EFA11 .8BD0 mov edx,eax
005EFA13 .8D45 D4 lea eax,dword ptr ss:
005EFA16 .E8 F552E1FF call DepotMan.00404D10
005EFA1B .8B4D D4 mov ecx,dword ptr ss:
005EFA1E .BA 68FB5E00 mov edx,DepotMan.005EFB68 ;ASCII "SignCode"
005EFA23 .8BC3 mov eax,ebx
005EFA25 .E8 923BE8FF call DepotMan.004735BC
005EFA2A .8B45 F8 mov eax,dword ptr ss:
005EFA2D .E8 9E55E1FF call DepotMan.00404FD0
005EFA32 .50 push eax
005EFA33 .E8 700AFFFF call <jmp.&PunUnitLib.SavePass>
005EFA38 .8BD0 mov edx,eax
005EFA3A .8D45 CC lea eax,dword ptr ss:
005EFA3D .E8 CE52E1FF call DepotMan.00404D10
005EFA42 .8B4D CC mov ecx,dword ptr ss:
005EFA45 .BA 7CFB5E00 mov edx,DepotMan.005EFB7C ;ASCII "RegCode"
005EFA4A .8BC3 mov eax,ebx
005EFA4C .E8 6B3BE8FF call DepotMan.004735BC
005EFA51 .8BC3 mov eax,ebx
005EFA53 .E8 D441E1FF call DepotMan.00403C2C
005EFA58 .6A 00 push 0
005EFA5A .68 84FB5E00 push DepotMan.005EFB84
005EFA5F .E8 1C0AFFFF call <jmp.&PunUnitLib.ShowMess>
005EFA64 .A1 C4E66700 mov eax,dword ptr ds:
005EFA69 .C700 02000000 mov dword ptr ds:,2
005EFA6F .A1 78E46700 mov eax,dword ptr ds:
005EFA74 .8B00 mov eax,dword ptr ds:
005EFA76 .E8 F111E8FF call DepotMan.00470C6C
005EFA7B .33C0 xor eax,eax
005EFA7D .5A pop edx
005EFA7E .59 pop ecx
005EFA7F .59 pop ecx
005EFA80 .64:8910 mov dword ptr fs:,edx
005EFA83 .EB 20 jmp short DepotMan.005EFAA5
005EFA85 .^ E9 8246E1FF jmp DepotMan.0040410C
005EFA8A .8B45 FC mov eax,dword ptr ss:
005EFA8D .E8 2AD9E7FF call DepotMan.0046D3BC
005EFA92 .E8 A14AE1FF call DepotMan.00404538
005EFA97 .EB 0C jmp short DepotMan.005EFAA5
005EFA99 >6A 03 push 3
005EFA9B .68 A8FB5E00 push DepotMan.005EFBA8
005EFAA0 .E8 DB09FFFF call <jmp.&PunUnitLib.ShowMess>
005EFAA5 >33C0 xor eax,eax
005EFAA7 .5A pop edx
005EFAA8 .59 pop ecx
005EFAA9 .59 pop ecx
005EFAAA .64:8910 mov dword ptr fs:,edx
005EFAAD .68 0FFB5E00 push DepotMan.005EFB0F
005EFAB2 >8D45 CC lea eax,dword ptr ss:
005EFAB5 .E8 6650E1FF call DepotMan.00404B20
005EFABA .8D45 D0 lea eax,dword ptr ss:
005EFABD .E8 5E50E1FF call DepotMan.00404B20
005EFAC2 .8D45 D4 lea eax,dword ptr ss:
005EFAC5 .E8 5650E1FF call DepotMan.00404B20
005EFACA .8D45 D8 lea eax,dword ptr ss:
005EFACD .E8 4E50E1FF call DepotMan.00404B20
005EFAD2 .8D45 DC lea eax,dword ptr ss:
005EFAD5 .E8 4650E1FF call DepotMan.00404B20
005EFADA .8D45 E0 lea eax,dword ptr ss:
005EFADD .BA 02000000 mov edx,2
005EFAE2 .E8 5D50E1FF call DepotMan.00404B44
005EFAE7 >8D45 E8 lea eax,dword ptr ss:
005EFAEA .E8 3150E1FF call DepotMan.00404B20
005EFAEF .8D45 EC lea eax,dword ptr ss:
005EFAF2 .E8 2950E1FF call DepotMan.00404B20
005EFAF7 .8D45 F0 lea eax,dword ptr ss:
005EFAFA .E8 2150E1FF call DepotMan.00404B20
005EFAFF .8D45 F8 lea eax,dword ptr ss:
005EFB02 .E8 1950E1FF call DepotMan.00404B20
005EFB07 .C3 retn
005EFB08 .^ E9 B348E1FF jmp DepotMan.004043C0
005EFB0D .^ EB A3 jmp short DepotMan.005EFAB2
005EFB0F .5F pop edi
005EFB10 .5E pop esi
005EFB11 .5B pop ebx
005EFB12 .8BE5 mov esp,ebp
005EFB14 .5D pop ebp
005EFB15 .C3 retn
【算法总结】
注册码必须为12位以上,只要第4位为M,第6位位D,第10位为F,第12位为8就是合法的注册码,至于用户名和机器码,只有在写入注册表时才用到。
送个靓号:888M8D888FB88
后面加密后写注册表的过程有兴趣的可以跟一下~~~
附:注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\meida\mdDepot。删除后又可以继续研究。
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢 偶正在仔细看...........
005EF949 .74 04 je short DepotMan.005EF94F ;不是则跳(到底该不该跳呢?看下面的分析)
应该是“是”则跳吧? 学习~~~~~~ 多谢飘云斑竹 学习,学习 感觉老大每篇文章后面的
"附:注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\meida\mdDepot。删除后又可以继续研究"
这样的话很贴心 谢谢了/:014 上网时间紧迫。所以,必须保存了! 复制 复制 慢慢看 学习一下算法,谢谢老大。