Windows Hook


HOOK真的是非常有意思的一种技术

能够掌握程序逻辑执行顺序的权利

在这里记录一下HOOK的学习

0x00 概述

HOOK两个目的

  • 窃听

    提取程序中一些关键的中间值

  • 改变行为

0x01 HOOK原理

I. API HOOK

从API下手 想办法转到我们的代码

  • IAT Hook
  • Inline Hook

1. IAT Hook

Ring0/Ring3通用

原理就是修改IAT表内的函数地址

  • 先得到目标函数的地址

  • 寻址到IAT表 然后对比地址 找到要替换的位置

  • 将IAT表内的函数地址替换为我自己函数的地址

局限性

不能Hook非静态导入函数(如自己定义的函数/动态Load+GetProc二连的函数等)

2. Inline Hook

Ring0/Ring3通用

原理就是修改指令机器码 在API逻辑中间跳转出去执行我们的代码 之后视情况再跳回去

关于Inline Hook中受影响的指令

不能直接跳回去

比如HOOK的时候改了两行代码

接着恢复逻辑的时候还需要执行这两条指令

手动探查覆盖了多少指令 先保存这些机器码后 全覆盖(多的机器码全为NOP)

跳回之前再执行一次保存的机器码

取消HOOK就将保存的机器码覆盖回去就行了

0x03 HOOK框架

HOOK原理懂了之后

现在有一些框架对这些HOOK方式的实施方法进行了封装

造好了轮子方便我们利用

俗话说 “工欲善其事,必先利其器”

用好框架也是很关键的

I. MinHook

待填

II. HookZz


Author: Luluting
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Luluting !
  TOC