iOS逆向工程- 工具詳解

前言

1、逆向工程的要求html

  1. 具有豐富的 iOS 開發經驗
  2. 最好能很是熟悉 iOS 設備的硬件構成,iOS 系統的運行原理。
  3. 拿到任意一個 App 以後可以大體推斷出它的項目規模和使用的技術,好比它的MVC模型,是怎麼創建的,引用了哪些 framework 和經典的開源代碼。

我的建議: 最好了解下若是進iOS系統的安全模式,由於有時候萬一系統搞壞了,能夠進入安全模式卸載掉有問題的插件。sql

若是你有更好的建議或者對這篇文章有不滿的地方, 請聯繫我, 我會進行修改,
聯繫我時,請備註iOS直播類APP開發流程解析(技術交流羣:763164022)
最後:
祝你們學習愉快~謝謝~
複製代碼

2、iOS 應用逆向工程的做用安全

通常的 App 防禦,感受就像是一個 , 將 App 的 MVC 佈置在城堡內部 , 外圍圈上厚厚的 ,看上去易守難攻。 可是當咱們站到高處,在天空中俯瞰這個 App 所在的城堡,它的內部結構就再也不是祕密。 若是咱們站在巨人的角度,那麼全部的 Objective-C 函數定義、全部的 property、全部的導出函數、全部的全局變量、全部的邏輯將徹底暴露在咱們面前。bash

iOS 逆向工程主要有兩個做用:app

  1. 分析目標程序,拿到關鍵信息,能夠歸類於安全相關的逆向工程;
  2. 借鑑他人的程序功能來開發本身的軟件。

3、安全相關的iOS逆向工程框架

  • 評定安全等級
  • 逆向惡意軟件
  • 檢查軟件後門
  • 去除軟件使用限制

4、iOS應用逆向工具ide

1、class-dum函數

簡介: 顧名思義,就是用來導出目標對象的class信息的工具,私有方法聲明也能導出來。工具

原理: 利用 Objective-C語言的 runtime 特性,將存 在Mach-O 文件中的頭文件信息提 出來,並生成對應的 .h 文件。學習

使用方法: 1,下載而後將class-dump 複製到「 /usr/bin」目錄下。 2,執行sudo chmod 777 /usr/bin/class-dump」命令賦予其執行權限。 3,class-dump執行:

class-dump -S -s -H /Applications/Calculator.app -o 
/Users/zhangdasen/Desktop/test
複製代碼

4,上面一段代碼就是導出Mac下計算器app的頭文件,到桌面test文件夾,而且排序,class-dump的一些參數,你們能夠本身在命令行輸入class-dump而後回車就有相關說明。

使用注意

從 AppStore 下 的 App 都是通過加密的,可執行文件被加上了一層"殼"。 class-dump 應付不了這樣的文件,此時使用 class-dump 看上去會「失效」。還得先用別的工具把殼砸開才行,這個後面會說到。

2、Theos越獄開發工具包

簡介

Theos:是一個越獄開發工具包,由iOS越獄界知名人士Dustin Howett(@DHowett)開發並分享到 GitHub 上。

iOSOpenDev:是整合在 Xcode裏的越獄開發工具, 熟悉Xcode 的朋友可能會對它更感興趣。但逆向工程接觸底層知識較多,不少東西沒法自動化,所以推薦使用整合度並不算高的 Theos,當你手動完成一個又一個練習時,對逆向工程的理解必定會更深。

Theos的用法介紹:

  1. 更改工做目錄

  2. 更改工做目錄至經常使用的 iOS 工程目錄(如 「 /Users/zhangdasen/Code/」) 注:爲什麼要作這一步呢,由於使用Theos建立的工程,是你在哪一個目錄執行的nic.pl啓動的,就會在建立完成後在這個目錄生成建立的Theos項目。

  3. 建立工程 終端輸入「/opt/theos/bin/nic.pl」,啓動 NIC(New Instance Creator)

  4. 工程文件說明 建立好工程就會生成四個文件: Makefile、Tweak.xm、control、iOSREProject.plist 下面進行簡單說明。

Makefile

Makefile 文件指定工程用到的文件、框架、庫等信息,將整個過程自動化,下圖爲裏面內容說明。

補充:

  • 導入 private framework
iOSREProject_PRIVATE_FRAMEWORKS = private framework name
複製代碼
  • 連接 Mach-O 對象(Mach-O object)
iOSREProject_LDFLAGS = -lz –lsqlite3.0 –dylib1.o
複製代碼

Tweak.xm

用 Theos 建立 tweak 工程, 認生成的源文件是 Tweak.xm。 若是後綴名是單獨一個「 x」,說明源文件支持 Logos 和 C 語法; 若是後綴名是「 xm 」,說明源文件支持 Logos 和 C/C++ 語法,與「 m 」和「 mm 」的區別相似。 Tweak.xm 語法衆多,在這裏簡單介紹一些 ● %hook 指定須要 hook 的 class, 必須以 %end 結尾

%hook SpringBoard 
- (void)_menuButtonDown:(id)down {
     NSLog(@"You've pressed home button.");
     %orig; // call the original _menuButtonDown: 
}
%end
複製代碼

● %orig該指 在 %hook 內部使用,執行被 (hook)的 數的原始代碼,以下:

%hook SpringBoard 
- (void)_menuButtonDown:(id)down {
       NSLog(@"You've pressed home button.");
       %orig; // call the original _menuButtonDown: }
%end
複製代碼

還能夠利用 %orig 更改原始 數的參數,例如:

%hook SBLockScreenDateViewController 
- (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2 {
         %orig(@"iOS 8 App Reverse Engineering", arg2); }
%end
複製代碼

control文件

control文件 錄了deb包管理系統所需的基本信息,會被打包進deb包裏。 iOSREProject 裏 control 文件的內容以下:

control 文件中能夠自定義的字段還有不少,但上面這些信息就已經足夠了。更全面的 說明能夠參閱 debian 的官方網站( www.debian.org/doc/debian-…)

iOSREProject.plist文件

簡單來講就是裏面描述了tweak 的做用範圍,也就是須要做用的APP的bundle identifier。

也就是在建立項目的時候填寫的

工具獲取與感謝

iOS逆向知識,變幻無窮,無窮無盡,須要學習的太多了,國內文章知識仍是比較少,逆向的書籍也是比較少,逆向開發方面的進步也須要咱們國人也要努力。

相關文章
相關標籤/搜索