脫殼經驗(二) 如何優化

2021-09-06 17:06:05 字數 1169 閱讀 7692

pe脫殼後,檔案長度一般會增大,原因有以下幾點:

1、脫殼後,殼的屍體依然存在;

2、脫殼後,重新建立了新的import節、reloc節等;

3、有些加殼程式,將原程式的某些節跟外殼增加的某些節合併後,搬移到了其他位置。

4、脫殼時候,因為採用的是dump記憶體,所以,在記憶體中對齊的pe鏡象一般也會大於原始的pe檔案,各個節的dump實際尺寸也會較原始pe檔案的實際尺寸大。

解決方案:

(1) 脫殼後,將各個有效的節分別轉存到臨時檔案中。如:將「.text節,單獨轉存到乙個text_tem.bin中」,其它節也是同樣暫存到各個檔案中,沒有用的節(如殼屍體),拋棄掉。

(2) 首先將text_tmp.bin等節中沒有用的多餘部分去掉,一般是最後對齊的記憶體鏡象的多餘部分。可以通過2進製編輯器,檢視最後部分,一般是全00的部分。

(3) 對應有多少個有效section,重新構造pe頭,盡量做到最小。

(4) 重新構造pe:將新的pe頭、.text、.import、.export、.data、..reloc等一次連線起來到乙個新的pe檔案。如果為了盡量 縮小pe尺寸,連線前還可以考慮將某些節合併成乙個節(如:將.data,.import,.export,.reloc等合併到乙個節中)。

(5) 按照pe格式,調整新的pe檔案。這個過程比較複雜,包括:

1、按照新的pe頭中節的隊齊要求對齊各個節的起始rva

2、對於各個節中rva相關的地方,根據新的pe頭重新計算並調整。如

資源節中的各個rva,reloc中對應的重定位項,import和export中

的某些位址指標等。

3、按照檔案對齊要求對齊新的pe檔案。

(6) 測試新的pe,如果有錯誤,通過跟蹤除錯,重新執行第(5)步驟,直到正常執行。

對於(5)中調整相關的rva,可以通過寫乙個工具完成,如計算調整資源節、reloc節等,如果調整的比較好,新的pe一般跟原來的幾乎一樣,甚至會更 小。我曾經作過一些調整工具,可以將:資源節、reloc節等自動調整,並可以搬移到新的pe的任何可用的節空餘部分,這些工具寫起來很簡單,可以根據需 要自行編寫,同時通過編寫這些工具,可以大大增加對pe格式的認識。需要說明的是:大部分表(節)的起始位址一般要求雙字邊界的位址(即起始位址為4的整 數倍,如0x634b4有效,0x634b1-0x634b3無效),如資源表、reloc表等。其他沒有什麼可注意的,只要細心就完全可以做到。

專案效能優化經驗 ZY(二)

1.hibernate 級聯問題 專案中,用了很多的lazy級聯,在頁面用到的時候再去load,這樣就使用open session in view的功能,在大併發且網路不好的情況下,會導致session遲遲不能釋放 session要等頁面request請求完全結束之後才close 即connecti...

如何用od去手動脫殼

1.常用的pushad popad 2.有call的話,注意跳call 脫殼成功的標誌就是出現 55 push ebp od要帶有外掛程式,olldump 1.脫殼是在55 2.如何脫殼,讓程式一直走,一直想前,不要後退 3.然後使用外掛程式儲存olldump 4.脫殼後儲存的檔案,看看可以修復不,...

如何用od去手動脫殼

1.常用的pushad popad 2.有call的話,注意跳call 脫殼成功的標誌就是出現 55 push ebp od要帶有外掛程式,olldump 1.脫殼是在55 2.如何脫殼,讓程式一直走,一直想前,不要後退 3.然後使用外掛程式儲存olldump 4.脫殼後儲存的檔案,看看可以修復不,...