IAT表

A、初识IAT

    B、IAT表相关结构

    C、读出IAT项

    D、编写代码测试分析  

    E、HOOK IAT

    F、测试分析

A、认识IAT表 导入函数表

B、IAT表相关结构

PIMAGE_DOS_HEADER

//->e_lfanew //PE文件头偏移值

PIMAGE_NT_HEADERS //->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress

PIMAGE_IMPORT_DESCRIPTOR

//.FirstThunk //IAT偏移

PIMAGE_THUNK_DATA

// u1.Function

//文件名 IAT.H

#include <windows.h>

VOID __stdcall mySleep(DWORD m)

{

    MessageBoxA(0,"Hook 成功","IAT hook",MB_OK);

}

PVOID EnumAPI() 

PBYTE ImageBase;

PIMAGE_THUNK_DATA r;  

PIMAGE_NT_HEADERS pNtHeader;  

PIMAGE_IMPORT_DESCRIPTOR pImport;  

//取得DOS头基址

ImageBase=(PBYTE)GetModuleHandle(NULL);//0x400000

//PE头=ImageBase+[ImageBase+3c]

pNtHeader = (PIMAGE_NT_HEADERS) (ImageBase + ((PIMAGE_DOS_HEADER) ImageBase)->e_lfanew);  

//IMAGE_DIRECTORY_ENTRY_IMPORT值为1 表示import tabale

pImport = (PIMAGE_IMPORT_DESCRIPTOR)

(ImageBase + pNtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);  

 遍历整个 输入表

for (; pImport->Name; pImport++)  

{     

     printf("导入模块:%s\n",ImageBase+pImport->Name);  

       //遍历IAT信息  PIMAGE_THUNK_DATA基址

        for (r = (PIMAGE_THUNK_DATA) (ImageBase + pImport->FirstThunk); r->u1.Function; r++)   //枚举函数地址

        {  if (Sleep==(PVOID)r->u1.Function)

        {   DWORD pSleep=(DWORD)(&r->u1.Function);

            __asm

            {

                    mov ebx,pSleep /// mov ebx,0x42A190

                    lea eax,mySleep

                    mov [ebx],eax      

        }

        }

            printf("Function=%x \n", &(r->u1.Function));          

        }  

}  

return NULL;  

}  

int main(int argc, char* argv[])  

{   //MessageBoxA(0,NULL,NULL,MB_OK) ;

    //MessageBoxW(0,NULL,NULL,MB_OK);

    EnumAPI();

    Sleep(111);

    return 0;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值