1:theos中不能debug調(diào)試,只能通過log看中間信息
2:在tweak中 只要不存在logos的基本的語法錯誤 不存在未知類的鏈接錯誤 就不會報錯就是說 假設我在tweak里面hook一個根本沒有的類 根本沒有的函數(shù) theos也不會報錯
3:theos的插件沖突


決定theos是不同的插件 是由Package名來決定的 就是說 只要Package是相同的 則在cydia系統(tǒng)中會覆蓋前一個
而theos作用的范圍是由bundle id決定的 這個在之前的文章中有介紹
假設出現(xiàn)的三個theos插件 都對同一個bundle id的app作用
app是

從1~3 的theos tweak分別是



測試結(jié)果為

而且期間 無論按照怎么樣的次序去安裝這三個插件 出現(xiàn)的規(guī)律是這樣的:
假如在cydia上存在著多個插件 對同一個app的同一個函數(shù)均hook生效,則該函數(shù)最終生效的是cydia列表的最后一個插件,而且其他插件關(guān)于這個函數(shù) 均不產(chǎn)生作用

僅僅出現(xiàn)theos-3的log
但是在做短信監(jiān)測的時候

兩者SMSNjina和我寫的hook均對短信函數(shù)進行監(jiān)控 發(fā)現(xiàn)兩者都有調(diào)用··
這是SMSNjina的函數(shù)

這是我寫的hook短信監(jiān)測的函數(shù)

我發(fā)現(xiàn)之所以會產(chǎn)生這種情況 是因為函數(shù)里加了%orig
因此 我在前面測試的那三個里面都添加了%orig
測試結(jié)果如下:


得出結(jié)論如下
在多個theos插件對同一個app的同一個函數(shù)產(chǎn)生作用的時候
1:無論這些插件安裝的順序如何 對該函數(shù)產(chǎn)生效果的 始終是最后一個插件(在cydia中的順序)
2:hook是最終效果是替換,若其中一個插件無%orig復制前面的代碼過程,則log從此結(jié)束
3:不同的插件對同一個app的hook 每一個都是在編譯過程中的替換 而在實際運行過程中 只會運行那么多次替換的最終結(jié)果
因此 這個算是對上述現(xiàn)象的一個說明
所以即便是將我們的tweak安排在最后一個 也是沒有用的 只要前面的theos中

將%orig文件抹掉

則關(guān)于這個函數(shù) 就已然失效了 后面的smsnjina也失效了
所以需要解決的問題是:將我們的tweak放在最后面一個
然后在最后面寫入正確的邏輯 保證系統(tǒng)功能的正確性和完整性
測試tweak中的排序特點是

所以 接下來的目標是 獲取cydia中的最后的tweak
在創(chuàng)建我們的監(jiān)測tweak工程之后 動態(tài)的修改control文件里 的Name 使得我們的插件排到最后 進行監(jiān)控