1. 程式人生 > >iOS 反編譯入門

iOS 反編譯入門

最近看了幾篇關於 APP 安全方面的文章,其實網上關於 iOS 反編譯相關內容的文章都大同小異,這篇部落格也就是對這方面內容做一個整理。

class-dump

  • 作用:匯出應用的標頭檔案,算是逆向工程的入門級工具

  • 安裝:開啟 .dmg 檔案,將 class-dump 檔案拉到 /usr/local/bin 目錄下,這樣就可以在終端使用 class-dump 命令了。

class-dump

Hopper Disassembler

  • 作用:二進位制反彙編器,反編譯和除錯,可以拆開任何二進位制。

演示專案

  • 新建專案,在 ViewController 的 .h 和 .m 檔案中寫如下程式碼,然後執行專案

.h

.m

  • 獲取APP包(資源庫/Developer/Xcode/DerivedData/剛剛執行的APP/Build/Products/Debug-iphonesimulator/APP包)-> 顯示包內容 -> 將二進位制檔案拿到桌面新建立的資料夾中

資料夾

  • 進入終端,在資料夾目錄下執行 class-dump -H 反編譯app,在資料夾中就會匯出標頭檔案

終端

資料夾

.h

  • 開啟 Hopper Disassembler,將二進位制檔案拉入,點選工具欄中間的 if(b) f(x); 切換成虛擬碼模式,這樣方法裡面的邏輯就展示出來了(這裡有個問題是,別人的 NSLog 中列印的文字可以顯示出來,我的就不顯示)

Hopper Disassembler

總結

iOS 反編譯技術最重要的是細心加耐心,我也是關注 APP 的安全性,從而發散學習一下,沒有深入去研究。首先我在工作中並沒有運用到反編譯技術,其次也不想把太多時間浪費其中。

還有好多方便實用的工具沒有一一介紹,比如和 Hopper Disassembler 差不多的 IDA、UI 層解析工具 Reveal 等等,以後有時間或者工作需要再深入研究。

最最主要的是,以後開發要把重要邏輯封裝到靜態庫裡,大大降低被反編譯的可能。