fishhook 使用场景&源码分析
Posted 知识小集
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fishhook 使用场景&源码分析相关的知识,希望对你有一定的参考价值。
不做伪学习者
上一篇我们一起分析了 fishhook的实现原理,但很多东西如果我们仅仅知道原理,其实距离真正吸收它并将其转化成自己的生产力还有很长的路。你得弄清楚别人是怎么利用这个原理去解决问题的,还要借鉴别人的设计思想,再结合我们自己的思考不断地实践和总结,才能真正让知识成为自己的生产力。
话不多说,进入今天的第一个正题。
fishhook 使用场景
在上一篇里已经为大家演示了它的基本用法,使用很简单,这里就不展开了。它的使用场景正如其名: fishhook,主要用在安全防护领域。当然,大神级的逆向与安全防护专家咱们先不谈,那个级别的高手我相信也不会看到这篇文章,天下没有绝对的安全,黑与白永远都在博弈,所以希望大家不要钻牛角尖,至少咱们不能写出让菜鸟逆向就能轻松搞定的应用对吧?当然,后面咱们也会学习静态分析和汇编的知识,掌握更高级的逆向和防护技能,那都是打好基础的后话了。今天咱们的重点是源码分析,顺便温习下 c 的数据结构。
下面先来了解一下用 fishhook 防 HOOK 的基本思路:
在基础的动态调试逆向中,最常见的就是定位到目标方法后,通过 runtime 中的几种方法交换方式,实现代码注入的目的。为你准备好了相关的文章:ios代码注入+HOOK微信登录
既然 fishhook 可以拦截系统外部的 C 函数,那自然就可以 HOOK 到 runtime 库中的所有方法。
那我们就将所有可能用来篡改我们 OC 方法实现的 runtime API,都用 fishhook 拦截掉,使其无法用代码注入的方式成功 HOOK。
思路理清了,那就开始。
为了方便演示,这里直接搞了一个分类,将 ViewController 的实例方法
viewDidAppear:
用method_exchangeImplementations(Method _Nonnull m1, Method _Nonnull m2)
的方式与my_viewDidAppear
: 交换了实现,上代码:
这时我们程序跑起来就可以看到如下输出:
为了阻止其完成方法交换,我们要 hook
method_exchangeImplementations
方法,拖入 fishhook 源文件,再添加一个分类并写好 hookmethod_exchangeImplementations
的代码:(如果成功 hook 了method_exchangeImplementations
,那别人调用该方法时会进入我们的myExchange
,然后顺便又把NSLog
hook 了一下,不要被这个绕晕了以上是关于fishhook 使用场景&源码分析的主要内容,如果未能解决你的问题,请参考以下文章