Hook学习体会

本文介绍了Hook的概念,特别是API Hook在Windows系统中的应用。通过Hook可以拦截API,例如openprocess,实现进程保护。文中详细讲解了IAT Hook和inline Hook的工作原理,包括如何修改导入地址表和函数体内的指令,以实现自定义的功能,如TCP抓包和文件监视。Inline Hook由于其在函数体内部修改,通常更为隐蔽且高效。
摘要由CSDN通过智能技术生成

上个月学习的是API HOOK,通过学习HOOK,去深入了解windows系统API的作用,并且通过HOOK能完成对API的拦截并获取自己所需的信息或者是想改变的操作。
首先,我们要知道什么叫作HOOK,英文解释是钩子。通过钩子,我们能做什么呢。譬如说通过HOOKopenprocess这个API,我们可以让该API无法关闭进程实现进程保护。
inline hook 以及 IAT hook
什么是IAT hook?
首先要知道什么是IAT,这方面我们可以看下网上的资料:IAT全称是Import Address Table (导入地址表)由于导入函数就是被程序调用但其执行代码又不在程序中的函数,这些函数的代码位于一个或者多个DLL 中.当PE 文件被装入内存的时候,Windows 装载器才将DLL 装入,并将调用导入函数的指令和函数实际所处的地址联系起来(动态连接),这操作就需要导入表完成.其中导入地址表就指示函数实际地址。
或许看概念比较难懂,其实就是widows的进程在运行中是会加载很多动态库,导入地址表就包含了那些需要加载的动态库以及位于动态库中的函数所在的地址。因此通过替换导入地址表中的函数地址,把其转为自己修改后的函数,就可以干自己想干的事情了。(嘿嘿,譬如说拦截TCP协议的send,recv以及wsasend,wsarecv,UDP中的send to 和recv from就可以抓包了。当然你也可以拦截writefile createfile readfile去监视进程到底干了些什么事情,其他的API就自己找去吧)
什么是inline hook?
借助网上的解释:
字面含义
从字面上来理解,inline hook即内置hook ,内部跳转hook,从内部联结到其它函数的hook。
指直接修改目标函数的指令,用一个跳转或者其他指令来达到挂钩(执行自写的其他函数)的目的。
这是相对一般的函数地址hook来说,一般的hook方法是指是在调用函数处修改函数地址,而不是在原来的函数体里面做修改。如:CALL 0x10000001 改成 CALL 0x10000002
还有就是函数地址列表hook。在程序的不同层面有不同的函数地址清单,如应用层的IAT表,驱动层的SSDT和IDT表,此即在上述函数地址清单中修改函数地址。函数在应用层的IAT表地址如同函数的含糊地址,如X小区,驱动层的如详细地址,如X栋X室,驱动的保护就如同小区保安起到保护作用。
比喻
如果把一个程序比作一本书,那么:
inline hook如同修改内页内容,写上(由此处跳转到XXX页),位置在开始的叫浅层inline hook,靠后的则为深层inline hook。
SSDT hook、IDT hook和IAT hook如同修改目录中章节的地址,把XXX节 xxx页改为yyy页。
比较
一般来说,改地址的hook,其使用时比较稳定。 inline hook 更加高级一点,一般也跟难以被发现。
这就是网上的揭示了,真的好长呀,其实就是简单的说,每个程序进入函数的时候,需要找到函数的入口是吧?从汇编的角度来说就是在前几个字节就是函数的入口地址,通过修改其跳转的位置,就可以让其跳到我们的函数里了。举个例子就是,外卖员,是不是通过门牌号找到送货点,然后你把订单信息的门牌号改了,外卖是不是就到你这了?而且inline Hook是可以在函数体的任何部位进行跳转的,这也就是其强大之处!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值