|
論壇說明 | 標記討論區已讀 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2003-12-12, 01:33 PM | #1 |
榮譽會員
|
實現使用加殼的外殼中的子程序的一點見解。。
加殼往往是實現對原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 |
送花文章: 3,
|