一.介绍
1.当代码执行到某行时,获取寄存器值和内存里的值,进行调试分析,例如hook明文包.
2.当代码执行到某行时,插入想执行的代码.例如迅雷拦截发包函数.
3.当代码执行到某行时,修改寄存器,达到某些篡改目的.
拿FishingKit这道题举例就是本来运行流程是:
a--->b
而使用了Hook就是:
a---->c---->b
二.如何判断?
1.看引用
打开imports窗口
通过看关键API被莫名的函数引用来判断是否用了Hook(自己总结的不知道对不对,问AI,他说对)
比如VirtualProtect等等API,FishingKit就是拿了这个做文章。
2.穷举动调法
当根据静态分析无论如何只能得到假的flag时,那一定通过某种技术劫持了运行的顺序,这时候为了真正了解程序的运行顺序,可以如同我这样(夸张了)对主函数每一行都加上断点,然后在左边函数列表的起始位置也加上断点,然后动态调试,可能就能正确的分析程序?(其实根据逻辑也能少加一点断点,比如这是CTF比赛,加密函数肯定在scanf之后,这样的逻辑):
三.如何制作Hook
技不会,对我现在太难了,没法实操
这个是详细的过程:https://mp.weixin.qq.com/s?__biz=MzI5Mjc4NjgxNQ==&mid=2247486509&idx=1&sn=fc4cf2e4a06c83dab78b2717bf961b8d&chksm=ec7d4b3ddb0ac22b1052ae7cdd49dbc4c4b4a26407405bf1d6db17a8c37caeba557d69dcb048#rd
四.参考链接:
- https://mp.weixin.qq.com/s?__biz=MzI5Mjc4NjgxNQ==&mid=2247486509&idx=1&sn=fc4cf2e4a06c83dab78b2717bf961b8d&chksm=ec7d4b3ddb0ac22b1052ae7cdd49dbc4c4b4a26407405bf1d6db17a8c37caeba557d69dcb048#rd
- https://blog.csdn.net/LH1013886337/article/details/143847428
- https://cnblogs.com/from-zero/p/14793057.html