• 标 题:VFP与狗
  • 作 者:WR-911
  • 时 间:2003年8月28日 12:38
  • 链 接:http://bbs.pediy.com

VFP与狗
    简介:最近老豆单位里买了一套《XX住房档案及住房补贴管理系统(单位版)》软件,里面包含了一张光盘(使用了45兆)、说明书和一只打印端口的“深思洛克”狗,我在家适用了一下发现软件编写的不够体贴用户,而且价格不绯(500多大洋),但软件是我们昆明人自己编的我也不能拆他的台嘛。
    
    工具用到了:UnFOXAll2.1 、UltraEdit32、Microsoft Visual FoxPro 6.0
    
    我这也是第一次破解软件狗,有很多不懂的地方,于是就翻阅了所有《看雪论坛精华》找资料,才发现绝大多数破解者都是调试或静态反汇编用PE格式生成的EXE文件,然后在找中文或E文的调用狗的地方破解的。一开始我也跟着憨,用TRW2000和W32dasm研究主文件可是基本没得到太有用的地方。后用UltraEdit32打开文件才发现里面是一行行的伪代码,再根据调试时发现总在VFP6R.DLL的领空打转,才最终确定了破解方向。
    发现是VFP的格式后当然就用UnFOXAll2.1将它反编译了,有389个文件,打开其中的主文件gzkmk.prg发现有以下语句
 
 DO ghjsz.prg
 PUBLIC PWD1 , PWD2 , PWD3 , PWD4 , PWD5 , PWD6 , PWD7 , PWD8 , PWD9 , PWD10 , PWD11 ,  ;
      PWD12 , PWD13
 PUBLIC US1 , US2 , USER1
 PWD1 = .T.
 PWD2 = .T.
 PWD3 = .T.
 PWD4 = .T.
 PWD5 = .T.
 PWD6 = .T.
 PWD7 = .T.
 PWD8 = .T.
 PWD9 = .T.
 PWD10 = .T.
 PWD11 = .T.
 PWD12 = .T.
 PWD13 = .T.
 _SCREEN.WINDOWSTATE = 2
 _SCREEN.FONTNAME = '宋体'
 _SCREEN.FONTSIZE = 11
 _SCREEN.CAPTION = 'XX住房档案及住房补贴管理系统(单位版) VER 5.0'
 _SCREEN.CLOSABLE = .F.
 _SCREEN.PICTURE = 'c:zfbtkmda1.jpg'
 DO GDOG启动时检查狗
 DO GRECORD3
 DO FORM gpasswd
 DO gzkpm.prg
 DO GDOG退出前检查狗
 QUIT 
    
GDOG.prg内容如下:没狗时就出现“执行条件不具备”的窗口。
 
 SET TALK OFF
 SET SAFETY OFF
 DECLARE KEYPRO IN keypro STRING 
 DECLARE PutData IN keypro INTEGER , STRING , INTEGER 
 DECLARE INTEGER GetData IN keypro STRING , INTEGER 
 LOCAL II , JJ , AA , BB , ND , CT , CM , NA , PD1 , PD2 , PD3 , KD
 KD = SPACE(80)
 PD1 = ''
 PD2 = ''
 PD3 = ''
 II = 22
 JJ = 33
 = PUTDATA(II,@KD,6)
 = PUTDATA(JJ,@KD,8)
 = PUTDATA(0,@KD,2)
 FOR JJ = 10 TO 15
    = PUTDATA(JJ,@KD,4)
    = KEYPRO(@KD)
    IF GETDATA(@KD,0) <> 0
       ND = 64
       CT = '提示:'
       CM = '执行条件不具备1.' + STR(GETDATA(@KD,0))
       NA = MESSAGEBOX(CM,ND,CT)
       QUIT 
    ELSE 
       PD1 = PD1 + STR(GETDATA(@KD,10),1)
    ENDIF 
 ENDFOR 
 FOR JJ = 30 TO 35
    = PUTDATA(JJ,@KD,4)
    = KEYPRO(@KD)
    IF GETDATA(@KD,0) <> 0
       ND = 64
       CT = '提示:'
       CM = '执行条件不具备2.'
       NA = MESSAGEBOX(CM,ND,CT)
       QUIT 
    ELSE 
       PD2 = PD2 + STR(GETDATA(@KD,10),1)
    ENDIF 
 ENDFOR 
 FOR JJ = 50 TO 55
    = PUTDATA(JJ,@KD,4)
    = KEYPRO(@KD)
    IF GETDATA(@KD,0) <> 0
       ND = 64
       CT = '提示:'
       CM = '执行条件不具备3.'
       NA = MESSAGEBOX(CM,ND,CT)
       QUIT 
    ELSE 
       PD3 = PD3 + STR(GETDATA(@KD,10),1)
    ENDIF 
 ENDFOR 
 IF PD1 + PD2 + PD3 <> '650041140056650041'
    ND = 64
    CT = '提示:'
    CM = '执行条件不具备4.'
    NA = MESSAGEBOX(CM,ND,CT)
    QUIT 
 ENDIF 
 RETURN 
*
    我再在389个文件的内容中查找GDOG语句,发现只有这两处(编程的人太浪费这个狗了!!!)。于是我将两句 DO GDOG语句删除了,(以.prg结尾的是程序文件,其他结尾的是表格、数据库、资源文件千万不要有一丁点改动!!!)然后用Microsoft Visual FoxPro 6.0重新连编这些处理过的文件,本以为可以收工了但………启动连编后的文件丢失了好多变量和出现了好多语法错误,我只能手动处理完了语法错误,在启动程序后(无狗)就能正常进入了,但还有变量丢失的问题(我的问题还是UnFOXAll和ReFox V8.0的问题)(不好修复,程序中有太多的变量交叉),不过至少证明了我们的思路是对的。
    由于是政府或企业使用的敏感软件,我们还是要以严密、谨慎的态度对待它,不然一丁点失误都会造成不可估量的后果!
    我采用了另一种特别的方法破解:用UltraEdit32打开原版的EXE程序,查找ASCII码的GDOG,第一次找到后就停下仔细观察


黙  T? 黙  T? 黙  T? 黙  T? 黙  T? 黙  T? 黙  T? 黙  T? 黙  T? 黙 T??  T??  宋体 T??  = T?? . XX住房档案及住房补贴管理系统(单位版) VER 5.0
 T?? ?  T??  c:zfbtkmda1.jpg ? ? ? ? ? gpasswd? ? gzkpm.prg? ? ? 8? U  GHJSZ PRG PWD1 PWD2 PWD3 PWD4 PWD5 PWD6 PWD7 PWD8 PWD9 PWD10 PWD11 PWD12 PWD13 US1 US2 USER1  WINDOWSTATE FONTNAME FONTSIZE CAPTION CLOSABLE PICTURE GRECORD3 GDOG GPASSWD GZKPMr???????????????1???r q ?q A 1                    %         d  (      L?%   ? 


发现GDOG前面的ASCII码与反编译后得到的389个文件中的主文件gzkmk.prg内容很象(见上文),于是我将GDOG的十六进制码47 44 4F 47 改成了 00 00 00 00   保存运行程序(无狗)就可以正常使用所有功能了。
    本文局限性较大,而且有很多问题,请大家一同努力。
    请保持文章的完整。