【破解作者】 gxjxdqk[BCG]by 拉登徒弟
【作者邮箱】 gxjxdqk@163.com
【使用工具】 OD
【破解平台】 Win9x/NT/2000/XP
【软件名称】 佳宜采购管理软件 1.20
【下载地址】 http://www.onlinedown.net/soft/39236.htm
【软件简介】 采购管理软件参考了各类采购管理软件精华,溶入了各自的优点并采纳众多用户的宝贵意见,真正地从用户的需要出发,为客户需要而设计。
本软件提供了完备的采购管理功能,包括采购管理(采购订货、采购收货、退货管理、付款登记)、基本信息(公司基本资料、供货商资料、货品资料、业务员、其他基础置)、单据查询(订货单查询、收货单查询、付款单查询)、系统维护(操作权限、数据备份及恢复、数据压缩、数据清理)等功能。
本系统采用安全稳定的数据库管理系统设计而成,介面友好,所见即所得,操作简便,多级密码设置及备份功能,数据安全可靠,全真模拟显示功能,经营业务管理成熟,汇集了许多优秀企业的成功管理经验。
现已广泛应用于:大中小型企业集团、工厂、进出口公司`、五交化公司、商场、购物中心、酒店、连锁店、专卖店、批发部;化工、建材、五金水电、医药、汽配、食品、服装、电子、电脑、图书、仓储、化装品等行业...
【软件大小】 3119KB
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
此软件为明码比较,难道简单。
目的看算法分析软件
这是我的机器编号先称之为A(WD-WCAJD1388450)
软件本身有个固定字串来跟变后的机器编号组合这个字串是
固定字串C26D-Q628
机器码转换为十六进制后为以下值:B
57442D5743414A4431333838343530
B的反排值称为c
0353438383331344A4143475D24475
真注册码
C26D-0353-Q628-4383
拿出OD找字串很容易找到下面的出错关键下断
005E13EC A1 6CD56300 mov eax,dword ptr ds:[63D56C]
005E13F1 8B00 mov eax,dword ptr ds:[eax] ; 固定字串C26D-Q628给EAX
005E13F3 E8 D83BE2FF call stockMan.00404FD0
005E13F8 50 push eax
005E13F9 8D55 E4 lea edx,dword ptr ss:[ebp-1C]
005E13FC 8B45 FC mov eax,dword ptr ss:[ebp-4]
005E13FF 8B80 F40200>mov eax,dword ptr ds:[eax+2F4]
005E1405 E8 6ADCE6FF call stockMan.0044F074
005E140A 8B45 E4 mov eax,dword ptr ss:[ebp-1C] ; 产品编号入EAX
005E140D E8 BE3BE2FF call stockMan.00404FD0
005E1412 50 push eax ; 产品编号入堆栈
005E1413 E8 ECB7FFFF call <jmp.&PunUnitLib.GetRegPass> ; 此CALL完成机器编号的十六进制反排后跟固定字串组合也就是算法CALL跟进见算法
005E1418 8BD0 mov edx,eax ; 组合后的C26D-0353-Q628-4383也就是真注册码给EDX
005E141A 8D45 F8 lea eax,dword ptr ss:[ebp-8]
005E141D E8 EE38E2FF call stockMan.00404D10
005E1422 8D55 DC lea edx,dword ptr ss:[ebp-24]
005E1425 8B45 FC mov eax,dword ptr ss:[ebp-4]
005E1428 8B80 FC0200>mov eax,dword ptr ds:[eax+2FC]
005E142E E8 41DCE6FF call stockMan.0044F074 ; 取注册码位数
005E1433 8B45 DC mov eax,dword ptr ss:[ebp-24] ; 注册码给EAX
005E1436 8D55 E0 lea edx,dword ptr ss:[ebp-20]
005E1439 E8 E282E2FF call stockMan.00409720
005E143E 8B45 E0 mov eax,dword ptr ss:[ebp-20] ; 注册码给EAX
005E1441 8B55 F8 mov edx,dword ptr ss:[ebp-8] ; 把真码给EDX
005E1444 E8 D33AE2FF call stockMan.00404F1C ; 真码跟假码比较
005E1449 0F85 FE0000>jnz stockMan.005E154D ; 不跳就注册成功
从005E1413的CALL跟进后的算法部份
003E9064 BB 01000000 mov ebx,1
003E9069 8D4D E8 lea ecx,dword ptr ss:[ebp-18] ;
003E906C 8B45 F0 mov eax,dword ptr ss:[ebp-10] ; 重新取机器编号
003E906F 0FB64418 FF movzx eax,byte ptr ds:[eax+ebx-1] ; 取下一位
003E9074 33D2 xor edx,edx ; EDX清0
003E9076 E8 F905F9FF call PunUnitL.00379674 ; 把A转为16进制
003E907B 8B55 E8 mov edx,dword ptr ss:[ebp-18] ; A给EDX
003E907E 8D45 FC lea eax,dword ptr ss:[ebp-4] ; EAX付0
003E9081 E8 EAB7F8FF call PunUnitL.00374870 ; 做指针指向下个机器编号
003E9086 43 inc ebx ; 累加
003E9087 4E dec esi ; 机器位数-1
003E9088 ^ 75 DF jnz short PunUnitL.003E9069 ; 没取完跳
003E908A 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 转换后的值给EAX
003E908D E8 D6B7F8FF call PunUnitL.00374868 ; 转后的值不为0就给EAX置1E(30)也就是机器编号转成16进制后的位数
003E9092 8BF0 mov esi,eax
003E9094 85F6 test esi,esi ; 测试ESI
003E9096 7E 2C jle short PunUnitL.003E90C4 ; 这上面的循环作用是把机器编号转成16进制
003E9098 BB 01000000 mov ebx,1 ; EBX付1
003E909D 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 在取B值给EAX
003E90A0 E8 C3B7F8FF call PunUnitL.00374868 ; 注册B是否为0不为0就给EAX置1E
003E90A5 2BC3 sub eax,ebx ; 1E-1
003E90A7 8B55 FC mov edx,dword ptr ss:[ebp-4] ; B给EDX
003E90AA 8A1402 mov dl,byte ptr ds:[edx+eax] ; 取后一位给DL
003E90AD 8D45 E4 lea eax,dword ptr ss:[ebp-1C] ; 重新给EAX置0
003E90B0 E8 DBB6F8FF call PunUnitL.00374790
003E90B5 8B55 E4 mov edx,dword ptr ss:[ebp-1C]
003E90B8 8D45 F8 lea eax,dword ptr ss:[ebp-8]
003E90BB E8 B0B7F8FF call PunUnitL.00374870
003E90C0 43 inc ebx
003E90C1 4E dec esi
003E90C2 ^ 75 D9 jnz short PunUnitL.003E909D ; 上面循环是把B做反排为c
003E90C4 8D45 FC lea eax,dword ptr ss:[ebp-4]
003E90C7 50 push eax
003E90C8 B9 04000000 mov ecx,4
003E90CD BA 01000000 mov edx,1
003E90D2 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; C给EAX
003E90D5 E8 E6B9F8FF call PunUnitL.00374AC0
003E90DA 8D45 F8 lea eax,dword ptr ss:[ebp-8] ; C给EAX
003E90DD 50 push eax
003E90DE B9 04000000 mov ecx,4
003E90E3 BA 05000000 mov edx,5
003E90E8 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; C给EAX
003E90EB E8 D0B9F8FF call PunUnitL.00374AC0 ; 取C前四位
003E90F0 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 前四位给EAX
003E90F3 E8 70B7F8FF call PunUnitL.00374868
003E90F8 83F8 04 cmp eax,4 ; 位数4跟4比
003E90FB 7D 2F jge short PunUnitL.003E912C ; 大于等于4就跳
003E912C 8B45 F8 mov eax,dword ptr ss:[ebp-8] 以下这大段就是组合部份很简单可以自己跟一下
003E912F E8 34B7F8FF call PunUnitL.00374868
003E9134 83F8 04 cmp eax,4
003E9137 7D 2F jge short PunUnitL.003E9168
.............................................................略了大家可以自己跟一下
--------------------------------------------------------------------------------
【破解总结】
算法总结:
取固定字串前四位+'-'+C的前四位+固定字串的后五位+'-'+C的第五到第八位来组合就是正确的注册码了
好久不写破文今天拿一个软件开刀没想到找到个软柿子,算法简单只为学习:-)
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)