by 知識小集 · lefe_x最近各大「**」都在報道《ios應用逆向與安全》這本書,這是自「小黃書」出版後的又一本關於逆向安全的書。而目前很多 ios 開發者對逆向還非常「小白」,以至於盲目地覺得逆向很難、很厲害。而這本書的出現,無疑為逆向這個世界開啟了另一扇窗,我們一起看看這扇窗裡究竟「藏」了什麼。本文並不打算介紹書中具體細節,只是說明每一章都講了哪些內容,點到為止。
逆向流程:逆向的整個流程基本是相同的,而這些流程可以總結為:
**應用場景:**掌握逆向肯定非常有用,如果你想從事安全方面的工作,可以深究,否則不必投入太多的精力,畢竟正向開發中很少用到逆向知識。學習逆向知識可以總結為:
加深對正向開發的理解,比如 runtime;
本章主要講解越獄在逆向中的作用及越獄工具的使用。這裡需要強調一點,逆向不一定需要越獄,而想要更好地掌握逆向的原理,一台越獄裝置是必不可少的。目前市面上很多越獄工具,也提供了一鍵越獄,讀者可自行搜尋。
登入越獄裝置:
sudo ssh root@手機ip位址
複製**
登入成功即可對越獄裝置進行操作了。作者還介紹了其它登入越獄裝置的方式,使用公鑰匙登入,usb 登入。
檔案目錄:
越獄必備工具
你可能僅僅停留在對這些工具(dumpdecrypted、clutch、class-dump、reveal、cycript、charles、wireshark)的使用上,比如我。而作者卻給我們講解了原理,可見他的功力很深。
dumpdecrypted
dumpdecrypted 是乙個開源的工具,它會注入可執行檔案,動態地從記憶體中 dump 出解密後的內容。clutch
除了使用 dumpdecrypted 進行解密,clutch 也可以做到。不過作者提到使用這個經常會出錯,建議使用 dumpdecrypted。
class-dump
複製**
reveal
cycript
charles、wireshark
介紹了這兩個抓包工具的使用。
這一章主要介紹正向開發的一些知識,而這些知識對逆向開發很重要。
ipa 包
獲取應用的 ipa 包,主要可以通過兩種方式獲取:
應用包的構建過程:
介面與事件傳遞
介紹了 ios 中的 ui 、事件傳遞和事件響應。
類與方法
主要介紹了類的底層實現,oc 中的訊息機制,runtime 的一些使用場景。
前面四章主要為後四章做乙個鋪墊,從接下來的章節中正式開啟了逆向。本章主要從靜態分析和動態除錯來介紹逆向。
基於檔案格式;
基於二進位制反彙編;
反彙編
hopper 只支援 mac 和 linux,相對於 ida 比較弱一些。而 ida 支援 windows 平台。
靜態庫分析
有時候想看某個靜態庫的實現,其實也可以使用 hopper 檢視他的彙編**。
➜ 5.1 靜態分析 ls
crashlytics userlogin
➜ 5.1 靜態分析 lipo -info crashlytics
architectures in the fat file: crashlytics are: armv7 armv7s i386 x86_64 arm64
➜ 5.1 靜態分析 lipo crashlytics -thin arm64 -output crashlytics_arm64
➜ 5.1 靜態分析 mkdir objects
➜ 5.1 靜態分析 cd objects
➜ objects ar -x ../crashlytics_arm64
➜ objects grep "upload" -rn ./
binary file . matches
binary file . matches
binary file . matches
➜ objects otool -l crashlytics.o|grep bitcode
sectname __bitcode
複製**
動態除錯
動態除錯是在程式執行的時候執行一系列操作,比如獲取某個物件的值,執行上下文等。
lldb 動態除錯:正向開發中常會使用到 lldb 來除錯程式,而在逆向中它也發揮很大作用。
用 xcode 除錯第三方應用:使用 xcode 在非越獄裝置中除錯第三方應用、進行符號的還原、檢視帶符號的堆疊呼叫。不過除錯的時候需要乙個第三方應用。
theos
越獄開發中除了 thoes 外還有乙個叫 iosopendev 的工具,功能和 thoes 是一樣的,不同點是iosopendev 是整合到 xcode 中使用的,而 monkeydev 和 iosopendev 屬於同一型別的工具。
monkeydev
monkeydev 是作者開發的乙個工具,主要用 xcode 進行越獄開發。具體使用可以檢視 monkeydev 的 wiki 。
這一章,看著比較吃力。很多都沒接觸到,這裡簡單的做個介紹,如果以後用到這部分內容再繼續深究。
程式載入
在程式執行 main 函式之前,都做了哪些事。
mach-o 檔案格式
對於每個 ipa 包,都會包含乙個可執行檔案,而這個檔案就是 mach-o 檔案。
arm 彙編
逆向如果想看懂**,那麼必須學會彙編。
hook
hook 直譯為 鉤子,通過 hook 可以改變程式執行邏輯。hook 最常見的有以下三種方式:
通過 runtime 交換方法的實現。
fishhook 是 facebook 開源的乙個庫。
a library that enables dynamically rebinding symbols in mach-o binaries running on ios.動態庫
特點:這章主要應用前幾章學到的知識。而逆向開發可以在越獄裝置和非越獄裝置中開發。
越獄裝置
使用 class-dump 匯出標頭檔案,匯出標頭檔案時加上 -a 引數可以顯示方法在檔案中的實現位址;
符號還原,方便後續使用 lldb 進行除錯;
分析某個應用時,需要從介面入手,使用 reveal 檢視介面的層級結構,定位到具體的檢視控制器,從頭檔案找到對應的方法;
根據找到的方法,使用 lldb 新增斷點,驗證是否會呼叫對應的方法,以確定是否為需要找的方法;
使用 hopper 檢視偽**,猜測具體的實現方式;
非越獄裝置
frida 實戰應用
frida 是一款跨平台的注入工具,通過注入 js 與 native 的 js 引擎進行互動,從而執行 native 的**進行 hook 和動態呼叫。這個工具可以用於 android 和 ios,它可以通過一段 js 來除錯應用。
- 資料加密:靜態字串、本地儲存及網路傳輸加密
不管是本地的資料還是網路中傳輸的資料,對敏感資料需要採用加密演算法進行加密處理,而常用的加密演算法有 aes,rsa。對於網路傳輸的資料可以使用 aes+rsa 的方式對資料進行加密,如果使用 https 的方式需要對證書進行校驗。而對於一些常量字串有時候也需要加密處理,以防止被靜態分析。這裡作者提使用 libclang 方式,具體 原始碼。
- 靜態混淆:類名、方法名、屬性的混淆;
使用 class-dump 匯出的標頭檔案很容易根據名字知道某個類,方法的作用,這時候需要對類名,方法名進行混淆。第一種方法:通過巨集定義混淆,在 pch 檔案中比如這樣寫#define myclass 89s343ss
。網上有乙個開源的庫 ios-class-guard。第二種方法:二進位制修改,修改可執行檔案的__obj_classname
和objc_methname
。
- 動態保護:反除錯、注入檢測、hook 檢測,越獄檢測、簽名檢測等;
雖然靜態混淆後不能猜到類名方法名的作用,但是如果採用動態的方式還是能知道某些方法的引數、以及加密後的資料等。這就是要防動態除錯。
- **混淆:提高分析難度
未混淆的**可以通過 hopper 和 ida 等彙編工具得到彙編**,甚至可以得到對應的偽**。為了提高分析難度,需要對**進行混淆。混淆主要通過 llvm。
《逆向管理》讀後感
這本書講了什麼內容 什麼背景 什麼方法,解決什麼問題 總結核心幾句話 如何應用日常生活 逆向管理,物件導向是公司中下層,想要往上爬,如何在公司裡獲得講好的影響力,公信力。如何應用日常生活 第一步 我們要達到目標,需要什麼條件 第二步 將需要的條件進行拆分,分解成子目標 第三步 目標指導自己接下來一周...
《區塊鏈原理設計與應用》讀後感
有的人國慶國外遊,國內遊,有的人國慶堵在高速路上,我國慶沒有出去玩,在家把楊保華的區塊鏈原理設計與應用書看了一遍。這本書國慶前就買了一直沒有時間看,總體感覺這書講的不是很深入,很適合區塊鏈入門者。另一部分是超級賬本fabric的實戰篇。講解了fabric的環境搭建和部署,及fabric的配置管理,還...
《誠實與信任》讀後感
前幾天,我們學習了 誠實與信任 這篇課文。讀完文中的故事,我不禁思緒萬千。其中,最讓我有感觸的是小紅車車主的一句話 不,人與人之間還有比金錢更重要的東西,你給我留下了誠實與信任,這比金錢更重要。上幼兒園的時候,爸爸 媽媽,還有老師就給我講過 狼和小羊 的故事,講 長鼻子 匹諾曹的故事 讓我明白 誠實...