xx的公共财政8.01解狗
解狗的一点心得,看了一位高手的一句话:软件的破点不在加密程序中,而是软件本身。
呵呵,现在开始吧!
公共财政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
好了,就写这吧!