本次脫殼的測試對象是CodeLib 2 V14.9.2468.42911 更新日期是2006-10-5 目前的最新版本。
運作脫機程式到如下界面:
選中清單中的第二項,codelib.exe,選擇一個儲存路徑,點選dump按鈕,即可完成脫殼。
脫殼完的程式儲存到codedump.exe。
注意這個檔案是直接dump脫殼的結果,不能直接運作。
使用ildasm 反編譯,然後打開il檔案
查找 IL_0000: call void InFaceMaxtoCode::Startup()
替換為 //IL_0000: call void InFaceMaxtoCode::Startup()
即取消對 maxtocode 運作庫的引用。
然後運作 ilasm 編譯成exe檔案。
放在codelib的安裝目錄中即可正常運作了。
對 codelib注冊算法有興趣的可以下載下傳回去研究研究。
注意:先重命名安裝目錄中的codelib.exe,然後解壓縮放進去就可以運作了。
這個程式裡面還有很多anti,不過都不重要了,可以通過直接修改il來去掉anti。
脫殼機暫時不準備公開,DRT小組内部共享。
這次先簡單介紹一下原理,下次有機會再詳細介紹一下如何實作通用的記憶體程式集dumper。
這個dumper首先按照 pe dumper的原理,從記憶體裡面dump出pe檔案。
然後在在pe檔案中增加一個隻讀的鍛。用來放dump出來的il碼。
通過前面幾篇文章介紹的方法,利用net 2.0的新特性取道方法的methodbody,
然後重建header,datatable,将結果存入新鍛中,再修改相應method的rva指向新的header。
對所有的方法都這樣處理一遍,即可完成dump。
這種方式對壓縮殼,加密殼都有效。