前邊,我們的例子中既有VC++開發的程序,也有Delphi開發的程序,今天我們給大家分析一個VB程序的加密和解密思路。
Virtual BASIC是由早期DOS時代的BASIC語言發展而來的可視化編程語言。
VB是由事件驅動的編程語言:就是在可視化編程環境下我們可以繪制一些窗體,按鈕,編輯框等控件,然后為這些控件所可能引發的事件如按鈕被單擊或者被雙擊編寫對應的處理代碼。
所有的VB程序幾乎都是依賴於一個外部的動態鏈接庫。這個動態鏈接庫的名字是:MSVBVM60.dll(可能有多個版本,但名字都差不多~) 然而正是因為VB中所有的API函數都在DLL中去實現,所以導致我們在跟蹤程序的執行代碼時灰常頻繁地在DLL領空和程序領空跳來跳去。。。 API函數的作用有很多,例如作為中介讓我們的程序和指定設備進行溝通。
試驗軟件:PC 2 Answering Machine Pro
用查殼工具PEID查看后,信息如下圖:
顯示出了該軟件的編寫語言是Virtual BASIC。
Virtual BASIC編寫的軟件用OD調試時,由於VB的一些特性,會很麻煩。但是也會有捷徑可尋,如下。
VB破解的關鍵:
針對變量: __vbaVarTstEq __vbaVarTstNe __vbaVarCompEq __vbaVarCompLe __vbaVarCompLt __vbaVarCompGe __vbaVarCompGt __vbaVarCompNe
針對字符串: __vbaStrCmp __vbaStrComp __vbaStrCompVar __vbaStrLike __vbaStrTextComp __vbaStrTextLike
(加黑的是比較常見的)
在OD中針對以上API函數去跟蹤分析,找到程序是否正在匹配、比較驗證碼之類的東西,會便捷不少,省去不必要的麻煩。
第一次安裝此軟件時,它會通過分析本機網卡的mac地址,或者硬盤的編號生成一個獨一無二的key,將其保存在系統里,那么我們就可以通過上面的函數來找到key。