【破解作者】 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的第五到第八位来组合就是正确的注册码了

好久不写破文今天拿一个软件开刀没想到找到个软柿子,算法简单只为学习:-)
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!