快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

金沙娱城手机版58588_集报网



目的:在内存中将FlashFXP未被破坏的IT完备地提掏出来(至于找TELock的OEP、修复的措施等,zombieys、hying、liotta已经讲得很具体了)

第一步:找到IT的位置

找IT自然要依附于IT的布局特性金沙娱城手机版58588。IT是个数组,数组中的每个元素是如下的一个布局(#include ),对应着引入的一个DLL:

typedef struct _IMA金沙娱城手机版58588GE_IMPORT_DESCRIPTOR {

union {

DWORD Characteristics; // 0 for terminating null import descriptor

DWORD OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA)

};

DWORD TimeDateStamp; // 0 if not bound,

// -1 if bound, and re金沙娱城手机版58588al date ime stamp

// in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)

// O.W. date/time stamp of DLL bound to (Old BIND)

DWORD ForwarderChain; // -1 if no forwarders

DWORD Name; //DLL name

DWORD FirstThunk; // RVA to IAT (if bound this IAT has actual addresses)

} IMAGE_IMPORT_DESCRIPTOR;

PE Loader/unpacker在加载DLL时,历程大年夜致如下:

1、先根据Name用LoadLibraryA加载一个DLL;

2、根据FirstThunk找到IMAGE_IMPORT_BY_NAME数组,用GetProcAddress取得该DLL中的响应函数的地址填入IAT。FirstThunk便是指向IAT。

typedef struct _IMAGE_IMPORT_BY_NAME {

WORD Hint;

BYTE Name[1];

} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_金沙娱城手机版58588BY_NAME;

找IT的位置的历程和上面的历程有些相反。使用调试器设bpx LoadLibraryA、bpx GetProcAddress断点,我们能够直接获得的前提是DLL文件名字符串及该串的内存地址、每个函数的Hint和函数名的内存地址、IAT的位置(即GetProcAddress的返回值所要写入的位置),这样就至少有3条道路可以找到IT的位置,一是根据DLL Name(在看雪教授教化中已有具体描述),第二条道路是根据Hint和函数名的地址,第三条文是根据IAT的位置,这3条道路用的是同一种措施(这是找IT的一种通用措施,并不限于TELock加的壳)。

1、用BPMB LoadLibraryA X DO "d *(esp+4)"设断点,望见加载oleaut32.dll:

0023:00533DBC 61656C6F 32337475 6C6C642E 00000000 oleaut32.dll....

0023:00533DCC 69726156 43746E61 676E6168 70795465 VariantChangeTyp

0023:00533DDC 00784565 61560000 6E616972 706F4374 eEx...VariantCop

0023:00533DEC 646E4979 00000000 69726156 43746E61 yInd....VariantC

0023:00533DFC 7261656C 00000000 53737953 6E697274 lear....SysStrin

0023:00533E0C 6E654C67 00000000 46737953 53656572 gLen....SysFreeS

0023:00533E1C 6E697274 00000067 52737953 6C6C4165 tring...SysReAll

0023:00533E2C 7453636F 676E6972 006E654C 79530000 ocStringLen...Sy

2、先考试测验第一条道路。字符串"oleaut32.dll"的RVA为00133DBC,于是在内存中搜索这个RVA,盼望能够找到寄放有该RVA值的某个

IMA金沙娱城手机版58588GE_IMPORT_DESCRIPTOR布局,也就即是是找到了IT。

:s cs:400000 l 178000 bc,3d,13,00

Pattern not found

没有找到。由于TELock已经把响应位置上的值清0了。(实际上也可以用下一个DLL的文件名来进行搜索,由于TELock此时尚未处置惩罚下一个DLL,

它弗成能提前把下一个DLL的IMAGE_IMPORT_DESCRIPTOR布局清掉落。)

3、再考试测验第2条道路。留意到第一个函数VariantChangeTypeEx的Hint的地址是00533DCA,于是搜索RVA值00133DCA,盼望能够找到FirstThunk

所指向的那个数组(着实该数组也便是IAT),进而再找到FirstThunk的位置。

:s cs:400000 l 178000 ca,3d,13,00

Pattern found at 001B:0053328C (0013328C)

找到之后看一下IAT。因为此时还未把GetProcAddress的返回值写入IAT,以是此时IAT中寄放的都是指向IMAGE_IMPORT_BY_NAME的指针(RVA) :

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: