本文首發於我的博客php
逆向APP思路:1,代碼分析html
2,對Mach-O文件的靜態分析MachOView、class-dump、Hopper Disassembler、ida等python
3,動態調試 對運行中的APP進行代碼調試 p debugserver、LLDBios
4,代碼編寫git
5,注入代碼到APP中github
6,必要時還可能須要從新簽名、打包ipa數據庫
SSH (Secure Shell) 是「安全外殼協議」vim
OpenSSH 是SSH協議的免費開源實現 (在iPhone上經過Cydia安裝OpenSSH工具(軟件源http://apt.saurik.com))sass
能夠經過OpenSSH的方式讓Mac遠程登陸到iPhone安全
SSH是經過TCP協議通訊,因此要確保Mac和iPhone在同一局域網下,好比鏈接着同一個WiFi下
在終端輸入
ssh 帳戶名@服務器主機地址
複製代碼
例如:
ssh root@192.168.8.157 而後輸入密碼(默認是alpine )
複製代碼
這種方式wifi登陸,受到網速限制
1.2 sh login.sh (注:ssh -p 10010 root@localhost)
上面的命令生效是由於已經把 usb.sh 和 login.sh 兩個文件作了端口映射並放到了根目錄 (映射須要usbmuxd工具包)
另外: 1.echo $PATH 查看設置的根目錄,若是本身想寫腳本在其餘地方都能執行,也能夠放在PATH路徑下
2.手機和電腦能鏈接是由於,手機的受權文件 /var/root/.ssh/authorized_keys 中 添加了電腦的公鑰 ~/.ssh/id_rsa.pub
Mac上有個服務程序usbmuxd(它會開機自動啓動),能夠將Mac的數據經過USB傳輸到iPhone
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
下載usbmuxd工具包(下載v1.0.8版本,主要用到裏面的一個python腳本:tcprelay.py)
cgit.sukimashita.com/usbmuxd.git…
Cycript 安裝到手機上
Cycript是Objective-C++、ES6(JavaScript)、Java等語法的混合物,能夠用來探索、修改、調試正在運行的Mac\iOS APP
官網: www.cycript.org/
經過Cydia安裝Cycript,便可在iPhone上調試運行中的APP
使用: cycript -p 進程ID 好比:cycript -p NewsBoard
cycript -p 進程名稱
取消輸入:Ctrl + C
退出:Ctrl + D
清屏:Command + R
Github 上有基於cycript封裝了一些函數 參考
@import mjcript --->MJAppId、MJFrontVC()、MJDocPath、MJAppPath 等
Clutch -i 獲取加殼軟件的appid
PS命令 (手機上安裝adv-cmds)
ps –A 列出全部的進程
ps命令是process status
能夠過濾關鍵詞,好比 : ps -A | grep WeChat
也能夠用github 上工具獲取 github.com/CoderMJLee/…
MJAppTools 能夠獲取到架構,名稱,是否加殼,安裝包路徑,數據庫路徑等
Clutch:github.com/KJCracks/Cl…
dumpdecrypted:github.com/stefanesser…
AppCrackr、Crackulous
Clutch -i 獲取到appid以後,Clutch -d (APP序號) 導出app包 eg: Clutch -d 1 會打印出脫殼路徑
DYLD_INSERT_LIBRARIES 脫殼
例如:MJAppTools 獲取 到 【網易新聞】 <com.netease.news> /private/var/mobile/Containers/Bundle/Application/64F0B25C-062E-4A89-8834-3F534C24E70D/NewsBoard.app
執行:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/64F0B25C-062E-4A89-8834-3F534C24E70D/NewsBoard.app/NewsBoard
獲取到的脫殼文件再當前目錄下 (Device/var/root)
查看是否脫殼
otool -l 名稱 | grep crypt 例如: otool -l NewsBoard | grep crypt 查看網易新聞是否脫殼
也能夠用hopper看是否脫殼
cryptid 0 爲脫殼 cryptid 1 是加殼
class-dump
顧名思義,它的做用就是把Mach-O文件的class信息給dump出來(把類信息給導出來),生成對應的.h頭文件
官方地址:stevenygard.com/projects/cl…
下載完工具包後將class-dump文件複製到Mac的/usr/local/bin目錄,這樣在終端就能識別class-dump命令了
經常使用格式:
class-dump -H Mach-O文件路徑 -o 頭文件存放目錄 -H表示要生成頭文件 -o用於制定頭文件的存放目錄
例如:當前目錄下 class-dump -H NewsBoard -o Header (新建一個Header的文件夾) 這時候能夠用hopper 等分析代碼了
安裝簽名工具ldid
1.先確保安裝brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製代碼
2.利用brew安裝ldid
$ brew install ldid
複製代碼
$ vim ~/.bash_profile
複製代碼
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
複製代碼
$ source ~/.bash_profile
複製代碼
下載theos
建議在$PATH 目錄下載代碼(就是剛纔配置的)
$ git clone --recursive https://github.com/theos/theos.git $THEOS
複製代碼
新建tweak 項目
$ cd ~/Desktop
$ nic.pl
複製代碼
選擇選項[13.] iphone/tweak
填寫項目信息
名稱 項目ID隨便寫, MobileSubstrate Bundle filter 寫應用的id 其餘回車
具體狀況具體分析
當前tweak文件目錄下make clean && make && make package && make install (已經寫好了文件,能夠直接 sh ~/tweak.sh
本身作的插件在 Device/Library/MobileSubstrate/DynamicLibraries
目錄結構: github.com/theos/theos…
Logoes語法: iphonedevwiki.net/index.php/L…
%hook %end : hook一個類的開始和結束
%log : 打印方法調用詳情 能夠再Xcode -> Window -> Devices and Simulators中查看
HBDebugLog 相似NSLog
%new: 添加一個新的方法
%c(className): 生成一個class對象,好比Class%c(NSObject),相似於NSStringFromClass()、objc_getClass()
%orig: 函數調用原來的邏輯
%ctor : 在加載動態庫時候調用
%dtor : 程序退出時調用
logify.pl: 能夠將一個頭文件快速轉成已經包含打印信息的xm文件
logify.pl xx.h > xx.xm
複製代碼
1,在 UserCenterViewController.h 目錄下執行
logify.pl UserCenterViewController.h > UserCenterViewController.xm
2, UserCenterViewController.xm 拷貝到Makefile(Tweak.xm) 所在目錄
3, 新建一個src目錄,把.xm文件放進去,修改路徑 YZRongxin_FILES = $(wildcard src/*.xm)
4,不認識的類 替換爲void 刪除__weak 刪除協議
5, 不想太詳細 %log 換成NSLog(@"%@",NSStringFromSelector(_cmd));
6,HBLogDebug(@" = 0x%x", (unsigned int)r) 改成 HBLogDebug(@" = 0x%@", r)
例:PC軟件破解 ./YZCTest
例:網易新聞去廣告 NTESNBNewsListController hasAd
例:優酷去掉90s開頭廣告 XAdEnginePreAdModule setupVideoAd needAd
若是是未越獄的IPhone 則還須要打包簽名等操做。
從embedded.mobileprovision文件中提取出entitlements.plist權限文件
查看可用的證書
https://github.com/DanTheMan827/ios-app-signer
複製代碼
對.app重簽名,打包成ipa
須要再.app包中提供對應的embedded.mobileprovision文件
Tweak 技巧
1,加載 圖片資源 建立 layout 文件夾 至關於Device/Library
圖片會放在 在Device/Library/PreferenceLoader/Preference
2,本身作的插件在 Device/Library/MobileSubstrate/DynamicLibraries
3,#define YZFile(path) @"/Library/PreferenceLoader/Preferences/yzxmly/" #path
4,多個文件,多個目錄,引用頭文件要使用路徑好比 @import 「abc/def/person.h」
5,路徑 全路徑,或者 代替 好比:src/test.xm src/.m (中間一個空格)
6,若是本身增長類,方法屬性等,要聲明的話
eg:
@interface yzdefine
- (void)vipReOpenPlayer;
@end
複製代碼
參考資料
更多資料,歡迎關注我的公衆號,不定時分享各類技術文章。