iOS IPA 安全問題

iOS 如何做才安全:

1、首先,我們可以通過軟件 下載 AppStore的ipa文件(蘋果 把開發者上傳的ipa進行了加殼再放到AppStore中),

得到ipa文件 可以分析APP 里包含的一些資源,如:圖片、plist文件、靜態wap頁、.bundle 等。

所以不要 在plist文件、項目中的靜態文件中 存儲關鍵的信息,如果要保存,記得加密(這樣可以增加破解的難度)。

2、我們可以用軟件 查看 APP的沙盒,查看里面存儲的 文件:sqlite、plist(NSUserdefault會存到Library下的Preferences中 的 plist文件中)、圖片等,NSUserdefault 中不要保存關鍵信息,如果要保存,還是加密吧。。sqlite也是這樣子的。

3、 用 工具 對加殼的ipa 進行脫殼(越獄手機 直接用PP助手下載的就是 脫殼的ipa),再用IDA、Hopper 進行反編譯,進行分析 ,可以得到 近乎易懂的 偽代碼。

所以 不要在 代碼 中保存關鍵信息,比如接口通信中 AES加密的密鑰,可以通過接口獲取 這些關鍵數據。

如果要保存關鍵數據(比如:密鑰 等),可以保存加密后的關鍵數據,運行的時候進行解密獲取真實的數據。這樣可以增加破解的難度。

密鑰要定期更換。比如 3個月 或半年換一次,如果密鑰是從接口獲取的,直接修改服務端就可以了。

如果密鑰是寫在代碼里的。就等APP升級新的版本的時候,新版本的APP和其對應的接口版本 修改為新的密鑰 就可以了。舊的接口版本和APP版本還用以前的密鑰,等強制更新的時候才會失效。

如果一個APP 一個密鑰用上幾年都不變 ,是很危險的。離職的人員都可以直接用以前 的代碼 來獲取相關的數據。特別是 支付相關的,有的服務端甚至沒有 去校驗支付的金額或其他數據,導致 離職人員用1分錢 可以買到 任何價格的 線上產品。。

最好能 進行 代碼混淆,能增加反編譯的難度,當然只是增加了難度,還是能破解的。

4、用https也是可以被抓包并解析的,所以網絡通信 一定要用自己的加密方式 進行加密。

接口返回的數據 最好也進行 加密。

可以這么說:無論 你怎么做,理論上都是可以破解的,但是 破解人員也要考慮成本。。

有的銀行的APP,只用了https,通信都不加密,很容易就拿到明文數據了。有的APP里的各種數據都 采用復雜的加密算法,破解人員看到都煩,去破解這個APP的時間還不如去搞其他的幾個APP。

一、ipa文件

1、AppStore里的ipa包 可以通過 iTunes 下載到電腦。iOS8.3以下系統的非越獄的手機上,可以用MAC上的PP助手等軟件,直接把手機上的ipa文件(包含沙盒里的存儲文件)拷貝到電腦。

如果是越獄手機,都可以用PP助手、itools直接把ipa導出到電腦,并且可以用PP助手、iExplorer、itools這些工具 查看 iOS的系統目錄。

MAC上安裝 iExplorer軟件,用iExplorer 可以看到 手機(非越獄也可以) 在 iTunes上備份的內容。

如果你在幫測試美女的手機 調試問題的時候, 在 iTunes上設置 “連接次iPhone時自動同步”(或者點擊 備份到本地電腦),默認該手機上的照片、短信等內容都會備份到你的電腦上,用 iExplorer 就可以看到 這位 美女的隱私。

曾經有次不小心看到同事的隱私信息,所以現在都比較注意這塊,避免引發誤會。

2、拿到ipa文件后,解壓縮,得到.app文件,右鍵顯示包內容,可以看到里面的app中的圖片、js、plist、靜態H5頁 等資源。

比如 你要 用微信里的默認表情包,解壓微信的ipa包就可以獲取到。

3、iOS的系統目錄和MAC上的都類似(類unix系統)。iOS系統的目錄圖:

Paste_Image.png

二、沙盒 中的數據

iPhone上 計算器的沙盒:

Paste_Image.png

.app文件:應用程序本身的數據,打包時候的一些資源文件(如:圖片、plist等文件)、可執行文件。這個目錄不會被iTunes同步。

Documents :存儲不可再生 的關鍵數據。不會被iTunes同步

Library:保存配置文件和其他一些文件。NSUserDefault 會存儲到 Library下的Preferences中 的 plist文件中。可以直接打開,所以 也不要在 NSUserDefault 中存一些 關鍵數據,或者 存儲的時候 進行 AES等方式的加密。

Library/Caches可以用來保存可再生的數據,比如網絡請求,用戶需要負責刪除對應文件。

這個目錄(除了Library/Caches外)會被iTunes同步

tmp:臨時文件。不需要的時候,手動將其內文件刪除。(當應用不再運行的時候,系統可能會將此目錄清空。)

這個目錄不會被iTunes同步

存到沙盒的數據都是不安全的,關鍵數據一定 要做加密存儲。

三、Reveal 工具:查看 任意APP 的UI結構

1、不越獄的手機 可以用 Reveal 來查看自己APP的UI結構。不能查看其他APP的UI結構。這里就不再描述了。

2、越獄手機 上可以查看 任何APP的UI結構。

在越獄的手機上,在 Cydia 搜索并安裝 Reveal Loader,如果搜索不到。就 點下面的“軟件源”,選擇“BigBoss”,選擇“全部軟件包”,點右邊R的字母,去一個個找到 Reveal Loader,放心吧,你一定能找到的,我用的iOS7.1的系統測試的,沒問題。

安裝完成后,打開“設置”頁面,下拉到最底部,點擊“Reveal”

3、點擊 Enabled Applictions 。然后選中 你想分析的APP。

4、確保iOS和OSX在同一個IP網段內。打開想分析的 APP,如果該APP已經啟動,則關閉后再次啟動

5、打開MAC上的 Reveal,選中 左上方列表里的 APP,比如QQ:

Paste_Image.png

6、如果 Reveal

左上方 一直顯示:No Connection。說明iPhone上的 Reveal Loader 沒安裝成功,需要配置一下。

首先從MAC上

用PP助手或 iTools 查看“文件系統(系統)”--》Library文件夾,看 Library文件夾下面有沒有 RHRevealLoader

文件夾,如果沒有,就 右鍵 新建文件夾,并修改名字為:RHRevealLoader。

在Mac

下打開已經安裝的Reveal,選擇標題欄Help下的Show Reveal Library in Finder 下的 iOS library

選項,將會顯示如下界面:

Paste_Image.png

將libReveal.dylib 文件通過PP助手拷貝到剛才創建的RHRevealLoader文件夾下,就可以了。

然后 從手機上打開APP, 再 打開 MAC上的 Reveal 軟件,左上方 就會出來 相關APP的選項。

再發個 淘寶中的天貓模塊吧:

Paste_Image.png

三、反編譯工具:IDA

從AppStore下載的ipa都是加殼的(蘋果

把開發者上傳的ipa進行了加殼再放到AppStore中),加殼的ipa要先去殼,可以用clutch、dumpdecrypted、使用gdb調試 等解密去殼工具

如果你有越獄手機,可以直接

從 PP助手上下載ipa包,這個就是 脫殼后的。

現在 我們先反編譯

自己的APP,通過Xcode打包的APP 都是沒加殼的,可以直接用來反編譯。

新建一個項目,在 ViewController

的 viewDidLoad 方法里 加 幾句代碼。

(void)viewDidLoad {

[super viewDidLoad];

UILabel

*label = [[UILabel alloc] initWithFrame:CGRectMake(50, 70, 200, 100)];

label.text = @"CeShiLabel007";

label.backgroundColor = [UIColor redColor];

[self.view addSubview:label];

}

將項目 打包,生成

ipa文件,下面我們就用IDA分析一下 ipa。

將ipa文件 解壓后

得到.app文件:

Paste_Image.png

下載IDA,并打開:

Paste_Image.png

下載IDA,并打開:

點擊“New”按鈕,選擇剛才 解壓的 .app文件。一路 點擊“OK”或者“YES” 就可以了。

打開界面后,雙擊左側的 viewDidLoad:

Paste_Image.png

可以看出:代碼中的 "CeShiLabel007" 字符串 完全可以反編譯出來。所以盡量不要在代碼里放一些 關鍵 的數據。可以通過接口來獲取。或者 把 數據進行加密。

從上面的界面中 ,按下鍵盤的F5,可以 把匯編轉成C語言代碼。可讀性很高。。

你如果試了 就發現你的F5不管用啊,那是因為 F5是一個插件Hex-Rays.Decompiler 的快捷鍵,這個插件是收費的、收費的。

四、反編譯工具:Hopper Disassembler

下載 Hopper Disassembler軟件。打開ipa解壓的.app。 或者直接 把.app拖進去。

雙擊“viewDidLoad”: 可以看到 匯編代碼, "CeShiLabel007" 字符串、setText方法 等。

點擊右上角的 if(a) f(x)圖標

Paste_Image.png

會彈出 類似源代碼的 偽編碼:

Paste_Image.png

代碼中可以清楚的看到 處理的邏輯。簡單易懂,和看源代碼沒太大區別。。

下面 是我從越獄手機的PP助手上下載的 微信 的ipa 進行反編譯,看下里面的 QQContactInfoViewController 頁面 的 viewDidLoad方法里的代碼 怎么寫的,

截圖:

Paste_Image.png

如果 你把從 AppStore下載的 ipa包直接拖到 IDA或Hopper里,看到的就是亂碼,剛才已經說過了。AppStore的ipa是加過殼的 。如圖:

Paste_Image.png

五、抓包-https

Charles 老版本和 新版本 抓取https 的配置 不一樣。。

先看HTTP抓包:

1. 打開Charles程序

2. 查看Mac電腦的IP地址,如192.168.1.7

3. 打開iOS設置,進入當前wifi連接,設置HTTP代理Group,將服務器填為上一步中獲得的IP,即192.168.1.7,端口填8888

4. iOS設備打開你要抓包的app進行網絡操作

5. Charles彈出確認框,點擊Allow按鈕即可

HTTPS 老版本抓包:

1. 下載Charles證書http://www.charlesproxy.com/ssl.zip,解壓后導入到iOS設備中(將crt文件作為郵件附件發給自己,再在iOS設備中點擊附件即可安裝;也可上傳至dropbox之類的網盤,通過safari下載安裝)

2. 在Charles的工具欄上點擊設置按鈕,選擇Proxy Settings…

3. 切換到SSL選項卡,選中Enable SSL Proxying

4. 這一步跟Fiddler不同,Fiddler安裝證書后就可以抓HTTPS網址的包了,Charles 還 需要在上一步的SSL選項卡的Locations表單填寫要抓包的域名和端口,點擊Add按鈕,在彈出的表單中Host填寫域名,比如填 api.instagram.com,Port填443

HTTPS 新版本抓包:

Charles新版本 的 Proxy Settings 選項里是沒有 SSL選項卡的。在左側的域名上點右鍵:Enable SSL Proxying,就可以用了。

Paste_Image.png

然后

點擊APP,會看到HTTPS解密的json數據。如果接口返回的數據 本身進行了加密,那你看到的還是亂碼。

六、https - iOS 的代碼如何寫

2015年4月末,網爆流行IOS網絡通信庫AFNetworking

SSL漏洞,影響銀聯、中國銀行、交通銀行在內的2.5萬個IOS應用,我來看下 各種網絡寫法對應的問題。

1、信任任何證書。在 AFNetworking

中 定義 allowInvalidCertificates 為true,表示 忽略所有證書。

AFHTTPRequestOperationManager

manager = [AFHTTPRequestOperationManager manager];

manager.securityPolicy.allowInvalidCertificates = YES;

這種情況下

用我們上面講的方法,用Charles很容易 破解HTTPS加密的數據。

這種情況,一般是

因為 測試環境 用的不是 CA發的證書,需要忽略掉證書,所以把 allowInvalidCertificates 設為了

true。這個可以用 #ifdef DEBUG 來進行設置。

ifdef

DEBUG

manager.securityPolicy.allowInvalidCertificates

= YES;

endif

2、信任證書管理機構(CA)頒發的證書。

CA頒發的證書,據說這類的證書只需50美元就能買到。此類問題出在AFNetworking

2.5.2及之前的版本,是AF的漏洞(詳見新聞)。如果某IOS APP使用了此版本的開源通信庫,在不安全Wifi網絡中的,黑客

只要使用CA頒發的證書就可以對該APP的HTTPS加密數據進行監聽或者篡改。

這個需要升級到 AFNetworking

最新版本,正好最新版本也聲明兼容IPv6。

3、信任合法的證書、服務器和客戶端雙向認證。

這兩種也都有辦法破解,詳見:Bypassing

OpenSSL Certificate Pinning in iOS Apps、http://drops.wooyun.org/tips/7838

總結:不要完全信任HTTPS的安全性。任何

的 協議、代碼都是會有漏洞的。。關鍵的數據一定要自己進行加密。

黑客不會去一個手機一個手機的 把沙盒數據 拿出來 來看每個用戶的數據(黑客也不可能拿到你的手機)。

黑客最主要的還是通過網絡來獲取 他們想要的數據(網絡的安全級別是最高的)。如果恰好 你的APP 加密密鑰 明文 保存到了沙盒里 或者 你的 數據通信還沒有進行加密,恭喜你,你的數據和裸奔沒啥區別。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容