• 标 题:东晨库管网络版 6.5注册算法分析
  • 作 者:txm123
  • 时 间:2003/08/14 09:11pm
  • 链 接:http://bbs.pediy.com

东晨库管网络版 6.5注册算法分析                
 
软件名称:
 东晨库管网络版 6.5
 
软件简介:
 东晨库管网络版 6.5  
软件大小:6158KB
软件语言:简体中文
软件类别:国产软件/共享版/仓储租借
运行环境:Win9x/Me/NT/2000/XP
加入时间:2003-8-11 9:22:08
下载次数:88
软件评级:
联 系 人:zhusongdong@hotmail.com
开 发 商:Home Page
软件介绍:

  是企业单位对仓库日常工作实现计算机智能化处理的应用软件。能处理商品采购、销售、调拨、组装、拆卸借入、借出、归还、盘点等一般
仓库工作,能自动对库存超限的商品报警,多种报表功输出功能,让你的仓库管理工作轻松自如。  
下载地址:
 下载地址:http://www.onlinedown.net/soft/16093.htm
------------------------------------------------------------  
破解作者:
 yzez[DFCG]
 
破解工具:
 ollydbg1.09增强版
 
破解目的:
 目的有两个:一是研究它的注册算法;二是研究ollydbg的具体使用!让ollydbg象SICE和TRW一样轻松设置断点。
作者说明:请不要根据本算法制作注册机,本文只为交流技术,对于由此所引起的一切责任,本人不承担任何后果.  
------------------------------------------------------------
 
[破解过程]
 
详细过程:
1、不知道怎么一回事,我的系统下SICE和TRW都不正常,万能断点设不下,用条件断点可行,但只能用几分钟,过了几分钟,对不起系统罢工
,请高手指点一下怎样解决这个问题。所以最近我一直在研究ollydbg的用法,这篇破文也算一个小结吧!
2、废话少说开工吧!用FI查壳,无壳!爽!VB6.0程序!用ollydbg常用断点:vbastrcomp设断!断不下?!晕倒!好吧!重新来过,用ollyd
bg载入程序,在ollydbg最下边的小框里输入:bpx vbastrcomp,然后按:Enter键,等一会儿,会在主界面出现一个信息框,右键单击,又会出
现一个菜单栏,在这个菜单栏里选:Set breakpoint on every command,就是把信息框里所有的CALL都设断!设断下来以后,GO!按F9键,会
出现多次中断!在这个过程中,有许多步要走,要有耐心,一直走,等到出现注册信息框后,填入注册信息:98765432!我的机器码是:
6856035。点确定,程序被断下来了吧!

005C4D17   .  FF15 A4104000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaOb>;  MSVBVM60.__vbaObjSet----按确定后,中断在此,按F8往下!
005C4D1D   .  8BF8          MOV     EDI, EAX
005C4D1F   .  8D55 E4       LEA     EDX, DWORD PTR SS:[EBP-1C]
005C4D22   .  52            PUSH    EDX
005C4D23   .  57            PUSH    EDI
005C4D24   .  8B0F          MOV     ECX, DWORD PTR DS:[EDI]
005C4D26   .  FF91 A0000000 CALL    DWORD PTR DS:[ECX+A0]
005C4D2C   .  3BC3          CMP     EAX, EBX
005C4D2E   .  DBE2          FCLEX
005C4D30   .  7D 12         JGE     SHORT DCKG6_4.005C4D44
005C4D32   .  68 A0000000   PUSH    0A0
005C4D37   .  68 B06C4400   PUSH    DCKG6_4.00446CB0
005C4D3C   .  57            PUSH    EDI
005C4D3D   .  50            PUSH    EAX
005C4D3E   .  FF15 68104000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHr>;  MSVBVM60.__vbaHresultCheckObj
005C4D44   >  8B06          MOV     EAX, DWORD PTR DS:[ESI]          ;  DCKG6_4.006744A8
005C4D46   .  56            PUSH    ESI
005C4D47   .  FF90 04030000 CALL    DWORD PTR DS:[EAX+304]
005C4D4D   .  8D4D D8       LEA     ECX, DWORD PTR SS:[EBP-28]
005C4D50   .  50            PUSH    EAX
005C4D51   .  51            PUSH    ECX
005C4D52   .  FF15 A4104000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaOb>;  MSVBVM60.__vbaObjSet
005C4D58   .  8BF0          MOV     ESI, EAX
005C4D5A   .  8D45 E0       LEA     EAX, DWORD PTR SS:[EBP-20]
005C4D5D   .  50            PUSH    EAX
005C4D5E   .  56            PUSH    ESI
005C4D5F   .  8B16          MOV     EDX, DWORD PTR DS:[ESI]          ;  DCKG6_4.006744A8
005C4D61   .  FF92 A0000000 CALL    DWORD PTR DS:[EDX+A0]            ;  MSVBVM60.733EFD34
005C4D67   .  3BC3          CMP     EAX, EBX
005C4D69   .  DBE2          FCLEX
005C4D6B   .  7D 12         JGE     SHORT DCKG6_4.005C4D7F
005C4D6D   .  68 A0000000   PUSH    0A0
005C4D72   .  68 B06C4400   PUSH    DCKG6_4.00446CB0
005C4D77   .  56            PUSH    ESI
005C4D78   .  50            PUSH    EAX
005C4D79   .  FF15 68104000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaHr>;  MSVBVM60.__vbaHresultCheckObj
005C4D7F   >  8B4D E0       MOV     ECX, DWORD PTR SS:[EBP-20]-----输入的假码入ECX!ECX的值是:98765432
005C4D82   .  51            PUSH    ECX----------------------------假码入栈!
005C4D83   .  FF15 AC114000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8>;  MSVBVM60.__vbaR8Str
005C4D89   .  8B55 E4       MOV     EDX, DWORD PTR SS:[EBP-1C]------机器码送入EDX!EDX的值是:6856035
005C4D8C   .  DD9D 34FFFFFF FSTP    QWORD PTR SS:[EBP-CC]-----------保存实数!这里是:我们输入的假码!
005C4D92   .  52            PUSH    EDX-----------------------------这里是机器码入栈!
005C4D93   .  FF15 AC114000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaR8>;  MSVBVM60.__vbaR8Str---此CALL是对机器码转换!我没有具体
-----------------------------------------------去跟, 有兴趣自己跟一下吧!
005C4D99   .  DC05 784A4000 FADD    QWORD PTR DS:[404A78]-----------ST=6856035.0000000000000;DS存放的是常数:19730131.000000
------------------------00。ST=ST+常数=6856035.0000000000000+19730131.00000000=26586166.000000000000
005C4D9F   .  833D 00106600>CMP     DWORD PTR DS:[661000], 0--------DS:[661000]为0,所以这里不会跳!
005C4DA6   .  75 08         JNZ     SHORT DCKG6_4.005C4DB0-----不相等就跳!
005C4DA8   .  DC35 704A4000 FDIV    QWORD PTR DS:[404A70]-----------ST=26586166.000000000000;DS:[404A70]存放的是常数:1.973
-------------------013100000000。ST=ST/常数=26586166.000000000000/1.973013100000000=13474905.969960360960
005C4DAE   .  EB 11         JMP     SHORT DCKG6_4.005C4DC1
005C4DB0   >  FF35 744A4000 PUSH    DWORD PTR DS:[404A74]
005C4DB6   .  FF35 704A4000 PUSH    DWORD PTR DS:[404A70]
005C4DBC   .  E8 D320E4FF   CALL    <JMP.&MSVBVM60._adj_fdiv_m64>----此CALL保留上述运算所得的整数位,不用四舍五入:13474905.
-----------------------------------000000000000,13474905就是我们要找的注册码!
005C4DC1   >  DFE0          FSTSW   AX
005C4DC3   .  A8 0D         TEST    AL, 0D
005C4DC5   .  0F85 CB020000 JNZ     DCKG6_4.005C5096
005C4DCB   .  FF15 54124000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFP>;  MSVBVM60.__vbaFPInt
005C4DD1   .  FF15 E0104000 CALL    DWORD PTR DS:[<&MSVBVM60.__vbaFp>;  MSVBVM60.__vbaFpR8
005C4DD7   .  DC9D 34FFFFFF FCOMP   QWORD PTR SS:[EBP-CC]---比较浮点数值:ST=13474905.000000000000;SS:[EBP-CC]=98765432.000
------------------------------00000
005C4DDD   .  DFE0          FSTSW   AX
005C4DDF   .  F6C4 40       TEST    AH, 40
005C4DE2   .  75 07         JNZ     SHORT DCKG6_4.005C4DEB----不相等就跳!去见上帝吧!玩完啦!
005C4DE4   .  B8 01000000   MOV     EAX, 1--------------------赋成功标志位:1
005C4DE9   .  EB 02         JMP     SHORT DCKG6_4.005C4DED
005C4DEB   >  33C0          XOR     EAX, EAX
3、好了,现在可以进行算法总结了!算法超级简单:设注册码为A,机器码为B,用到两个常数:19730131和1.973013100000000
  A=(B+19730131)/1.973013100000000取结果的整数位,不用四舍五入!我的注册码是:
 A=(6856035+19730131)/1.973013100000000=13474905.969960360960,取整数位就是:13474905,输入注册成功!
  另我做了它的破解动画,因为比较大,不能上传,有需要可以与我联系!