IAT钩取工作原理
进程的IAT中保存着程序中调用的API地址。IAT钩取通过修改IAT中保存的API地址来钩取某个API。
图中为计算器(calc.exe)进程正常调用user32.SetWindowTextW() API的情形。地址01001110属于IAT区域,程序开始运行时,PE装载器会将user32.SetWindowTextW() API地址(77D0960E)记录到该地址(01001110)。01002628地址处的CALL DWORD PTR [01001110]指令最终会调用保存在01001110地址处的函数,直接等同于CALL 77D0960E命令。
执行地址01002628处的CALL命令后,运行将转移到user32.SetWindowTextW()函数的起始地址(77D0960E)处,函数执行完毕后返回。图为IAT被钩取后计算器进程的运行过程。
钩取IAT前,首先向计算器进程(calc.exe)注入hookiat.dll文件。