#Android反編譯#零基礎脫掉360加固包的“外衣”

我們在開發App的過程中爲了保護自己的勞動成果不被剽竊,也爲了保證接口不被暴露,通常在上架之前做一些混淆或者加固的處理,市面上也有不少加固工具,更有甚者在某些平臺上線App必須使用該平臺的加固工具進行加固後纔可上線!這些加固真的靠譜嗎?這兩天我就對通過某60加固的App下手了,結果作爲逆向零基礎的小白,用了大約兩天的時間,就成功脫殼了。。。下面就來分享一下我這幾天的學習與破解過程。(下面的分享都是基於Mac系統開發的,Windows會略有不同)

一、反編譯基礎三件套

首先要介紹一下反編譯的基礎三件套:apktool、dex2jar-2.0、jd-gui-osx;

1、apktool:apk在某種意義上來說也是一種壓縮包,Android開發者應該都知道可以通過更改後綴名的方式得到App的資源文件,但是在這種方式下的manifest與XML文件都是亂碼,無法查看,那麼我們就需要使用apktool來獲取可讀取的資源文件了,命令也很簡單:apktool d xxx.apk;

apktool安裝與配置可參考:https://www.jianshu.com/p/c90024f61653

2、dex2jar-2.0+jd-gui-osx:這兩個工具的聯合使用,是爲了查看App的源碼的。首先我們apk的後綴名修改爲zip,然後將其解壓縮,將其中的dex文件拷貝到dex2jar-2.0,執行sh d2j-dex2jar.sh xxx.dex,便可將dex轉換成jar;然後在jd-gui-osx下即可查看源碼:

在Mac下使用dex2jar-2.0會出現權限問題,解決方法可參考:https://www.jianshu.com/p/f53b718d282b

二、利用Frida給加固過的App脫殼

通過基礎三件套可以對沒有加固的App實現反編譯,但如果這個App它加固過了,那通過jd-gui-osx看到的就會是這樣:

等等,qihoo.util?看來他用的是某60加固的,好的,要“對付”就是你們這些加固過的App!通過在百度上搜索qihoo.util,果真發現了有不少關於如何給360脫殼的文章,又通過一些搜索瞭解到一個叫frida的工具,可以實現脫殼,而且某60、某加密、某固等主流的加密工具,都在被脫之列!

1、frida簡介

frida的原理在我理解就是,通過在PC上安裝Frida,手機上運行frida-server,實現PC對手機的控制,同時通過js注入的方式,將dex從“殼”裏“鉤”出來。(如果只是想實現結果,可以不在意這些原理,直接用大神們提供的工具就好~)

它是一款基於Python的hook(鉤子)工具,因此在安裝它之前我們需要先配置Py環境,現在的frida僅支持3.7以下的環境,3.8以上的暫不支持,這一點需要注意,我就因爲PC上的py版本太高,不得不重新安裝py。

2、pc上安裝frida和frida-server

我們通過pip3 install 安裝frida、frida-server,這裏也有一個注意點:如果你的測試設備是5.1.1的話,需要指定frida爲12.1.0(pip3 install == 12.1.0)frida-tools爲1.2.0,至於原因,後面再說。

在安裝之前,還需要手動下載與你py版本對應的egg文件,否則在安裝frida的過程中,會報一個找不到對應egg文件的錯誤。

下載鏈接:https://github.com/frida/frida/releases

整個安裝過程會比較慢,會卡在Running setup.py install for frida ... – 這裏很久,一定要有耐心。如果在下載過程中出現超時,可以重新下載或者安裝時添加參數 pip3 --default-timeout=100 install -U xxx 。

安裝完成後可以通過在python中,import frida來檢測,如果沒有報錯,則代表安裝成功。

3、在手機上運行frida-server

frida-server版本的選擇由設備的內核版本與frida的版本決定,frida的版本已經確定,我們還需要確定設備的內核版本。在shell中,執行命令:cat /proc/cpuinfo查看系統內核。我的frida版本爲12.1.0,設備內核版本爲arm32位,因此選擇:

下載地址:https://github.com/frida/frida/releases

下載完成後將文件解壓,通過adb push導入到/data/local文件夾中,然後:

adb shell進入手機系統;

通過su切換刀root;

cd到/data/local

賦予froda-server 777 權限:chmod 777 frida-server

運行frida-server:./frida-server;還記得之前強調的frida版本問題嗎?如果你在5.1.1的設備上,安裝了高於12.1.0的frida-server上的話,這裏執行就會報錯:unused DT entry: type 0x6ffffef5 arg 0x1ddc,那麼你又得重新安裝frida、frida-tools、frida-server,那又將是一個漫長的過程了...

啓動成功以後,新建一個終端窗口,輸入:frida -ps -U,如果可以看到當前設備的進程和名稱,則證明pc和手機通過frida聯通了:

4、關鍵一步,利用“鉤子”將dex脫出來:

以上所做的都是準備工作,下面就是真正的脫殼操作了,這裏感謝“看雪”論壇裏的大神,提供了可以直接脫殼的js,使得我們直接調用就可以了,獻上原文鏈接:https://bbs.pediy.com/thread-251924.htm

按照大神的做法:frida -U -f {包名} -l dexDump.js --no-pause,就可以dump出dex了!包名可以從前面所說的apktool中反編譯出的manifest中得到。而dex文件會生成在/data/data/應用包名/目錄下

接下來我們退出shell,通過adb pull將dex文件拉出,再通過jd-gui-osx查看:

噹噹,源碼全都脫出來了!

三、總結

由此可以看出,其實現在這些所謂加固平臺的加固,都只是防君子不防“小人”,甚至他們以加固作爲App上架的條件,其真實目的不禁讓人浮想聯翩。而作爲開發者,學習反編譯的目的,不在於破解別人的App,剽竊別人的成果,而是通過了解其中的原理,更好的保護自己產品。當然啦,我這個也只是淺嘗輒止,如果你對反編譯或者逆向感興趣,推薦一個叫做“看雪”論壇的網站,這也是我這兩天發現的一個“寶藏”網站。以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章