IOS抓取基礎知識
-
ARM64
有道雲筆記:http://note.youdao.com/noteshare?id=7b723d832da60281c9bb20e9f56fe69e
-
脫殼與加殼
有道雲筆記:http://note.youdao.com/noteshare?id=a7696c5d7181703460a28a481c5ee1b2
-
Cycript
有道雲筆記:http://note.youdao.com/noteshare?id=b81855b860d782408d96339e8856694c
-
Reveal
有道雲筆記:http://note.youdao.com/noteshare?id=13204fa4c5420bb386ff4b6a6f01b796
-
靜態分析
有道雲筆記:http://note.youdao.com/noteshare?id=0959f43af232e788281f848105156b1b
-
動態分析
有道雲筆記:http://note.youdao.com/noteshare?id=6944df80c03dd41cf23cec3eb761f772
-
MachO文件
有道雲筆記:http://note.youdao.com/noteshare?id=c7a6a87998df9df27e65029c390eaadf
-
ASLR
有道雲筆記:http://note.youdao.com/noteshare?id=8a4652f9374c2d54bac9f14692920f5a
IOS抓取方式
iOS破解
模擬器
-
黑雷蘋果模擬器
介紹
iOS應用需要運行在ARM架構上,不支持x86架構。如果要強行在x86架構的cpu上運行,就需要進行大量的代碼轉換工作。iOS大部分代碼閉源,這就造成整個模擬工作非常困難。目前市面上真正意義上的iOS模擬器只有黑雷。
局限
-
應用商店App量少
-
不能自由安裝ipa
每個app都需要單獨適配,就算支持ipa大概率也無法啟動
改機軟件
常用改機軟件
AWZ、NZT、ALS、iGrimace、361、hdFaker
檢測
判斷 /Applications/XXX.app 和 /Library/MobileSubstrate/DynamicLibraries/XXX.dylib 文件存在
可更改屬性
有道雲筆記:http://note.youdao.com/noteshare?id=00c99994f248dd484616115fec3ce804
注入與Hook(越獄下實現作弊)
注入方式
1.注入動態庫文件
2.使用DYLD_INSERT_LIBRARIES環境變量啟動
3.為可執行文件添加Load command
Hook方式
1.Method Swizzle
2.符號表hook
3.Cydia Substrate
重打包(非越獄下實現作弊)
介紹
修改或添加功能后將應用重新打包簽名,通過pp助手、iTune等工具進行安裝
方式
1.完全重簽名
2.非完全重簽名
iOS作弊
注入
介紹
- 靜態注入。修改原始的可執行文件,將需要執行的代碼事先插入可執行文件中。
- 動態注入。不改變原始的可執行文件,是在目標程序運行時才進行的注入行為。
方式
-
注入動態庫文件(越獄)
將注入的dylib放入DynamicLibraries目錄下
-
使用DYLD_INSERT_LIBRARIES環境變量啟動(越獄)
dyld會判斷環境變量是否存在,存在則會被加載
-
為可執行文件添加Load command(非越獄)
設置LC_LOAD_DYLIB指向注入的dylib。重新打包、簽名就能安裝到未越獄手機
Hook方式
Method Swizzle
介紹
Method Swizzle利用Object-C的Runtime特性,動態改變SEL(函數編號)和IMP(函數實現)的對應關系,達到OC函數調用流程改變的目的。
詳細過程
(1)在Objective-C中調用一個方法,其實向一個對象發送消息,即查找消息的唯一依據是selector的名字,每一個SEL都對應着其方法實現真實的運行地址(IMP)。
(2)Method Swizzle可以使得兩個SEL所對應的IMP相互交換達到hook的目的。
(3)runtime機制
符號表hook
原理
修改符號表所指向的內存地址。
詳細過程
dyld 通過更新 Mach-O 二進制文件 __DATA 段中的一些指針來綁定 lazy 和 non-lazy 的符號;而 fishhook 先確定某一個符號在 __DATA 段中的位置,然后保存原符號對應的函數指針,並使用新的函數指針覆蓋原有符號的函數指針,實現重綁定。
Mach-O文件中只有我們自己寫的函數,系統的動態庫的函數不在Mach-O文件中。每次啟動從Mach-O文件到系統動態庫函數的偏移地址都是變化的。
ASL技術
地址空間布局隨機化。它會讓Mach-O文件加載的時是隨機地址。有了這個技術,Mach-O文件每次加載進內存時地址都是不一樣的(目的是防止逆向技術)。
Mach-O文件如何鏈接外部函數(系統函數)?
蘋果為了能在Mach-O文件中訪問外部函數,采用了一個技術叫PIC(位置代碼獨立)技術。
當應用程序想要調用Mach-O文件外部函數(系統的庫函數)的時候,流程如下:
(1)先在Mach-O文件的_DATA段中建立一個指針(8字節的數據,放全0),這個指針變量指向外部函數。
(2)DYLD會動態進行綁定,將Mach-O中的_DATA段中的指針,指向外部函數。
應用底層代碼是匯編,匯編的內存地址是寫死的。C的底層也有動態的表現。C在內部函數的時候是靜態的,在編譯后,內存地址就確定了。但外部函數是不能確定的,也就是說C底層也有動態。fishhook之所以能hook c函數,是利用Mach-O文件的PIC技術,通過DYLD對動態綁定做手腳。
finshhook的原理其實是,將指向系統方法(外部函數)的符號重新進行綁定執行內部的函數。這樣就把系統方法與自定義方法進行交換。
Cydia Substrate
原理
Cyida substrate 中的MSHookFunction,該函數會修改hook的函數的前8個字節,使該函數跳轉到我們設定的新函數地址。(inline hook)
詳細過程
先調用MSGetImageByName獲取需要hook的函數的動態庫地址,再調用MSFindSymbol查找需要hook的函數地址,最后調用MSHookFunction修改數據。
設備指紋
IDFA
廣告標識符;當用戶手動關閉廣告追蹤時會導致無法獲取,重新開啟后會生成新的標識符
IDFV
供應商標識符;屬於同一個Vender,共享同一個idfv的值。app刪除后IDFV重新生成
OpenUDID
將新生成的ID保存至剪切板與沙盒的Preferences目錄中
SimulateIDFA
1.不穩定信息。系統啟動時間、硬盤使用空間、運營商名稱、系統版本
2.穩定信息。國家代碼、本地語言、設備名稱、內存、機型、核心服務文件創建時間
將穩定信息與不穩定信息結合生唯一標識
ID持久化存儲
- keychain
- 剪切板
作弊方式
root權限獲取
設備基本信息篡改
常見刷量修改參數有序列號、MAC地址、系統版本、機器名稱、IDFA、IDFV、WIFI、位置信息等
數據清除
1.應用數據清除。清空應用沙盒目錄
2.清除keychain
3.清除剪切板
變更IP
1.VPN或HTTP代理服務器
2.SIM卡變更運營商分配地址
反越獄檢測
Hook相關文件判斷函數。一般判斷是否越獄通過Cydia和其他相關文件是否存在。
iOS抓取流程
界面分析
1.Reveal:直接查看到界面
2.Cricript:通過命令行的方式,查看控制器的結構、控制器的方法、控制器的成員變量等等
抓包分析
1.tcpdump、Wireshark、Charles抓包分析
代碼分析
1.對Mach-O文件的靜態分析(ios所有的代碼在打包后都會在Mach-O文件中)
2.分析工具:MachOView、class-dump、Hopper Disassembler、ida等
動態分析
1.將代碼跑到內存中,進行流程分析,對代碼進行調試
2.debugserver、LLDB
代碼編寫與注入
1.Hook代碼編寫
2.注入代碼
3.必要時可能需要重新簽名、打包
IOS反抓取應對方式
分析應對
1.函數名混淆
2.字符串加密
3.代碼混淆
https://www.jianshu.com/p/628a0c232c2a
越獄應對
1.判斷cydia相關文件是否存在
2.直接訪問cydia路徑
3.stat函數判斷文件
使用c代碼stat相關路徑,/Application/Cydia.app
4.獲取動態庫列表查看動態庫
獲取所有動態庫,查看是否存在異常dylib
5.檢測環境變量DYLD_INSERT_LIBRARIES環境變量
檢測是否存在DYLD_INSERT_LIBRARIES
6.檢測函數是否被劫持
stat函數是否出自libsystem_kernel.dylib
https://blog.csdn.net/yiyaaixuexi/article/details/20286929
盜版應對
1.檢測BundleID
2.檢測來源是否為App Store
判斷LC_ENCRYPTION和LC_ENCRYPTION_INFO_64信息是否加密
3.檢測重簽名
通過embedded.mobileprovisio配置文件中UUID和賬號前綴來判斷重簽名檢測
4.代碼校驗
獲取內存中運行代碼的MD5值,與其真實值做對比
調試應對
1.調用ptrace函數跟蹤與調試
2.調用syscall函數執行系統調用
3.調用syscall函數獲取進程信息
通過判斷P_TRACE標識檢測是否在調試
4.調用isatty函數檢測終端
如果調試器運行,就能檢測到終端
5.ioctl獲取終端信息
如果能夠獲取到終端信息,說明正在調試器運行
http://bbs.iosre.com/t/topic/8179
http://www.iosre.com/t/topic/9351
注入應對
1.DYLD_INSERT_LIBRARIES 檢測
2.動態庫列表白名單
https://juejin.im/entry/5c9242126fb9a070eb267474
iOS反抓取之我希望發展方向
- 改機軟件檢測
- 越獄檢測加強
- 盜版模式加強
- 增加調試檢測
- 增加注入檢測
結
1.經過近幾個月調研,總結了市面逆向課程與書籍。視頻包括《小馬哥iOS逆向》《Hank攻防對抗》,書籍包括《iOS黑客攻防秘籍》《iOS應用與安全》。
2.iOS逆向並不想Android逆向那樣百花齊放,主要受限於iOS大部分源碼閉源,分析難度大。
3.iOS注入與Hook方式有限,有效性地針對即可解決掉大部分爬蟲,剩余的少部分高手可以在對抗中慢慢優化。
4.爬蟲與反爬蟲是一個對抗的過程,想把基礎防御做好,剩下的在對抗中成長。