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
待填