南天住房檔案及住房補貼管理資訊系統

看雪資料發表於2003-08-28

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:\zfbt\kmda1.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,第一次找到後就停下仔細觀察

aT? a T? aT? aT? aT? aT? aT? aT? aT? a T?? T?? 宋體 T?? = T?? . XX住房檔案及住房補貼管理系統(單位版) VER 5.0
T?? ?  T?? c:\zfbt\kmda1.jpg ? ? ? ? ? gpasswd? ? gzkpm.prg? ? ? 8? U GHJSZ PRG PWD1 PWD2 PWD3 PWD4 PWD5 PWD6 PWD7 PWD8 PWD9 PWD10 PWD11 PWD12 PWD13 US1 US2 USER1WINDOWSTATE 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   儲存執行程式(無狗)就可以正常使用所有功能了。

   本文侷限性較大,而且有很多問題,請大家一同努力。
   請保持文章的完整。


相關文章