博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
发红包
阅读量:6002 次
发布时间:2019-06-20

本文共 713 字,大约阅读时间需要 2 分钟。

前言

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

MobieSubstrate

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

  • MobileHooker

它的作用是替换函数实现

  • MobileLoader

它的作用是加载第三方动态链接库,也就是我们开发的 tweak。在 iOS 启动时,由 launchd 将 MobileLoader 载入内存,然后 MobileLoader 会 dlopen 所有 /Library/MobileSubstrate/DynamicLibraries/ 目录下的动态链接库。

另外我们需要为编写的 tweak 同时编写一个跟 tweak 同名的 plist 文件,指定 tweak 的作用范围。

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

使用cycript 开始分析


转载地址:http://xadmx.baihongyu.com/

你可能感兴趣的文章
Linux网卡名改eth0方法
查看>>
SQL or NoSQL——云计算环境中该选择谁
查看>>
托盘气泡很长时间才能消失,uTimeout没起到作用的解决办法
查看>>
利用webshell搭建socks代理
查看>>
nginx+keepalived构建主主负载均衡代理服务器
查看>>
LED灯的闪烁与熄灭也成了一个iptables target,强汗
查看>>
UVA 1169\uvalive 3983 Robotruck 单调队列优化DP
查看>>
我的友情链接
查看>>
POJ 1703 Find them, Catch them
查看>>
[共通]手机端网页开发问题及解决方法整理
查看>>
HSRP 原理
查看>>
监控队列的脚本
查看>>
我不是九爷 带你了解 CloudStack+XenServer详细部署方案(3):CloudStack管理节点的安装和配置...
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
用户调查报告
查看>>
发布一个php分页类
查看>>
我的友情链接
查看>>
${basePath}
查看>>
linux命令之uniq简单用法
查看>>