加殼和脫殼
- 01-加殼和脫殼
-
- 1.1 加殼
- 1.2 脫殼
- 1.3 iOS中的脫殼工具
- 1.4 如何驗證可執行檔案是否已經脫殼?
- 02-Clutch
-
- 2.1 Clutch - 配置
- 2.2 Clutch – 使用
- 03-dumpdecrypted
-
- 3.1 dumpdecrypted
- 3.2 dumdecrypted – 細節
-
- 3.2.1 在使用過程中,可能會遇到以下錯誤
- 3.2.2 原因1:簽名失敗
- 3.2.3 原因2:對dylib所在的檔案夾權限不夠
01-加殼和脫殼
1.1 加殼
- IPA檔案上傳App Store及下載下傳
什麼是加殼?
利用特殊的算法,對可執行檔案的編碼進行改變(比如壓縮、加密),以達到保護程式代碼的目的
1.2 脫殼
什麼是脫殼?
摘掉殼程式,将未加密的可執行檔案還原出來(有些人也稱為“砸殼”)
- 脫殼主要有2種方法:硬脫殼、動态脫殼
1.3 iOS中的脫殼工具
- iOS中有很多好用的脫殼工具
- Clutch:https://github.com/KJCracks/Clutch
- dumpdecrypted:https://github.com/stefanesser/dumpdecrypted/
- 注意 : 絕大多數的APP使用Clutch脫殼是不成功的,建議使用dumpdecrypted
1.4 如何驗證可執行檔案是否已經脫殼?
- 檢視Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0代表未加密
- 通過otool指令行也可以
otool -l 可執行檔案路徑 | grep crypt
02-Clutch
2.1 Clutch - 配置
- 下載下傳最新的Release版: https://github.com/KJCracks/Clutch/releases
- 建議去掉版本号,改名為Clutch
- 将Clutch檔案拷貝到iPhone的/usr/bin目錄
- 如果在iPhone上執行Clutch指令,權限不夠,賦予“可執行的權限”
2.2 Clutch – 使用
- 列出已安裝的APP:Clutch -i
- 輸入APP序号或者Bundle Id進行脫殼操作:
Clutch -d APP序号或BundleId
- 脫殼成功後會生成一個ipa檔案
03-dumpdecrypted
3.1 dumpdecrypted
- 下載下傳源代碼,然後在源代碼目錄執行make指令進行編譯,獲得dylib動态庫檔案
- 将dylib檔案拷貝到iPhone上(如果是root使用者,建議放/var/root目錄)
- 終端進入dylib所在的目錄
- 使用環境變量DYLD_INSERT_LIBRARIES将dylib注入到需要脫殼的可執行檔案(可執行檔案路徑可以通過ps -A檢視擷取)
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可執行檔案路徑
-
檔案就是脫殼後的可執行檔案.decrypted
3.2 dumdecrypted – 細節
3.2.1 在使用過程中,可能會遇到以下錯誤
3.2.2 原因1:簽名失敗
- 解決方案:重新簽名
- 終端執行下 :security find-identity -v -p codesigning看看 你電腦 目前有哪些可用的簽名證書
- 然後重新簽下名:codesign --force --verify --verbose --sign “iPhone Developer: xxx xxxx (xxxxxxxxxx)” dumpdecrypted.dylib
3.2.3 原因2:對dylib所在的檔案夾權限不夠
- 解決方案:将dylib放在使用者所在檔案夾,比如
- 如果是root使用者,請将dylib放在/var/root目錄
- 如果是mobile使用者,請将dylib放在/var/mobile目錄