抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

IAT Hook

  • IMAGE_IMPORT_DESCRIPTOR中两个IMAGE_THUNK_DATA结构体,第一个位导入名称表(INT),第二个位导入地址表(IAT)。两个结构在磁盘文件中时是没有差别的,但是当PE文件被装载到内存中后,FirstThunk字段指向的IMAGE_THUNK_DATA的值会被Windows进行填充。该值为一个RVA,该RVA加上映像基址后,虚拟地址就保存了真正的导入函数的入口地址
  • IAT Hook步骤
    1. 获取欲Hook的函数地址
    2. 找到该函数的所保存的IAT地址
    3. 把IAT中该函数的地址修改为Hook函数的地址

Inline Hook(内联钩子注入)流程

  1. 构造跳转指令[JMP后的偏移量 = 目标地址 - 原地址 - jcc的指令长度]
  2. 在内存中找到欲HOOK函数地址,并保存欲HOOK位置处的前5个字节
  3. 将构造的跳转指令写入需HOOK的位置处
  4. 当被HOOK位置被执行时会转到自己的流程执行
  5. 如果要执行原来的流程,取消HOOK,还原被修改的字节
  6. 执行原来的流程
  7. 继续HOOK住原来的位置