theos、iosOpenDev生成dylib
insert_dylib、optool、yololib向二進制文件插入dylib
install_name_tool
修改dylib引用路徑
iResign、sigh resign、codesign等重簽名工具修改後的二進制文件是需要重簽名的
二、過程
1、生成dylib
dylib的生成 可采用theos,也可采用iosOpenDev。
theos是越獄專門開發用的工具,生成的dylib可直接作用於越獄機器上。
但theos並不是apple源生支持的工具,它在Mac端編譯生成deb包,安裝進IOS系統,由IOS系統dpkg安裝成插件模式 並隨之生成dylib。theos在Mac端需要調用IOS開發SDK,目前無法調用9.3以上的SDK,theos工具沒有更新。
iosOpenDev則是apple官方支持的插件生成工具,可直接由Xcode生成。
這種dylib由兩種 CaptainHookTweak、Logos Tweak.
不過這兩種沒什麽區別:Logos Tweak的語法較為簡單 同theos的壹致,CaptainHookTweak較為復雜。
2、插入dylib
這三種工具 均可向二進制文件插入dylib 不過各有千秋
yololib僅能對64位的二進制文件 插入 32位插入也能成功 但是 出現如下
insert_dylib既可以對64位 也可以對32位進行插入 同時 還會供選擇 是否刪除掉二進制文件原有的簽名 即 LC_CODE_SIGNATURE
optool 則功能更強大 可供選擇 是插入哪種LC LIB。本例暫用不上。
3、修改dylib引用
插入dylib後 需要對它添加cydiaSubstrate dylib的引用。即使用install_name_tool這個工具
之前就是這個地方沒有做 導致簽名後的文件 壹直安裝出現閃退 dylib也沒有調用
由於目前手頭沒有越獄手機 之前沒有調出過cydiaSubstrate dylib 所以這個步驟暫時中斷(最主要 每個越獄版本系統的cydiaSubstrate dylib都是不壹樣的 目前沒有可越獄的系統 也就沒有對應的dylib)
不過 可細想 因為越獄手機上 是自己存在這個cydiaSubstrate dylib的 所以 theos插件本身不必再導入這個dylib,直接對其添加引用即可。
然而 在非越獄手機上 就需要自己把這個cydiaSubstrate dylib放進app包裏 並手頭添加它的引用路徑了
既然這樣 那apple 源生的iosOpenDev為什麽還要出開發dylib的工具呢
那是因為apple 推出iosOpenDev生成dylib 根本不是讓妳這樣玩的 ?apple是讓妳把這個dylib添加進IOS工程裏 在工程裏對其添加引用 如果以後該app有少量的更新 只需要更新這個dylib即可 而不必更新整個app。這個在IOS開發中 叫做 增量更新。
在完全不使用cydia提供的hook接口的基礎上 也可以使用openDev使用的hook接口
操作如下:
a:將 dylib(如需要調用cydia substrate 的 MSHOOK函數 則 還需要添加cydia substrate dylib)到app包裏;
b:insert工具插入。註意這裏有壹個坑 就是凡是復制到dylib裏的包 除了使用install_name_tool對其添加引用外 插入到Mach-O LOAD COMMANDS裏的dylib還需要添加可執行路徑
首先需要cd進app包裏
然後/Users/danchen/desktop/diff_hook/insert_dylib@executable_path/ios_hook.dylibhook_demo hook_demo
c:之後重簽名
對app包裏每壹個修改的添加的文件進行簽名
codesign -f -s "iPhone Developer: 694708086@qq.com (T4MM3JZDL2)" hook_demo
codesign -f -s "iPhone Developer: 694708086@qq.com (T4MM3JZDL2)" ios_hook.dylib
再對整個app包添加簽名權限
codesign -f -s "iPhone Developer: 694708086@qq.com (T4MM3JZDL2)" --entitlements entitlements.plist hook_demo.app
直接安裝app包即可,也可以使用xcrun將其打包成ipa 安裝即可
dylib裏的內容
4、重簽名
完成這些步驟後
首先 要對 修改過的二進制文件、dylib、cydiaSubstrate dylib進行重簽名 即把iPhone Developer: 694708086@qq.com (T4MM3JZDL2) 寫入進去
然後 使用xcrun將app文件 打包成ipa 使用iResign、sigh resign等工具 對ipa包重簽名 再安裝進系統
重簽名權限文件entitlements.plist
可使用ldid -e 二進制文件查看entitlements文件內容生成
三、區別
theos與iosOpenDev
區別theosiosOpenDev備註
來源越獄開發作者appletheos來自第三方開發,iosOpenDev則是apple官方Xcode支持的
UI無Xcodetheos沒有開發UI界面,iosOpenDev的開發界面是Xcode
版本支持目前theos僅支持SDK IOS9.3以下都支持兩者調用SDK,theos僅支持SDK9.3以下,目前theos作者尚未更新工具
hook 語言方式Logos TweakLogos Tweak、CaptainHookTweak
insert_dylib、optool、yololib工具差別
區別insert_dyliboptoolyololib備註
支持結構64、32位都支持64、32位都支持僅支持64位
四、總結
這種方式僅能hook app自身進程裏所調用的函數 無法hook系統級別的進程
由於非越獄上的沙盒機制,本地app僅能訪問本app數據,無法訪問別的app的數據,訪問系統數據(相冊、地理位置等)也需要向用戶請求權限。更別說去hook系統級別的進程。
當然 存在非越獄下 繞過沙盒機制的技術: http://chuansong.me/n/2248208
比如這個人 非越獄下壹個app卸載另壹個app、壹個app獲取領壹個app裏的文件內容。但這種漏洞技術沒有公開 僅存在於越獄團隊內部。而且這種漏洞技術也沒能hook系統級進程。
理論上來講 非越獄下hook系統級別的進程 是有可能的 只不過難度相當大(換言之 如果真有這種非越獄下就能hook系統級別的漏洞和技術的話 越獄團隊幹嘛還費那大力氣去越獄呢)