iOS逆向筆記彙總
####一.砸殼dumpdecrypted
1, ssh [email protected][裝置ip] (iP地址為裝置的iP地址)
2, ps -e (檢視需要砸殼的程序)
3, cycript -p (附加程序)
4, [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask][0] (檢視app在documents的地址)
5.scp ~/dumpdecrypted.dylib [email protected][裝置ip]:/var/mobile/Containers/Data/Application/2B4C6281-C015-4FF3-A8EC-5E5C7554D447/Documents (將砸殼的動態庫檔案存入到documets目錄下)
6.DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib/var/mobile/Containers/Bundle/Application/3F00BB3C-F56E-46B1-A785-562E0C130002/WeChat.app/WeChat (砸殼)
7.documents下的WeChat.decrypted為砸殼後的檔案
作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:656315826,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。
####二.匯出標頭檔案class-dump
class-dump -s -S -H <砸殼後的檔案> -o <檔案存放的目錄>
####三.THEOS越獄開發工具包
1.sudo git clone --recursive https://github.com/theos/theos.git /opt/theos (下載直接安裝到/opt/theos目錄下)
2.安裝dkkg ldid(安裝前需要下載homebrew套件管理工具)
homebrew:/usr/bin/ruby -e “$(curl -fsSL
brew install dpkg
brew install ldid
3.建立nic.pl工程。
export THEOS=/opt/theos
$THEOS/bin/nic.pl
4.根據不同的需求建立不同的包,然後make package install 執行3個步驟 編譯,打包,安裝(Makefile編譯的檔案後面會有文件)
5.將生成的deb安裝包放入/var/root/Media/Cydia/AutoInstall目錄下面。
####四.常用Tweak.xm預處理指令.(可以去http://iphonedevwiki.net/index.php/Logos檢視)
%hook classname 需要hook的類名字
%hook a
%end
%orig 列印原始函式,可以修改原始引數
%orig(@“fix the param”,param);
%log 該指令在%hook內部使用 將函式的類名,引數等資訊寫入到syslog
%log((NSString *)@“iosre”,(NSString *)@“debug”)
%group
hook分組需要%init來初始化這個分組,
%group a
%hook
-(void)a{
NSLog(@“aaaaa”);
}
%end
%end
%group b
%hook
-(void)b{
NSLog(@“bbbb”);
}
%end
%end
%hook springboard
-(void)method{
if(true){
%init(a);
}else{
%init(b);
}
}
%ctor 完成初始化init方法的作用(不需要以%end結尾)
%ctor{
%init();
}
%new
%hook c 動態建立一個c的class(相當於重新建立一個c的class)
%new
-(void)namespacenewmethod{
NSLog(@“We’ve added a new method to c”);
}
%end
%c
該指令的等同於objc_getclass或NSClassFromString,即動態獲取一個類的定義,在%hook或%ctor內使用
####五.cycript指令碼語言
可以通過獲取這個物件的記憶體地址來操作它的函式或者屬性.
uialertview:0x166b4fb0 比如說這個uialertview在記憶體中的地址是0x166b4fb0,可以直接呼叫它的api
[#0x166b4fb0 show]
#檢視當前佈局
UIApp.keyWindow.recursiveDescription().toString()
#檢視當前控制元件的父級元素
#控制元件在記憶體中的16進位制數地址.nextResponder()
control+d 退出cycript
cycript -p [程序id] 編輯這個程序中的指令碼
####六.openssh
ssh [email protected][ios裝置ip] (連線越獄手機的裝置)
openssh預設密碼:alpine
scp命令:
將本地檔案拷貝到遠端:
scp <本地檔案> [email protected]<遠端ip地址>:<遠端目錄>
將遠端檔案拷貝到本地:
scp [email protected]<遠端ip>:<遠端檔案目錄> <本地目錄>
####七.iFiles,iFunBox檔案管理工具
iFiles ios裝置檢視檔案系統
iFunBox mac裝置檢視ios裝置的檔案系統
####八.syslogd日誌清空
cydia下載syslogd外掛
cat /dev/null > /var/log/syslog
####九.二進位制檔案提取dyld_decache
因為ios 很多二進位制庫檔案被隱藏許多framwork庫檔案放進了cache裡面
chmod 777 /path/to/dyld_decache 9 (新增許可權)
匯出framework隱藏的二進位制檔案
./dyld_decache[v0.1c] -o <輸出目錄> dyld_shared_cache_armx
####十.reveal逆向分析
cydia中的外掛
Reveal Loader 1.0.0
安裝後,請重啟手機
連線除錯的程序就可以看到當前的ui
####十一.debugserver (動態除錯,附加子程序)
debugserver
- scp [email protected][iosip]:/Developer/user/bin/debugserver ~/debugserver
- lipo -thin armv7s ~/debugserver -output ~/debugserver (幫它減肥)
- /opt/theos/bin/ldid -Sent.xml debugserver (http://iosre.com/ent.xml) (新增task_fore_pid許可權)
4.scp ~/debugserver [email protected]:/user/bin/debugserver(將處理好的debugserver放回去)
5.debugserver ip:port -a “mobilesms” (附加mobilesms程序)
debugserver -x background ip:port /application/mobilesms.app/mobilesms(啟動mobilesms程序)
####十二.lldb
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb
使用usbmuxd能提升ssh的速度,lldb連線debugserver時間縮短至15秒內
usbmuxd
1./Users/beyond/Code/USBSSH (將python-client目錄下的tcprelay.py和usbmuxd.py兩檔案,複製到工作目錄)
2./Users/beyond/Code/USBSSH/tcprelay.py -t iOS的埠:mac上的埠 (即可將mac上的埠轉發到iOS上的埠)
3.debugserver附加springboard
ssh [email protected] -p mac埠
debugserver *:1234 -a “springboard”
4.將本地mac埠轉發到ios
5.lldb除錯
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb
作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:656315826,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。