你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> ios逆向

ios逆向

編輯:IOS開發綜合

雖然iOS系統相比於其他手機操作系統相對安全,但是這個安全並不是絕對的,我一直相信,道高一尺魔高一丈。此文想以實際例子出發,告訴大家,如何去反編譯一個app,並且從某個角度來說,iOS沒有傳說中的“安全”

這裡只最簡單的結論給大家,具體原理以及工具的詳細使用,請各位自行Google,為什麼這麼做呢,因為我想用最簡單的語言,讓沒有匯編基礎的同學也能明白。

將用以下幾個方面來闡述我的觀點:

  • iOS app可以“有條件”地被反編譯
  • 脫掉App Store“二制文件”穿上的外衣
  • 如何利用工具去反編譯
  • 在感趣的地方生成
  • 如何防反編譯
iOS app可以“有條件”地被反編譯

首先,告訴大家一個不幸的消息,上架至App Store的app,被apple加密了。所以標題才是“有條件”才能進行反編譯,令人欣喜的是,在debug下產生的ipa或者是release下的ipa包或者是渠道包(各種應用市場能下的ipa包)都能直接反編譯。

 

脫掉App Store“二制文件”穿上的外衣

當然,引言已經說了,道高一尺魔高一丈,就算是被apple加密的ipa,其實也是可以反編譯的,只不過相對麻煩罷了。

來來來,給你們幾個工具,就可以解掉apple的加密了。

  • clutch
  • dumpdecrypted
  • gdb
  • AppCrackr

如何利用工具去反編譯

(1)下面介紹兩個工具class-dumpHopperDisassembler

class-dump 官網地址:我這裡下載的是 class-dump-3.5.dmg 版本的。雙擊.dmg 文件,將 class-dump 拉倒 /usr / local / bin 目錄下(此目錄是隱藏文件夾,可以自行Google顯示後再copy進去),這樣就可以在終端使用 class-dump 命令了.

HopperDisassembler官網地址

(2)先撸一個最簡單的app來做小白鼠。下載地址(包含二進制文件&dump結果)。

 

看圖,就是這樣,我只改了ViewController這個類。

\

 

(ViewController.h)

 

\

 

(ViewController.m)

 

由代碼可以看出,我就寫了兩個方法testClassDump和testHideClassDump,後者沒有聲明在.h中(ps:我想試驗這樣能不能被反編譯到)

 

ok,前戲都做完了,可以開始干活了。

我們run一下工程,然後打開DecompilingTest.app所在目錄,顯示包內容,拿到二進制文件。

 

\

 

然後我是復制到桌面,然後執行下述命令,即可拿到工程中的.h文件。

\

OK,得到下述結果,我們看看拿到的ViewController.h裡面,能拿到什麼方法

 

\

事實證明,沒有聲明的方法也被dump出來了。

 

下一步我們要做的就是看看能不能拿到這兩個方法的具體實現了,接下來我們用HopperDisassembler來試試。

Hopper Disassembler的用法很簡單,只要將二進制文件拖進去就行了。看看拖進去之後的結果。

 

\

 

此時心中一萬頭草泥馬飛奔而過,一堆匯編語言寶寶看不懂啊。

 

在感興趣的地方生成偽代碼

Don't worry!點右上角的if(b)f(x);按鈕,我們能看到這個方法的偽代碼,大部分的時候我們能從偽代碼中看出我們需要的信息。

結果如下:

\

(偽代碼1:testClassDump)

\

 

(偽代碼2:testHideClassDump)

 

至此,兩個方法都被反編譯出來了!!

 

這裡需要注意,就算方法沒有聲明在.h中,也能被dump,之後就能被反編譯了。

如何防反編譯

說了這麼多,我們預防呢,是不是需要像Java的一樣加上各種復雜的混淆呢。

其實我覺得大可不必,本身反編譯成本就很大,代碼這麼多,一個個反編譯過來是在蛋疼,就算有偽代碼也需要理解,而且有些代碼就算有偽代碼也很難理解。

 

只要做好核心代碼,做好混淆就行了,比如涉及到密碼,核心算法。

 

總結

沒有絕對安全的系統,也沒有黑客破不掉的系統,所有需要的只是時間而已。

 


  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved