《iOS 應用逆向與安全》讀後感

2021-09-11 11:16:18 字數 4660 閱讀 1694

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_classnameobjc_methname

- 動態保護:反除錯、注入檢測、hook 檢測,越獄檢測、簽名檢測等;

雖然靜態混淆後不能猜到類名方法名的作用,但是如果採用動態的方式還是能知道某些方法的引數、以及加密後的資料等。這就是要防動態除錯。

- **混淆:提高分析難度

未混淆的**可以通過 hopper 和 ida 等彙編工具得到彙編**,甚至可以得到對應的偽**。為了提高分析難度,需要對**進行混淆。混淆主要通過 llvm。

《逆向管理》讀後感

這本書講了什麼內容 什麼背景 什麼方法,解決什麼問題 總結核心幾句話 如何應用日常生活 逆向管理,物件導向是公司中下層,想要往上爬,如何在公司裡獲得講好的影響力,公信力。如何應用日常生活 第一步 我們要達到目標,需要什麼條件 第二步 將需要的條件進行拆分,分解成子目標 第三步 目標指導自己接下來一周...

《區塊鏈原理設計與應用》讀後感

有的人國慶國外遊,國內遊,有的人國慶堵在高速路上,我國慶沒有出去玩,在家把楊保華的區塊鏈原理設計與應用書看了一遍。這本書國慶前就買了一直沒有時間看,總體感覺這書講的不是很深入,很適合區塊鏈入門者。另一部分是超級賬本fabric的實戰篇。講解了fabric的環境搭建和部署,及fabric的配置管理,還...

《誠實與信任》讀後感

前幾天,我們學習了 誠實與信任 這篇課文。讀完文中的故事,我不禁思緒萬千。其中,最讓我有感觸的是小紅車車主的一句話 不,人與人之間還有比金錢更重要的東西,你給我留下了誠實與信任,這比金錢更重要。上幼兒園的時候,爸爸 媽媽,還有老師就給我講過 狼和小羊 的故事,講 長鼻子 匹諾曹的故事 讓我明白 誠實...