❶ Mac查看文件內容常用的命令小結
最近蘋果的熱更新和私有庫問題檢查的更嚴了,如果應用被拒,蘋果在拒絕信中會說到使用 strings / otool / nm 命令進行自查,所以總結了一些命令,方便查找和定位文件內容相關信息。 檢查是否包含(weixin)字元串:❷ iOS非越獄注入插件
這里我們以QQ App來舉例,這里需要注入的是我自己寫的一個 QQPlus 這個插件; 首先我們需要准備以下文件:
解壓完成後我們先確認包是否加密, 使用 otool 命令
輸入以上命令後輸出
這里 cryptid 為 0 則為未加密, 確認了未加密後我們就可以開始注入了;
可以看到 倒數第三 個依賴, 我們需要使用 install_name_tool 命令修改他
然後再次使用 otool 命令查看是否修改成功
這里可以看到已經把 /usr/lib/libsubstitute.0.dylib 已經被修改為 @executable_path/Frameworks/libsubstitute.0.dylib
這里可以很清楚的看到一個依賴 /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate , 同樣我們需要使用 install_name_tool 命令修改他把他修改到 Frameworks 目錄下的 libSubstrate.dylib
再使用 otool 命令查看是否成功修改依賴
這里可以看到依賴已經被修改為 @executable_path/Frameworks/libSubstrate.dylib
再次使用 otool 命令查看是否注入成功
這里可以看到我們已經插入了 @executable_path/Frameworks/QQPlus.dylib
個人Cydia源: https://moxcomic.github.io
QQ交流群: 821196802
❸ iOS開發中常用命令工具(xcode-select、lipo、xcrun等)
當安裝多個xcode的版本,使用該工具使用指定的版本。
-p 或者 --print-path 查看當前開發者目錄,也即是xcode的版本目錄。print the path of the active developer directory
-s <path> 或 --switch <path> 選擇xcode的版本
--install 安裝
--version 查看版本
--reset 恢復默認
sudo rm -rf /Library/Developer/CommandLineTools 強制刪除安裝目錄下的文件
是管理Fat File的工具, 可以查看cpu架構, 提取特定架構,整合和拆分庫文件。
Mac OS X下二進制可執行文件的動態鏈接庫是dylib文件。所謂dylib,就是bsd風格的動態庫。基本可以認為等價於windows的dll和linux的so。mac基於bsd,所以也使用的是dylib。
Linux下用 ldd 查看,蘋果系統用 otool 。
otool命令介紹
MobSF
Mach-O 文件格式解析
xcodebuild :通過工程文件,生成app文件。
xcrun :通過app文件,來生成ipa文件(包含了簽名的過程)。
通過app文件生成ipa文件
libtool是一個通用庫支持腳本(/usr/bin/libtool),將使用動態庫的復雜性隱藏在統一、可移植的介面中。
可以在不同平台上創建並調用動態庫,我們可以認為libtool是gcc的一個抽象,也就是說,它包裝了gcc或者其他的任何編譯器,用戶無需知道細節, 只要告訴libtool說我需要要編譯哪些庫即可,並且,它只與libtool文件打交道,例如lo、la為後綴的文件。
libtool工具的使用
庫是一單獨的文件,裡麵包含了按照特定的結構組織起來的其它的一些文件(稱做此庫文件的member)。原始文件的內容、模式、時間戳、屬主、組等屬性都保留在庫文件中。
詳細命令參見, 菜鳥網路-ar命令
可以用來創建、修改庫,也可以從庫中提出單個模塊。
lipo libAFNetworking.a -thin arm64 -output lib-arm64.a 生成Arm64包
ar -t lib-arm64.a 輸出包含的.o文件 和 otool -L libAFNetworking.a 一樣。
ar -x lib-arm64.a 解壓出包裡面的.o文件
在iOS開發中,常常用來分析二進制和靜態庫文件。
列出 .o .a .so 中的符號信息,包括諸如符號的值,符號類型及符號名稱等。所謂符號,通常指定義出的函數,全局變數等等。
iOS開發中,可以用來查看.a靜態庫所有打包進去的.o文件和函數介面信息,幫助我們定位崩潰信息。
例如: nm -u libAFNetworking.a 列出某個.o文件的介面信息。
二進制查看命令,將文件顯示為16進制字元串表示形式。
例如: xxd libYTKNetwork.a | grep "net" 查看YTKNetwork.a文件裡麵包含net字元串的,幫助我們分析一些二進制文件。
DWARF文件初探——提取輕量符號表
Mac系統下lipo, ar, nm等工具的使用簡介
美團 iOS 工程 zsource 命令背後的那些事兒
Linux工具參考篇
iOS 靜態庫沖突 兩個不同的.o 文件沖突 ,靜態庫分離
❹ dyld: Library not loaded解決方案
此問題是由於動態庫依賴路徑導致,分為兩種情況:
在項目啟動後,由於路徑問題App直接崩潰,Xcode列印出以下信息:
根據列印內容,我們可以得知是 /usr/local/lib/libimobiledevice-glue-1.0.0.dylib 無法正確找到,解決方法如下:
至此該問題已解決。
首先進行問題定位,可以使用 otool 命令查看問題:
在終端輸入 otool -L 動態庫全路徑 ,就可顯示其內部引用信息。
有的時候崩潰並不是動態庫文件沒找到,而是動態庫內部依賴路徑有問題,Xcode會列印出以下信息:
根據列印內容,我們得知是由於 aa.3.dylib 這個庫內部的引用無法找到,比如我的 libcrypto.3.dylib 真實路徑是 Build/Procts/Debug/xxx.app/Contents/Frameworks/libcrypto.3.dylib ,而這個 aa.3.dylib 內部的引用路徑是 /usr/lib/libcrypto.3.dylib 。因此我們需要講其修改:
打開終端輸入以下命令進行修改:
install_name_tool -change 動態庫中錯誤的引用路徑 正確的引用路徑 有問題的動態庫全路徑
比如我的示例:
install_name_tool -change /usr/lib/libcrypto.3.dylib @executable_path/../Frameworks/libcrypto.3.dylib aa.3.dylib的全路徑
至此問題已解決。
❺ iOS 逆向----otool命令入門
首先可以拿自己的ipa包進行嘗試。
選擇你的ipa包,然後把後綴名改為zip,解壓縮得到Payload文件夾,裡面就是你的APP。
打開終端,直接cd到你的xxxx.app目錄下。具體做法,輸入cd,然後把xxxx.app直接拖到終端里打個回車。
然後輸入otool,會顯示如下內容:
有興趣的同學可以仔細研究一下每個命令是干嗎用的,這里介紹幾個常用命令:
可執行文件的名稱可以右鍵xxxx.app文件,選擇顯示包內容,然後找到裡面的exec文件,把名字打進去。一般來說這個文件的名字跟xxxx是一樣的
然後奇跡就出現了。。。
是不是很熟悉?這個命令列出了你使用的所有庫的名字。
查看ipa包是否加殼:
其中cryptid代表是否加殼,1代表加殼,0代表已脫殼。我們發現列印了兩遍,其實代表著該可執行文件支持兩種架構armv7和arm64.
這里給大家推薦一個自動化檢測的神器:
MobSF
根據Document的提示自行研究一下吧。
❻ ldd與otool
ldd命令用於列印程序或者庫文件所依賴的共享庫列表
ldd不是一個可執行程序,而只是一個shell腳本
體積小,需要鏈接動態庫,對各平台的兼容性可能不太好
參考:
https://www.linuxsong.org/2015/04/mac-os-x-ldd-strace
http://man.linuxde.net/ldd
https://coolshell.cn/articles/1626.html
https://stackoverflow.com/questions/1685483/how-can-i-examine-contents-of-a-data-section-of-an-elf-file-on-linux
https://www.jianshu.com/p/ef462437b999
❼ iOS 包簽名及重簽名
簽名相關的命令:
•$security find-identity -v -p codesigning -- 列出鑰匙串里可簽名的證書
•$security cms -D -i embedded.mobileprovision -- 查看描述文件
•$codesign–fs 「證書串」 文件名 -- 強制替換簽名
重簽步驟:
1.刪除插件和帶有插件的.app包(比如Watch)
2.對Frameworks裡面的庫進行重簽名
3.給可執行文件 +x(可執行)許可權
4.替換描述文件
5.替換BundleID
6.通過授權文件(Entilements)重簽.app包
實際操作:
獲取破殼的ipa包
獲取第三方ipa包
查看ipa包是否已經破殼 》 非上架的都沒加殼,無需關注
解壓ipa包,進入playload文件夾,找到MachO文件
在終端使用命令otool -l DingTalk | grep crypt,0是已脫殼,大於0是未脫殼(一
般為1)
終端查看本地有效證書
$security find-identity -v -p codesigning
刪除無法簽名的插件文件
刪除Plugins文件夾和Watch文件夾
對.app文件夾內的Frameworks文件夾中的每一個framework強制重簽名
命令:$ codesign -fs "iPhone Developer: xxx " xxx.framework
找到framework文件夾下所有.framework,分別使用上面的命令對其簽名。
建議通過腳本命令執行:
將要簽名的描述文件該成 embedded.mobileprovision 替換 來的 embedded.mobileprovision
創建entitlements.plist文件
查看描述文件內容,使用命令security cms -D -I embedded.mobileprovision,找到Entitlements節點,接著創建entitlements.plist文件,內容拷貝過去,最後把entitlements.plist文件拷貝到playload文件夾內(與xx.app同級)。
!]( https://upload-images.jianshu.io/upload_images/1502585-e1694c8e1e77a197.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
修改xx.app包裡面的info.plist中的bundleId為上面項目的bundleId
對xx.app開始簽名
使用的命令: zip –ry 輸出文件 輸入文件 命令。也可以手動壓縮。
將上述操作 通過shell命令 寫個腳本文件。然後一鍵操作。
shell腳本語言命令
地址: https://github.com/InjoyDeng/ResignTool
蒲公英平台重簽名
本文章主要介紹iOS 版本發布的兩個相關功能。
一 : iOS 開發出的版本發布安裝 用兩種方式 :
軟體環境
Mac: v10.12.6 (16G29)
ruby: v2.3.4
rvm: v1.29.3
sigh: v2.71.1
Xcode: v9.2
使用sigh腳本
使用之前先安裝一下腳本環境
應用場景:
主要解決因重復打包導致測試同學回歸測試的包和上傳App Store的包不一致的問題。以及 合作方之間 證書不一致,需要重新簽名問題。
App開發測試流程
對回歸測試通過的ipa包進行重新簽名,然後上傳 App Store
輸入的 Signing Identity 如果和 .mobileprovision文件 不一致,那麼終端上仍會提示resign成功,但是,安裝時會報錯!
codesign -vv -d xxx.app
本文主要講述sigh命令的安裝和使用。
首先確保你安裝了Xcode的命令行工具。
然後通過gem安裝sigh,gem的安裝請自行谷歌。
在終端執行
依次執行下列步驟:
關於更多sigh用法請訪問 sigh使用
簽名成功的應用就可以順利在我們的設備中安裝了並使用了,用這個方法可以進行非越獄平台安裝在正版基礎移植的越獄應用。
工具: https://github.com/InjoyDeng/ResignTool
借鑒: https://www.jianshu.com/p/d68924e1af25
https://www.jianshu.com/p/d68924e1af25
https://www.cnblogs.com/guohai-stronger/p/11781249.html
iOS APP簽名機制詳解