171005 逆向 IAT匯入位址表

2021-08-09 00:22:20 字數 1161 閱讀 3138

1625-5 王子昂 總結《2023年10月5日》 【連續第370天總結】

a. iat匯入位址表

b. iat,匯入位址表,用來記錄程式正在使用哪些庫中的哪些函式

dll動態鏈結庫,是win特有的系統。

早在dos時代還沒有dll時,只有庫一說。當需要使用庫函式時,編譯器會將庫函式一起插入到應用程式中。

到了win時代,由於gui擁有大量的庫函式來支援環境,這樣插入會造成大量資源浪費(記憶體和磁碟空間),於是引入了動態鏈結庫。

記憶體對映技術使得載入後的dll**、資源在多個程序中實現共享

iatiat提供的機制就與隱式鏈結有關。

當呼叫庫函式時,彙編**實際為call a,而a處的**是jmp b

a是.text節區的記憶體區域(確切說是iat記憶體區域),b就是真正的庫函式位址。

當執行程式時,pe裝載器負責將b的位址寫入a中

不直接將call b的原因一方面是dll的版本不同、b在dll中的位址也相應不同,因此並不固定;另一方面dll重定位功能使得dll不一定裝載入image base位址中

dll重定位:如果a.dll已經裝載入了10000000位址,而b的image base也為10000000,那麼將會自動為b換乙個位址裝載。

image_import_descriptor結構體

結構體中記載了pe檔案要匯入哪些庫檔案。

每個結構體中包含乙個庫檔案的int位址陣列、name陣列和iat位址陣列,以null結束

裝載順序

讀取iid的name成員,獲取庫名稱字串(如「kernel32.dll」)

裝載相應庫,通過loadlibrary(「kernel32.dll」)

3.讀取iid的originalfirstthunk成員,獲取int位址

4.逐一讀取int中陣列的值,獲取相應image_import_by_name位址

5.使用image_import_by_name的hint或name項,獲取相應函式的起始位址,通過getprocadress(「getcurrentthreadld」)

6.讀取iid的firstthunk成員,獲得iat位址

7.將上面獲得的函式位址放入相應的iat陣列值

8.重複4-7步驟,將所有int裝載(以null結束)

c. 明日計畫

eat

WindowsAPI解析IAT位址

include include int main int argc,char ar dword timedatestamp dword forwarderchain dword name dll名稱的rva偏移 dword firstthunk iat真實位址的rva偏移 image import ...

逆向程式設計 入口位址了解

程式在進行入口函式位址執行之前,先將執行下列函式,為程式的執行準備環境。入口函式位址有三個引數,分別為命令列引數個數,命令引數資訊和環境變數資訊,main函式作為啟動三個引數的唯一函式。main函式被呼叫前先要呼叫的函式如下 getversion 獲取當前執行平台的版本號。控制台程式執行在windo...

從outlook匯入email位址

outlook有一種email 位址匹配格式取第乙個 位置無關 於是寫下粗陋程式 private static final string repmail w.w w private static final string repname pattern mailpattern pattern.com...