您的位置:首页 > 其它

检测IAT HOOK----进程内存中的IAT

2008-06-01 09:41 337 查看
检测IAT HOOK----进程内存中的IAT
昨天写的是磁盘的IAT.现在是内存的IAT.接着进行比较就可以得到IAT HOOK了
用OpenProcess和ReadProcessMemory读取你想读的进程..然后按照PE文件格式来解释读到的数据,lpBase就是读到数据缓冲区的地址

dosHeader=(IMAGE_DOS_HEADER*)lpBase;
if (dosHeader->e_magic!=IMAGE_DOS_SIGNATURE)
{
printf("This is not a windows file/n");
return;
}

ntHeader=(IMAGE_NT_HEADERS*)((BYTE*)lpBase+dosHeader->e_lfanew);
if(ntHeader->Signature!=IMAGE_NT_SIGNATURE)
{
printf("This is not a win32 file/n");
return;
}

IMAGE_IMPORT_DESCRIPTOR * pImportDesc=(IMAGE_IMPORT_DESCRIPTOR*)((BYTE*)lpBase+ntHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);

while (pImportDesc->FirstThunk)
{

IMAGE_THUNK_DATA* thunk = (IMAGE_THUNK_DATA*)( (BYTE*)lpBase + pImportDesc->OriginalFirstThunk);
IMAGE_THUNK_DATA* pThunk= (PIMAGE_THUNK_DATA32)((PBYTE)lpBase+pImportDesc->FirstThunk) ;

while(thunk->u1.Function)
{

isOrdinal = 0;
if(thunk->u1.Function >= 0x01000000) isOrdinal = TRUE;
if(!isOrdinal) // 以名字到处而不是序号
{
char* functionName = (char*)( (BYTE*)lpBase + (DWORD)thunk->u1.AddressOfData + 2 );
printf("%x %s/n",pThunk->u1.Function,functionName);

}
if(isOrdinal)
{

}

pThunk++;
thunk++;

}

pImportDesc++;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: