1. 程式人生 > >《WINDOWSPE權威指南》學習筆記(一)-U盤監控器的破解

《WINDOWSPE權威指南》學習筆記(一)-U盤監控器的破解

寫部落格就是寫總結,總結往往受主觀限制,受限制就容易犯錯誤,犯了錯誤歡迎批評指正。
學習的教材是《Windows PE權威指南》(戚利)(機械工業出版社)(2010年10月第一版),一下簡稱《PE》
一、什麼是Windows PE
說實話,學完第一章還不太明白Windows PE到底是個啥,自己理解它是一種有格式的32位的可執行檔案。有幾個問題不太明白: 1、16位機有沒有PE,或者類似的東西? 2、利用匯編編寫的PE檔案和C/C++編寫的有什麼區別麼? 這些問題,只能以後再解答了……
二、U盤監控器的破解
為什麼要學Windows PE呢,是因為要學逆向……組合語言也是要求的,之前粗略了學習了一遍ASM,教材用的是《組合語言-第二版》(王爽)(我發現有第三版的時候第二版已經看完了ORZ);當然,學習逆向還得學一些軟體,《PE》第一章介紹了三個,Ollydbg,FlexHex,w32dasm。 不過,話又說回來,U盤監控器的破解跟PE貌似沒啥關係,書中也說做這個破解是為了熟悉軟體…… U盤監控器軟體用的是書後光碟中的軟體,檔案的名字叫USB監控器。軟體開啟後,右下角有一個註冊按鈕,單擊後彈出對話方塊提示輸入註冊碼(同時還會彈出一個網頁),破解的目的就是,輸入任意的註冊碼,都能註冊成功。 破解的步驟是這樣的: 1、獲取關鍵字串資訊 2、分析彙編指令 3、修改彙編指令 1、獲取關鍵字串資訊
當我們隨意輸入註冊碼的時候,會彈出“註冊失敗”對話方塊,當然一不小心輸入正確了,它就彈出“註冊成功”,這兩個字串就是關鍵字串,它們都是常量,程式執行時被載入到記憶體中,如果我們找到他們在記憶體中的位置,就能找到呼叫這個字串命令的位置,就能找到相應的程式碼,修改程式碼就可以破解了。 字串在記憶體中的位置:用FlexHex開啟"USB監控器.exe",可以得到該可執行檔案的ASCII(ANSI)碼資訊,查詢到“註冊失敗”,發現它的偏移地址是:0x00081A79,當然,我們發現了一串很像註冊碼的東西,ASDA-GDFWT-FHRR-BJNR,經測試,這確實是註冊碼……咳咳,繼續破解
在彙編中,實體地址=段地址+偏移地址,我們可以通過Ollydbg裝在該檔案,找到記憶體中儲存“註冊失敗”的實體地址。在FlexHex中查詢到6E 0A 00 00,得偏移地址為0x00112800,在Ollydbg中HEX資料處搜尋它,得記憶體地址為0x00512800,可推知0x00081A79的記憶體地址為0x00481A79。 則引用字串指標的內容為0x00481A79,在Ollydbg查詢這個常量,得指令所在記憶體地址為0x00405D2D(以上步驟在Ollydbg中都可實現)
2、分析彙編指令
這個壓棧操作,應該是MessageBox函式實現的一部分,可以想象,有一條判斷語句,判斷真,執行MessageBox“註冊成功”,判斷假,執行MessageBox“註冊失敗”,我們只要找到呼叫這個壓棧操作的命令就行了。 我們利用w32dasm對“USB監控器.exe”進行靜態分析,查詢0x00405D2D,得如下資訊:
呼叫0x00405D2D的指令所在記憶體地址為0x00405CD2,找到這條指令,得 發現,它對應的語句是個大於則跳轉語句,如果改成小於則跳轉,那麼輸入一個錯誤的驗證碼,程式就可以執行下面的語句,執行顯示“註冊成功”了。
3、修改彙編指令
在Ollydbg中找到0x00405CD2,把jg改成jl,並勾選用nop填充。 修改後:
儲存修改:右鍵,複製到可執行檔案->全部修改,開啟檢視可執行檔案視窗,右鍵,儲存檔案即可。 重新測試新檔案發現已破解。