實現使用加殼的外殼中的子程序的一點見解。。
加殼往往是實現對原PE的節資料加密、壓縮,若能加殼的同時,讓加殼後的程序使用殼中的某些子程序,那加殼強度大大增加。這樣處理後,即使脫掉了殼,程序執行也肯定不正常,因為脫殼的同時也將這些子程序脫掉了!
怎樣實現呢?作為探討性的介紹,還是搞一個最基本的來說(假設現在您已經會寫PE-exe、PE-dll等PE加殼程序): 我的實現是這樣的:作為一個PE文件,多多少少程序中會有mov eax,1或mov eax,0的語句,就是從這裡開刀,因為mov eax,xxxxxxxx這樣的指令長度正好與Call xxxxxxxx指令的長度一樣,處理起來相對簡單。在加殼程序加殼時,搜尋這些語句統統換成: call shellSub // shellSub實現如下: shellSub() { mov eax,1 或 mov eax,0 } 當然,這裡有個問題是怎樣計算這個Call xxxxxxxx的xxxxxxxx,其實想一想也很簡單,加殼時候我們已經計算出了外殼程序的入口RVA,只要以這個RVA為基準,就可以得到:(shellSub的RVA)-(mov eax,1的RVA)的差值,這個差值再減去5(Call的指令長度)就是xxxxxxxx。 這裡僅僅拋磚引玉的介紹了最基本的方法,其實通過變化,可以對原程序的很多特定語句實現改成使用外殼中不同的sub,大大增加了外殼的保密強度。 這樣處理後,可想而知,脫殼後的執行情況:Windows錯誤,某個位址不能為讀或寫。。呵呵,要的就是這個效果!!! 錯誤之處,懇請各位高手指正! Spring.W |
所有時間均為台北時間。現在的時間是 07:44 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *