发红包

前言

OC 中对某个对象的方法的调用并不像 C++ 同样直接取得方法的实现的偏移值来调用,因此 C++ 方法与实现的关系在编译时就可肯定。而 OC 中方法和实现的关系是在运行时决定的。在调用某个对象的方法时,其实是调用了 obj_msgsend 向对象发送一个名称为方法名的消息,而咱们能够替换这个响应这个消息的实现内容。OC 中比较有力的动态特性 Method Swizzing 就是创建在这个基础之上。segmentfault

参考文章app

MobieSubstrate

MobieSubstrate 是现有越狱插件运行的基础;它由3部分组成:函数

  • MobileHooker

它的做用是替换函数实现插件

  • MobileLoader

它的做用是加载第三方动态连接库,也就是咱们开发的 tweak。在 iOS 启动时,由 launchd 将 MobileLoader 载入内存,而后 MobileLoader 会 dlopen 全部 /Library/MobileSubstrate/DynamicLibraries/ 目录下的动态连接库。
另外咱们须要为编写的 tweak 同时编写一个跟 tweak 同名的 plist 文件,指定 tweak 的做用范围。code

这个咱们要从二进制文件的结构提及,从下面的图来看,Mach-O文件的数据主体可分为三大部分,分别是头部(Header)、加载命令(Load commands)、和最终的数据(Data)。mobileloader会在目标程序启动时,会根据指定的规则检查指定目录是否存在第三方库,若是有,则会经过修改二进制的loadCommands,来把本身注入进全部的app当中,而后加载第三方库。

使用cycript 开始分析对象

相关文章
相关标签/搜索