1:theos中不能debug调试,只能通过log看中间信息
2:在tweak中 只要不存在logos的基本的语法错误 不存在未知类的链接错误 就不会报错就是说 假设我在tweak里面hook一个根本没有的类 根本没有的函数 theos也不会报错
3:theos的插件冲突
决定theos是不同的插件 是由Package名来决定的 就是说 只要Package是相同的 则在cydia系统中会覆盖前一个
而theos作用的范围是由bundle id决定的 这个在之前的文章中有介绍
假设出现的三个theos插件 都对同一个bundle id的app作用
app是
从1~3 的theos tweak分别是
测试结果为
而且期间 无论按照怎么样的次序去安装这三个插件 出现的规律是这样的:
假如在cydia上存在着多个插件 对同一个app的同一个函数均hook生效,则该函数最终生效的是cydia列表的最后一个插件,而且其他插件关于这个函数 均不产生作用
仅仅出现theos-3的log
但是在做短信监测的时候
两者SMSNjina和我写的hook均对短信函数进行监控 发现两者都有调用··
这是SMSNjina的函数
这是我写的hook短信监测的函数
我发现之所以会产生这种情况 是因为函数里加了%orig
因此 我在前面测试的那三个里面都添加了%orig
测试结果如下:
得出结论如下
在多个theos插件对同一个app的同一个函数产生作用的时候
1:无论这些插件安装的顺序如何 对该函数产生效果的 始终是最后一个插件(在cydia中的顺序)
2:hook是最终效果是替换,若其中一个插件无%orig复制前面的代码过程,则log从此结束
3:不同的插件对同一个app的hook 每一个都是在编译过程中的替换 而在实际运行过程中 只会运行那么多次替换的最终结果
因此 这个算是对上述现象的一个说明
所以即便是将我们的tweak安排在最后一个 也是没有用的 只要前面的theos中
将%orig文件抹掉
则关于这个函数 就已然失效了 后面的smsnjina也失效了
所以需要解决的问题是:将我们的tweak放在最后面一个
然后在最后面写入正确的逻辑 保证系统功能的正确性和完整性
测试tweak中的排序特点是
所以 接下来的目标是 获取cydia中的最后的tweak
在创建我们的监测tweak工程之后 动态的修改control文件里 的Name 使得我们的插件排到最后 进行监控