資源描述:
《iat表和導(dǎo)入表之間的關(guān)聯(lián)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、IAT表和導(dǎo)入表之間的關(guān)聯(lián)一、前言前幾天研究PE結(jié)構(gòu)也隨心發(fā)了點心得,給大家分享,真沒想到能被精華對待!所以,一直以來都想再發(fā)點經(jīng)典的,支持一下看雪,可是就是找不到藍本!今天,剛研究到的發(fā)出來和大家分享一下!二、導(dǎo)入表知道現(xiàn)在很多文章都說過這個玩意了。就花幾分鐘看看我寫的,或許,還真和別人說的不一樣了。先不說別的拿工具看一下什么樣的是導(dǎo)入表,我們主要用PNHookApi1.00.05新版本的已經(jīng)支持很多PE類的信息了,沒有的,可以去下載區(qū)下,或者拿LoadPE就好了,隨便拿VC做了個WIN32的程序來研究。如圖:??????????我們看到上面
2、是導(dǎo)入模塊,下面是導(dǎo)入函數(shù)信息,實際猛一看,大家都清楚,可是我想問大家那些東西都是怎么來的嗎?沒幾個人知道了吧!我就來解釋一下。我先整體了解導(dǎo)入表,能證明導(dǎo)入表特征的那就算是它的結(jié)構(gòu)了。//------------------------------------------------------------------------------------------在winnt.h中我找到了它的結(jié)構(gòu):typedef?struct?_IMAGE_IMPORT_DESCRIPTOR?{????union?{????????DWORD???Char
3、acteristics;????????????//?0?for?terminating?null?import?descriptor導(dǎo)入描述符始終為NULL????????DWORD???OriginalFirstThunk;?????????//?RVA?to?original?unbound?IAT?(PIMAGE_THUNK_DATA)這里后面專門解釋????};????DWORD???TimeDateStamp;??????????????????//?0?if?not?bound,?時間日期戳????????????????????
4、????????????????????????//?-1?if?bound,?and?real?datetime?stamp????????????????????????????????????????????//?????in?IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT?(new?BIND)????????????????????????????????????????????//?O.W.?date/time?stamp?of?DLL?bound?to?(Old?BIND)????DWORD???Forwar
5、derChain;?????????????????//?-1?if?no?forwarders多為0????DWORD???Name;???????????????????????????//后面說明????DWORD???FirstThunk;?????????????????????//?RVA?to?IAT?(if?bound?this?IAT?has?actual?addresses)后面說明}?IMAGE_IMPORT_DESCRIPTOR;typedef?IMAGE_IMPORT_DESCRIPTOR?UNALIGNED?*PIM
6、AGE_IMPORT_DESCRIPTOR;從結(jié)構(gòu)來看我們聲明的類型為:_IMAGE_IMPORT_DESCRIPTOR???IMAGE_IMPORT_DESCRIPTOR*PIMAGE_IMPORT_DESCRIPTOR??//這個和前面不一樣它表示的是這個結(jié)構(gòu)的指針,前面兩個都是結(jié)構(gòu)類型//------------------------------------------------------------------------------------------------我們順著往下看,第一個當(dāng)然是:OriginalFirstThu
7、nk,我特意沒把英文翻譯過來是希望大家先有個概念!導(dǎo)入表和IAT表是有很大關(guān)系的。?????先把前面的內(nèi)容PUSH保存,等會用著了再POP吧!我先研究一下導(dǎo)入表的16進制。?????先最簡單的,我們拿WINHEX來打開前面做的程序看吧!我們先可以讓LoadPE或PNHookApi查看一下導(dǎo)入表的地址,我這里是0002A000,長度是0000003C,我們看到的這個地址是RVA,需要轉(zhuǎn)換后才能到真正的導(dǎo)入表虛擬地址或物理地址,我們?nèi)鐖D(不加圖說不清楚了:()??????圖中表示了我們對應(yīng)的地址為00028000,我們要找的正好是整數(shù),也是區(qū)段開頭
8、不用換算的,如果不是的話那就可憐點需要換算了。至于換算我以前的貼里已經(jīng)說了一下,并放出了轉(zhuǎn)換函數(shù)大家也不用發(fā)愁,拿去用就是了:)。00028000正好