iOS逆向工程之給App脫殼

来源:http://www.cnblogs.com/ludashi/archive/2016/09/18/5725743.html
-Advertisement-
Play Games

本篇博客以微信為例,給微信脫殼。"砸殼"在iOS逆向工程中是經常做的一件事情,,因為從AppStore直接下載安裝的App是加殼的,其實就是經過加密的,這個“砸殼”的過程就是一個解密的過程。未砸殼的App是無法在Class-dump、Hopper等工具中使用的。所以我們要將App進行砸殼處理。在An ...


本篇博客以微信為例,給微信脫殼。"砸殼"在iOS逆向工程中是經常做的一件事情,,因為從AppStore直接下載安裝的App是加殼的,其實就是經過加密的,這個“砸殼”的過程就是一個解密的過程。未砸殼的App是無法在Class-dump、Hopper等工具中使用的。所以我們要將App進行砸殼處理。在Android開發中也存在App加殼的處理,比如什麼360加固了,其實就是給App加一層殼。

本篇博客我們就以WeChat(微信)為例,從AppStore上下載微信並安裝,然後使用dumpdecrypted工具(當然你也可以使用其他砸殼工具)進行砸殼處理。砸殼後會生成解密後的App文件,然後我們就可以使用Class-dump和Hopper處理解密後的文件了。廢話少說,就開始今天的主題。

 

一、生成dumpdecrypted.dylib動態庫

首先我們要生成“砸殼”用的動態庫dumpdecrypted.dylib,我們“砸殼”時主要用到這個動態庫。該動態庫的源碼在github上是開源的(Github地址),要想得到dumpdecrypted.dylib這個動態庫,只需要從github上下載代碼,然後進行編譯,生成dumpdecrypted.dylib即可。下方就是使用make命令對dumpdecrypted的源碼進行編譯。

進入到dumpdecrypted文件夾下,運行make命令即可。

  

編譯完成後,dumpdecrypted文件夾中就會多一個dumpdecrypted.dylib動態庫,該動態庫就是稍後我們砸殼使用的工具。

  

 

二、“砸殼”前的準備工作

接下來就是要在越獄手機上尋找要“砸殼”的app路徑了,首先使用ssh連接到你的越獄設備,然後在越獄設備中打開你要砸殼的App, 此處我們以微信為例。從AippStore中下載安裝的應用都會位於/var/mobile/Applications中,下方的截圖就是我手機上從AppStore中下載的應用的安裝路徑。當然,下方是使用iExplore工具進行查看的,下方內容中,文件的拷貝我們都會用到iExplorer,當然你也可以使用之前提到過的iFunBox

  

 

從上方的截圖中要找出微信所在的目錄是非常困難的,應用少的話你可以點開一個個的看。向上面這種應用比較多的情況的話,一個個文件夾點開是不太現實的,所以我們得通過另一種方式來定位“微信”App所在的目錄。

這種快捷定位“微信”所在目錄的方式就是“查看應用進程”的方式,首先你需要打開微信,然後運行下方的命令,來查看文件目錄/var/mobile/目錄下的所有正在運行的App進行,具體要用到的命令如下所示:

 ps -e | grep /var/mobile

  

 

上方截圖就是上述命令運行後所輸出的內容,從上述內容中我們輕而易舉的就可以找到“WeChat”所在目錄。我們可以通過iExplore打開該目錄,更直觀的來看一下微信App所在的目錄,具體內容如下所示. 上面這個進程的絕對路徑我們要記下來,因為後邊砸殼的時候會使用到該路徑

  

接下來我們就要使用Cycript工具來尋找WeChat的Document路徑了,如果你的越獄設備上沒有安裝Cycript工具的話,那麼請前往Cydia下載安裝Cycript工具。下方步驟就是使用Cycript工具來查看附加進程的Document目錄的步驟。

 

1.使用Cycript註入目標進程中

cycript -p WeChat

上述命令執行完畢後,會進入到cycript模式中,如下所示。當然,在iOS9.2.1上的越獄設備執行上述命令會報錯,可能是目前Cycript這個強大的工具還不支持iOS9.2吧。所以我是在iOS7.2上做的該實驗。

  

 

2.獲取該進程的Document目錄

[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomans:NSUserDomainMask][0]

輸入上述內容,然後點擊回車,就會輸出WeChat進程的Document目錄,輸出結果如下所示。下方的紅色部分就是WeChat的Document目錄的絕對路徑。

  

 

找到上述目錄後,使用iExplore進入到該目錄下,將上面我們生成的dumpdecripted.dylib動態庫拷貝到該目錄下即可,如下所示:

  

 

三、開始砸殼

上述“砸殼”的準備工作就緒後,接下來我們就要開始砸殼了。進入到WeChat的Document目錄中,執行下方的命令進行砸殼。

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/3DC16044-E5BB-4038-9E31-CFE3C7134A7B/WeChat.app/WeChat

在上述命令中,DYLD_INSERT_LIBRARIES後邊這個動態庫就是我們上面生成的動態庫,後邊這個路徑就是WeChat執行文件的絕對路徑,運行上述命令後,就開始砸殼了,下方截圖就是我們砸殼的過程。
   

 

砸殼過程完成後,會在我們的Document目錄下生成一個WeChat.decrypted文件,如下截圖所示。該文件就是脫殼後的文件,我們可以將該文件拷貝到我們的Mac上,以備使用。

  

 

四、導出脫殼App的頭文件

將上面生成的WeChat.decrypted脫殼文件拷貝的我們的Mac上,接下來就是我們class-dump出廠的時刻了。接下來我們要使用class-dump導出該脫殼文件的所有頭文件。具體步驟如下所示。

 

1.前奏

WeChat.decrypted文件後,我執行了下方的命令來導出其頭文件,下方的命令在沒有加殼的app中是好使的,直接就可以導出相應App的頭文件,如下所示:

class-dump -S -s -H WeChat.decrypted -o ./Headers

執行上述命令結束後是下方這個結果, 並沒有導出想要的頭文件,Google了一下,是ARM的架構不對,所以就沒導出成功。

  

 

2.開始導出頭文件

從上述截圖中我們可看到,Headers文件夾中並沒有生成相應的頭文件。是我們解密的文件有問題嗎?於是乎,我使用了Hopper打開瞭解密後的文件,是可以正常打開的,於是乎又Google一下,原來是我們在導出頭文件時指定的ARM架構不正確,於是乎使用class-dump的--arch配置項來指定了armv7的架構,這樣的話,頭文件就導出成功了。

class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers

操作步驟和結果如下圖所示, 導出成功,你可以慢慢的分析了。

   

 

五、Hopper

上面使用了class-dump來操作我們脫殼的文件,木有問題。那麼接下來來看一下在Hopper上的效果如何,下方就是使用Hopper打開“脫殼”文件的效果。當然,你也可以使用IDA Pro來查看,當然此處我們使用的是Hopper。從下方的截圖來看,結果是Perfect的。

  

 

至此呢,我們脫殼的過程就這麼愉快的結束了,你可以去分析你想分析的東西了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前端無疑是2016年最火熱的技術,沒有之一。 各種前端mvc框架層出不窮,angular js,vue,react,前端組件化開發概念已經深入人心。前端工資已經比手機端開發還要高了。 作為個人站長,學習下前端設計也是有必要的,一來有些小的設計問題可以自己解決,同時還能提高自己的審美,提高網站的ui設 ...
  • 本文是蘇福的原創文章,轉載請註明出處:蘇福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程式【一邊玩游戲,一邊記JS的API】是本人的個人作品,寫的不好,未經本人允許,請不要用於其它用途! 玩法: 選擇一種JS的API,或隨機選一種,或 ...
  • bootstrap-table是一個基於Bootstrap風格的強大的表格插件神器,官網:http://bootstrap-table.wenzhixin.net.cn/zh-cn/ 這裡列出遇到的一個小問題:Bootstrap Table表格一直載入不了數據。 我使用訪問遠程地址返回的json數據 ...
  • 懶實例化-一個服務只有當程式的組件用到它的時候才進行實例化; 單例模式-每個依賴服務的組件,都是獲得服務工廠生成單個實例的引用。服務是一個單例對象或函數,對外提供特定的功能。 ...
  • ...
  • 通過DOM樹可以可容易的訪問到html文檔中的所有元素 例如向上訪問父輩的元素有以下方法 1.parent()方法可以得到所定元素的直接父元素 $("span").parent();得到<span>元素的直接父元素 2.parents()方法得到給定元素的所有父元素 $("span").parent ...
  • Cleave.js 有一個簡單的目的:幫助你自動格式輸入的文本內容。 這個想法是提供一個簡單的方法來格式化您的輸入數據以增加輸入欄位的可讀性。通過使用這個庫,您不需要編寫任何正則表達式來控制輸入文本的格式。然而,這並不意味著取代任何驗證或掩碼庫,你仍應在後端驗證數據。它支持信用卡號碼、電話號碼格式(... ...
  • 2016年9月7日,蘋果發佈iOS 10。2016年9月14日,全新的操作系統iOS 10將正式上線。 作為開發者,如何適配iOS10呢? 1.Notification(通知) 自從Notification被引入之後,蘋果就不斷的更新優化,但這些更新優化只是小打小鬧,直至現在iOS 10開始真正的進 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...