作業系統環境:Windows XP Pro 32bit 版本2002 SP3
使用工具:Immunity Debugger ,用OllyDbg也可以,(這邊我自己是使用別人改良過的簡體中文化Immunity )
查殼工具:PEID、 (用來偵測程式有沒有被加殼)
脫殼工具:LordPE
輸入表重建工具:ImportREC
要破解的軟體:灰鴿子木馬專殺工具 下載點,壓縮密碼lonelysec
(下載的練習程式不保證是安全無毒的,所以建議都下載安裝在虛擬機上。如載點失效,請私訊波波粉專)
這集是分享一個思路,程式有自校驗,如果想要脫殼的話怎麼辦?
因為這個程式有"自校驗","自校驗"就是他程式本身會去驗證自己的程式大小,比如有沒有被別人破解、被別人脫殼或是被別人更改過,會去比對像是檔案大小之類的,如果異常就無法開啟。
這集會接觸到ESP定律、脫殼、自校驗、OEP、ja、cmp指令。
首先先用PEID查看程式有沒有加殼,這邊可以查看到程式被加殼了,但沒關係,被加殼的程式很常見。
網路上有很多直接脫殼的方法,這邊就不一一介紹了。
首先用Immunity Debugger 打開程式,按F8往下可以在004252F1地址右邊的寄存器位址觀察到ESP呈現紅字
這邊主要會用到ESP定律,不懂ESP定律的可以Google一下,或是看看就好,反正第一次提到,以後也會再提。
我們這邊會使用脫殼工具:LordPE來脫殼,但在進行前我們要先透過ESP定律找到OEP
這邊我們右鍵 選擇 HW break[ESP]
然後選擇調試-->硬件斷點
選擇 刪除。
接下來我們 F8。
因為程式被加殼,所以畫面會像這樣。這邊我們一樣用前面幾集教的,從模塊中刪除。
這邊我們右鍵 選擇用OD脫殼調試進程。
可以觀察到入口點地址 252F0 --> 修正為 7797。
這邊可以直接點擊脫殼。不過這邊我們介紹另一種方法來脫殼。
我們先記住入口點地址 7797這個位址。
接下來用脫殼工具:LordPE,然後選擇灰鴿子查殺程式
我們選擇灰鴿子程式,右鍵-修正鏡像大小,接著右鍵,點擊完整轉存(完全脫殼),就脫殼完畢了。
接下來透過輸入表重建工具:ImportREC選擇灰鴿子查殺工具
在左下方OEP位址我們輸入剛才的7797,然後點擊自動搜索。
接下來選擇 獲取導入表,選擇剛才LordPE脫殼後的程式。
這邊保存了一個新的dumped_.exe程式。
這個程式是脫殼後的,但是可以發現點擊"打開",程式是跑不出來的。
因為這個程式有"自校驗","自校驗"就是他程式本身會去驗證自己的程式大小,比如有沒有被別人破解、被別人脫殼或是被別人更改過,會去比對像是檔案大小之類的,如果異常就無法開啟。
所以我們透過Immunity Debugger打開這個dumped_.exe程式。
然後透過API斷點插件設定GetFileSize(取文件大小)
設置完成後,我們F9執行程式,可以觀察右下角。
我們右鍵-->反彙編窗口跟隨,跟進去看看。
可以觀察到00401346地址這邊就是入口點,我們在這邊先下一個斷點,然後點擊右上方的"B"
這邊我們將一開始下的斷點刪除,因為已經沒用了,現在我們找到新的00401346地址斷點了
設定好後,我們重啟程式。
這邊可以觀察到0040134C地址 cmp eax,0xC6C8
cmp指令就是對操作數之間運算比較的意思。
也就是比對程式的檔案大小是否是 0xC6C8大小。
0xC6C8 16進位 轉 10進位 就是 50,888,而原程式的大小差不多是50,769,有一點小小差異,但其實是一樣的,可能是16進位轉10進位上有些小誤差。
可以看到00401351地址這邊有個ja的判斷式,可以推論就是上面的0040134C地址 cmp eax,0xC6C8去判斷檔案大小,如果檔案大小不正確,就會進行ja的判斷。
所以為了避免他去判斷,我們可以直接將ja進行nop (前面幾集的教學)
設定好nop後,我們就把他選起來,然後保存。
保存後,就可以開啟程式了。