theos中的bug

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 使得我们的插件排到最后 进行监控

你可能感兴趣的:(theos中的bug)