• 标 题:发一个XX零户统管8。01版的破解! (3千字)
  • 作 者:loveaixing001
  • 时 间:2003-2-21 21:49:46
  • 链 接:http://bbs.pediy.com

xx的公共财政8.01解狗

这是我第一次写文,不当之处请大家多多指教!
用友的公共财政8.01是面对会计集中核算开发的专用软件,但这种破解法同样可以用于用友的其他软件,如:用友U8 8.20版、用友公共财政软件8.10版,其他版本应财力有限,无法买到。

工具:TRW2000 1.22
   W32DASM 8.93
      UEDIT  当然用HIEW可以了。


   解狗的一点心得,看了一位高手的一句话:软件的破点不在加密程序中,而是软件本身。
   呵呵,现在开始吧!

   公共财政8.01可以在NT下和9X下运行,在9X下无法当作服务器,只能当单机版运行,软件在运行时,要有SQLSERVER,请先安装,如果没狗,刚出现一个出错对话框,无法进入主界面,但<系统服务>可以运行。
      运行TRW2000,载入主程序,经过N次的bpx ,发现无论是系统服务还是零户统管,都要在运行时调用WINDOWS\system下的SERVER95.exe程序,在NT下,软件把SERVERNT.exe注册为系统服务程序,也要调用,在SERVERXX。EXE中取得返回值,IF有狗,则运行,ELSE出错。所以,破解用友公共财政8.01的关键是在SERVER95。EXE中。
    用W32DASM反汇编,在字符串中看见
    "Exit"
    "failed:不可识别的命令。"
    "failed:不能得到产品账套和年度。"
    "failed:不正确的命令。."
    "failed:共享路径失败。"
    "failed:连接失败。"
    "failed:没有插加密狗,或不是SQL的加密狗,或登录" <--就是他了!!!!!!
    "failed:没有输入客户端机器名。"
    "failed:没有输入命令。"
    "failed:没有输入账套号。"

    双击跳到了
  SERVER95.EXE 
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401DB2(C)
|
:00401DC9 3BF5                    cmp esi, ebp
:00401DCB 7C1B                    jl 00401DE8
:00401DCD 8D542410                lea edx, dword ptr [esp+10]
:00401DD1 52                      push edx
:00401DD2 E8F9FCFFFF              call 00401AD0
:00401DD7 83C404                  add esp, 00000004
:00401DDA 3BF0                    cmp esi, eax <<----关键的比较!
:00401DDC 7C0A                    jl 00401DE8  <<----惊心一跳,不跳的话就GAME OVER!

* Possible StringData Ref from Data Obj ->"failed:没有插加密狗,或不是SQL的加密狗,或登录"
                                        ->"的用户数超过额定的用户数。"
                                  |
:00401DDE BF74744000              mov edi, 00407474
:00401DE3 E9F3030000              jmp 004021DB

关键找出来了,那就改吧,在9X下你想怎么改就怎么改,可以加入你的提示,可以重新编辑代码长度,你可以使ESI不等于EAX,给EAX重新赋值,也可以给ESI重新赋值。改完,运行,进入主界面,一切功能都可以用。OK,在9X下的用友公共财政8.01已经可以运行了,没有站点限制,没有功能限制,但是在NT下,系统对EXE文件的要求更为苛刻,是不能用改动指令长度的,也就是说:
        8BF0                    mov esi, eax
是两个字符长,你不能改为三位,否则会出错的。
怎么办?我们可以不改变指令代码的长度,而改为其他的指令,只要是两位长就行了。
看看SERVERNT.EXE吧!
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004023A2(C)
|
:004023B9 3BF5                    cmp esi, ebp
:004023BB 7C1B                    jl 004023D8
:004023BD 8D542410                lea edx, dword ptr [esp+10]
:004023C1 52                      push edx
:004023C2 E8F9FCFFFF              call 004020C0
:004023C7 83C404                  add esp, 00000004
:004023CA 3BF0                    cmp esi, eax  <<<---***重心呀
:004023CC 7C0A                    jl 004023D8

* Possible StringData Ref from Data Obj ->"failed:没有插加密狗,或不是SQL的加密狗,或登录"
                                        ->"的用户数超过额定的用户数。"
                                  |
:004023CE BF70854000              mov edi, 00408570
:004023D3 E9F3030000              jmp 004027CB
那我们怎么改呢?


呵呵,只要把
:004023CA 3BF0                    cmp esi, eax
改为
:004023CA 3BF1                    cmp esi, eCx
运行,一切OK
好了,就写这吧!
噢,在U8中找DEMO一样的改,祝你用上好软件!