關於破解以p-code方式編譯的VB程式一例 (2千字)

看雪資料發表於2002-04-01

各位大蝦好,我是lipan,這是本人的第一篇破文,是模仿大家的文章寫的,若有不正確之處,希望能得到前輩

們的指教,謝謝。關於破解以p-code方式編譯的VB程式一例。本文僅在研究破解技術,請大家支援軟體作者制

作出更優秀的軟體。

目標軟體:EnglishElf 英語精靈1.0.5版 軟體主頁:http://www.kytop.net/englishelf/
工具軟體:VBDebug13e 可以在看雪學院下載
過程:

此軟體計算機器碼,然後對比輸入的註冊碼。
好了開始!
執行VBDebug,載入Englishelf,執行,快速按下兩個提示資訊後,中斷在程式入口。
選擇FormManager,FrmRegister,cmdRegister,下斷0041AE6Ch(點選bPX)。(為什麼?呵呵,看看名字就能

猜到唄)
F5繼續執行,出現未註冊提示,不管按確定透過,進入執行介面,點選右上角彈出選單,選擇軟體註冊,出現

註冊視窗,隨便填寫“9898989898989898”,按下注冊鈕。
被攔住了!Bingo!
攔在如下程式碼:
0041AE6C: 04 FLdRfVar 0065F378h  《-攔在這裡
0041AE6F: 21 FLdPrThis 0047FDC0h
0041AE70: 0F VCallAd frmRegister.txtSoftCode
0041AE73: 19 FStAdFunc
0041AE76: 08 FLdPr
0041AE79: 0D VCallHresult get__ipropTEXTEDIT
0041AE7E: 3E FLdZeroAd
0041AE81: FD Lead2/PopTmpLdAdStr
0041AE85: 0A ImpAdCallFPR4 ModPublic!0041B98Ch
0041AE8A: 2F FFree1Str
0041AE8D: 1A FFree1Ad
0041AE90: 0B ImpAdCallI2 ModPublic!0041B328h  《-如此就從這裡跟進去看看,f8進入
0041AE95: 1C BranchF 0041AEEA ?  《-跳轉判斷句
0041AE98: 1B LitStr: '本軟體正確註冊,請訪問主頁以獲取本軟體的最新情況'  《-上面的語句看不太懂,

但是這一句顯然是好的,如果不是上面的判斷跳走了的話,嗚嗚。
0041AE9B: 0A ImpAdCallFPR4 ModPublic!00419EF4h
0041AEA0: F4 LitI2_Byte: -> FFh 255
0041AEA2: 05 ImpAdLdRf
0041AEA5: 24 NewIfNullPr frmAbout 004052AC
0041AEA8: 0F VCallAd frmAbout.mnuNextScene
進入後,又是一大堆難看的程式碼,我偷懶一直按f12,f8組合,直到下面:
041B3A0: 31 FStStr 0047FD44h to 0065F3D4h
0041B3A3: 6C ILdRf 0047FFC4h  《-請看看0047FFC4h
0041B3A6: 6C ILdRf 0043E3CCh  《-請看看0043E3CCh
0041B3A9: 30 EqStr  《-經典的比較語句
0041B3AB: 1C BranchF 0041B3B6 ?  《-過了這一句就跳回上面的0041AE95的判斷,game over
0041B3AE: F4 LitI2_Byte: -> FFh 255
0041B3B0: 70 FStI2 0065F2E2
0041B3B3: 1E Branch 0041B3BB ?
0041B3B6: F4 LitI2_Byte: -> 0h 0
0041B3B8: 70 FStI2 0065F2E2
0041B3BB: 15 ExitProcI2
看來0041B3A9的比較是關鍵,我就改!可惜,p-code太難懂了,不過難不到,比較一下0041B3A3和0041B3A6的

十六進位制碼,發現一個是6c70ff,一個是6c6cff,那我就把前面中間的70改成了6c,比較就總是拿相同的欄位

比較,當然相同。f5 go!
自然是本軟體正確註冊啦,呵呵。
其實,現在你可以在VBDebug的視窗中看到自己輸入的註冊碼,真正的註冊碼,算出的假程式碼,真正的程式碼四個

字串,比較是在後兩個程式碼之間進行的。
好了,看看偏移量,用16進位制編輯軟體改了,或者使用真正的註冊碼註冊吧。祝你愉快!

希望能當作我加入組織的第一篇破文。謝謝!

相關文章