資源描述:
《找telock加殼的importtable的方法》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、找TELock加殼的ImportTable的方法~教育資源庫 目的:在內存中將FlashFXP未被破壞的IT完整地提取出來(至于找TELock的OEP、修復的方法等,zombieys、hying、liotta已經講得很詳細了) 第一步:找到IT的位置 找IT自然要依賴于IT的結構特征。IT是個數組,數組中的每個元素是如下的一個結構(#include<inatingnullimportdescriptorDAGE_THUNK_DATA)};DAGE_DIRECTORY_ENTRY_BOUND_IMPORT(neestampofDLLboundto(Ol
2、dBIND)DAGE_IMPORT_DESCRIPTOR; PELoader/unpacker在加載DLL時,過程大致如下: 1、先根據Name用LoadLibraryA加載一個DLL; 2、根據FirstThunk找到IMAGE_IMPORT_BY_NAME數組,用GetProcAddress取得該DLL中的相應函數的地址填入IAT。FirstThunk就是指向IAT。typedefstruct_IMAGE_IMPORT_BY_NAME{AGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME; 找IT的位置的過程和上面的過程
3、有些相反。利用調試器設bpxLoadLibraryA、bpxGetProcAddress斷點,我們能夠直接得到的條件是DLL文件名字符串及該串的內存地址、每個函數的Hint和函數名的內存地址、IAT的位置(即GetProcAddress的返回值所要寫入的位置),這樣就至少有3條途徑可以找到IT的位置,一是根據DLLName(在看雪教學中已有詳細描述),第二條途徑是根據Hint和函數名的地址,第三條則是根據IAT的位置,這3條途徑用的是同一種方法(這是找IT的一種通用方法,并不限于TELock加的殼)?! ?、用BPMBLoadLibraryAXDOd*(esp+
4、4)設斷點,看見加載oleaut32.dll:0023:00533DBC61656C6F323374756C6C642E00000000oleaut32.dll....0023:00533DCC6972615643746E61676E616870795465VariantChangeTyp0023:00533DDC00784565615600006E616972706F4374eEx...VariantCop0023:00533DEC646E4979000000006972615643746E61yInd....VariantC0023:00533DFC7261
5、656C00000000537379536E697274lear....SysStrin0023:00533E0C6E654C67000000004673795353656572gLen....SysFreeS0023:00533E1C6E69727400000067527379536C6C4165tring...SysReAll0023:00533E2C7453636F676E6972006E654C79530000ocStringLen...Sy 2、先嘗試第一條途徑。字符串oleaut32.dll的RVA為00133DBC,于是在內存中搜索這個RVA,希
6、望能夠找到存放有該RVA值的某個 IMAGE_IMPORT_DESCRIPTOR結構,也就等于是找到了IT。:scs:400000l178000bc,3d,13,00Patternnotfound 沒有找到。因為TELock已經把相應位置上的值清0了。(實際上也可以用下一個DLL的文件名來進行搜索,因為TELock此時尚未處理下一個DLL, 它不可能提前把下一個DLL的IMAGE_IMPORT_DESCRIPTOR結構清掉。) 3、再嘗試第2條途徑。注意到第一個函數VariantChangeTypeEx的Hint的地址是00533DCA,于是搜索RVA值
7、00133DCA,希望能夠找到FirstThunk 所指向的那個數組(其實該數組也就是IAT),進而再找到FirstThunk的位置。:scs:400000l178000ca,3d,13,00Patternfoundat001B:0053328C(0013328C) 找到之后看一下IAT。由于此時還未把GetProcAddress的返回值寫入IAT,所以此時IAT中存放的都是指向IMAGE_IMPORT_BY_NAME的指針(RVA)::dd53328c001B:0053328C00133DCA00133DE000133DF200133E02.=...=..
8、.=...>..0