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 儲存執行程式(無狗)就可以正常使用所有功能了。
本文侷限性較大,而且有很多問題,請大家一同努力。
請保持文章的完整。