軟體加殼輸入表處理 解析

2021-06-18 05:21:22 字數 1979 閱讀 1410

本篇博文說下pe檔案中輸入表的格式和具體的使用,以及在軟體加殼中的注意事項(本人菜鳥),高手飄過

image_import_descriptor struc

union

characteristics dword

originalfirstthunk  dword

ends

timedatestamp dword

forwardchain  dword

name dword //指向輸入dll的檔名稱

firstthunk   dword

這裡我們只說明originalfirstthunk和firstthunk兩個比較重要的項,這兩者的相同之處在於指向同一種資料結構

image_thunk_data struc

union u1

forwarderstring  dword

function                dword

ordinal                   dword

addressofdata    dword

ends

originalfirstthunk指向的image_thunk_data中addressofdata是具有用處的,(雖然image_thunk_data在乙個時間內只有乙個是有作用的但為了便於理解)

並且addressofdata指向的是另一種資料結構

image_import_by_name

,這兩項都有作用,hint表示的是本函式在其所駐留dll的輸出函式的序號,name則是指向了,輸入函式的名稱(其實在程式中序號要比名稱更為方便,但是不便於理解)

由originalfirstthunk指向的image_import_by_name是單獨的一項,不可改寫,但是由firstthunk指向的image_thunk_data卻是可以改寫的

他們是這樣使用的pe裝載器首先查詢originalfirstthunk,如果他不為空,則引導程式,迭代搜尋陣列中的每個指標,找到每個image_import_by_name,利用loadlibrary和

getprocess獲取函式真正的入口位址,放在由firstthunk指向的image_thunk_data中的function元素中即可

有些情況下函式是不能用函式名來呼叫的,只能使用函式序號,這時候image_thunk_data的低位指示函式序號(因為在dll中輸出函式序號陣列元素是以字為單位的)

另外一種情況:程式的originalfirstthunk是0,在初始化時,則使用firstthunk當做originalfirstthunk來使用,獲得函式位址時,將函式的位址裝入image_thunk_data指

向的function即可

ps:綜上所述,函式位址都被填入了firstthunk指向的image_thunk_data指向的function元素。這樣我們在給軟體加殼時,將動態獲取的函式位址的存放地便都清楚了,現

在只有乙個問題,如何獲得所有的輸入函式的個數?

1.可首先檢測originalfirstthunk是否為0,

如果是0,則使用firstthunk代替originalfirstthunk獲得image_thunk_data,

如果不是0,則使用originalfirstthunk獲得image_thunk_data

2.現在已經獲得了image_thunk_data的rva,檢測輸入表函式是根據函式名還是根據函式序號

使用image_snap_by_ordinal32(pfirstthunk->u1.ordinal)來確定是否使用了函式序號

在清除輸入表時我們一般會

1.先擦除image_import_descriptor指向的name,即dll名稱字串

2.在查詢每個dll中使用的輸入函式時,會擦除image_thunk_data指向的addressofdata

並且擦除image_import_by_name的整個資料結構

3.在外層迴圈,利用查詢dll載入項的指標,最後擦除image_import_descriptor

軟體的殼和殼的含義 概念以及加殼和脫殼方法

pe portable executable 也就是exe和dl 檔案所具有的起壓縮 加密 保護作用的東西。可以用peid等軟體查殼。加殼通過修改程式入口點等壓縮 加密 保護exe和dl.在自然界中,我想大家對殼這東西應該都不會陌生了,由上述故事,我們也可見一斑。自然界中植物用它來保護種子,動物用它...

upx加殼原理

upx的功能有兩種描述。一種叫做給程式加殼,另一種叫壓縮程式。其實這兩種表述都是正確的,只是從不同的 角度 對upx的描述。upx的工作原理其實是這樣的 首先將程式壓縮。所謂的壓縮包括兩方面,一方面在程式的開頭或者其他合適的 地方 插入一段 另一方面是將程式的其他地方做壓縮。壓縮也可以叫做加密,因為...

什麼是App加殼,以及App加殼的利與弊

一 什麼是加殼?加殼是在二進位制的程式中植入一段 在執行的時候優先取得程式的控制權,做一些額外的工作。大多數病毒就是基於此原理。是應用加固的一種手法對原始二進位制原文進行加密 隱藏 混淆。加殼的程式可以有效阻止對程式的反彙編分析,以達到它不可告人的目的。這種技術也常用來保護軟體版權,防止被軟體破解。...