fishhook 使用场景&源码分析

Posted 知识小集

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fishhook 使用场景&源码分析相关的知识,希望对你有一定的参考价值。

不做伪学习者

上一篇我们一起分析了 fishhook的实现原理,但很多东西如果我们仅仅知道原理,其实距离真正吸收它并将其转化成自己的生产力还有很长的路。你得弄清楚别人是怎么利用这个原理去解决问题的,还要借鉴别人的设计思想,再结合我们自己的思考不断地实践和总结,才能真正让知识成为自己的生产力。

话不多说,进入今天的第一个正题。

fishhook 使用场景

在上一篇里已经为大家演示了它的基本用法,使用很简单,这里就不展开了。它的使用场景正如其名: fishhook,主要用在安全防护领域。当然,大神级的逆向与安全防护专家咱们先不谈,那个级别的高手我相信也不会看到这篇文章,天下没有绝对的安全,黑与白永远都在博弈,所以希望大家不要钻牛角尖,至少咱们不能写出让菜鸟逆向就能轻松搞定的应用对吧?当然,后面咱们也会学习静态分析和汇编的知识,掌握更高级的逆向和防护技能,那都是打好基础的后话了。今天咱们的重点是源码分析,顺便温习下 c 的数据结构。

下面先来了解一下用 fishhook 防 HOOK 的基本思路:

  1. 在基础的动态调试逆向中,最常见的就是定位到目标方法后,通过 runtime 中的几种方法交换方式,实现代码注入的目的。为你准备好了相关的文章:ios代码注入+HOOK微信登录

  2. 既然 fishhook 可以拦截系统外部的 C 函数,那自然就可以 HOOK 到 runtime 库中的所有方法。

  3. 那我们就将所有可能用来篡改我们 OC 方法实现的 runtime API,都用 fishhook 拦截掉,使其无法用代码注入的方式成功 HOOK。

思路理清了,那就开始。

  • 为了方便演示,这里直接搞了一个分类,将 ViewController 的实例方法 viewDidAppear: 用 method_exchangeImplementations(Method _Nonnull m1, Method _Nonnull m2) 的方式与 my_viewDidAppear: 交换了实现,上代码:

fishhook 使用场景&源码分析


这时我们程序跑起来就可以看到如下输出:

fishhook 使用场景&源码分析