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...