IOS抓取與反抓取


IOS抓取基礎知識

  1. ARM64

    有道雲筆記:http://note.youdao.com/noteshare?id=7b723d832da60281c9bb20e9f56fe69e

  2. 脫殼與加殼

    有道雲筆記:http://note.youdao.com/noteshare?id=a7696c5d7181703460a28a481c5ee1b2

  3. Cycript

    有道雲筆記:http://note.youdao.com/noteshare?id=b81855b860d782408d96339e8856694c

  4. Reveal

    有道雲筆記:http://note.youdao.com/noteshare?id=13204fa4c5420bb386ff4b6a6f01b796

  5. 靜態分析

    有道雲筆記:http://note.youdao.com/noteshare?id=0959f43af232e788281f848105156b1b

  6. 動態分析

    有道雲筆記:http://note.youdao.com/noteshare?id=6944df80c03dd41cf23cec3eb761f772

  7. MachO文件

    有道雲筆記:http://note.youdao.com/noteshare?id=c7a6a87998df9df27e65029c390eaadf

  8. ASLR

    有道雲筆記:http://note.youdao.com/noteshare?id=8a4652f9374c2d54bac9f14692920f5a

IOS抓取方式

iOS破解

模擬器

  1. 黑雷蘋果模擬器
介紹

iOS應用需要運行在ARM架構上,不支持x86架構。如果要強行在x86架構的cpu上運行,就需要進行大量的代碼轉換工作。iOS大部分代碼閉源,這就造成整個模擬工作非常困難。目前市面上真正意義上的iOS模擬器只有黑雷。

局限
  1. 應用商店App量少

  2. 不能自由安裝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作弊

注入

介紹
  1. 靜態注入。修改原始的可執行文件,將需要執行的代碼事先插入可執行文件中。
  2. 動態注入。不改變原始的可執行文件,是在目標程序運行時才進行的注入行為。
方式
  1. 注入動態庫文件(越獄)

    將注入的dylib放入DynamicLibraries目錄下

  2. 使用DYLD_INSERT_LIBRARIES環境變量啟動(越獄)

    dyld會判斷環境變量是否存在,存在則會被加載

  3. 為可執行文件添加Load command(非越獄)

    設置LC_LOAD_DYLIB指向注入的dylib。重新打包、簽名就能安裝到未越獄手機

Hook方式

Method Swizzle

介紹

Method Swizzle利用Object-C的Runtime特性,動態改變SEL(函數編號)和IMP(函數實現)的對應關系,達到OC函數調用流程改變的目的。

詳細過程

(1)在Objective-C中調用一個方法,其實向一個對象發送消息,即查找消息的唯一依據是selector的名字,每一個SEL都對應着其方法實現真實的運行地址(IMP)。

method_swizzle1

(2)Method Swizzle可以使得兩個SEL所對應的IMP相互交換達到hook的目的。

method_swizzle2

(3)runtime機制

runtime1

符號表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持久化存儲
  1. keychain
  2. 剪切板

作弊方式

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. 改機軟件檢測
  2. 越獄檢測加強
  3. 盜版模式加強
  4. 增加調試檢測
  5. 增加注入檢測

1.經過近幾個月調研,總結了市面逆向課程與書籍。視頻包括《小馬哥iOS逆向》《Hank攻防對抗》,書籍包括《iOS黑客攻防秘籍》《iOS應用與安全》。

2.iOS逆向並不想Android逆向那樣百花齊放,主要受限於iOS大部分源碼閉源,分析難度大。

3.iOS注入與Hook方式有限,有效性地針對即可解決掉大部分爬蟲,剩余的少部分高手可以在對抗中慢慢優化。

4.爬蟲與反爬蟲是一個對抗的過程,想把基礎防御做好,剩下的在對抗中成長。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM