1. 程式人生 > >ANDROID反編譯工具APKTOOL原始碼除錯過程

ANDROID反編譯工具APKTOOL原始碼除錯過程

APKTOOL是目前反編譯ANDROID apk的主要工具,可以反編譯出APK裡的資原始檔和smali程式碼,而有些APK開發者為了防止自己的程式碼被反編譯,針對APKTOOL工具加固程式碼,使得APKTOOL無法執行正常,比如這篇文章介紹的Android應用資原始檔格式解析與保護對抗研究,因此有必要根據具體情況修改APKTOOL原始碼重新編譯,本人花了一天時間來編譯除錯,現將具體的過程分享一下。

一. 下載原始碼
APKTOOL原始碼下載,github上直接DOWNLOAD或者使用GIT來下載,最好使用GIT,它依賴什麼專案就會自動的去下載。

二. 原始碼編譯

編譯可以直接使用APKTOOL目錄下的gradlew.bat命令,我使用了ANDROID STUDIO來編譯原始碼。

1. 原始碼匯入ANDROID STUDIO
“FILE”->”OPEN…”->原始碼目錄

2. 編譯
最右邊”Gradle”->重新整理同步
這時會自動的從網路上下載指定版本的gradle,如果gradle設定的是offline的話,gradle同步不了,需將gradle設定的offline的選擇去掉。
“FILE”->”Settings”->”Build,Execution,Deployment”->”Gradle”

同步成功的話,gradle視窗會出現如下的任務列表。

在任務列表裡選擇如下的任務雙擊執行,APLTOOL的主要類在brut.apktool:apktool-cli模組裡,執行”fatjar”任務生成專案的jar檔案。

這時會在專案目錄下自動建立了brut.apkool.smali資料夾(資料夾不存在的話),然而編譯會報錯,找不到brut.apkool.smali下的原始碼。

因為brui.apktool:apktool-cli依賴brui.apktool:apktool-lib,brui.apktool:apktool-lib依賴brut.apkool.smali下的模組,brui.apktool:apktool-lib的build.gradle內容如下:

dependencies {
    compile("junit:junit:4.10") {
        exclude(module: 'hamcrest-core'
)
} compile project(':brut.j.dir'), project(':brut.j.util'), project(':brut.j.common'), project(':brut.apktool.smali:util'), project(':brut.apktool.smali:dexlib2'), project(':brut.apktool.smali:baksmali'), project(':brut.apktool.smali:smali'), depends.snakeyaml, depends.xmlpull, depends.guava, depends.commons_lang testCompile depends.xmlunit }

brut.apkool.smali下原始碼是空的,這是另一個專案的原始碼,需要先下載下來。

有兩種方式下載:
1. 直接訪問https://github.com/JesusFreke/smali下載原始碼,原始碼下載完成後將目錄下的所有檔案複製到brut.apkool.smali資料夾下。
2. 使用gradlew.bat applyPatches命令,這個會將本專案依賴的其他專案原始碼都同步下來,並下載到指定的目錄裡,不過這需要先按照git。

smali原始碼新增完成後再次執行任務,還是會報錯”util”模組找不到。

檢視brut.apktool.smali:baksmali的build.gradle內容

dependencies {
    compile project(':util')
    compile project(':dexlib2')
    compile depends.commons_cli
    compile depends.guava

    testCompile depends.junit
    testCompile project(':smali')
}

其依賴util模組,而在目錄下明明就有util模組,為什麼找不到它呢?
通過上網查找了一下資料,瞭解了每個專案只能有一個settings.gradle,包含本專案下的所有的模組,apktool的settings.gradle內容如下:

include 'brut.j.common',
        'brut.j.util',
        'brut.j.dir',
        'brut.apktool.smali:util',
        'brut.apktool.smali:dexlib2',
        'brut.apktool.smali:baksmali',
        'brut.apktool.smali:smali',
        'brut.apktool.smali:dexlib2:accessorTestGenerator',
        'brut.apktool:apktool-lib',
        'brut.apktool:apktool-cli'

其中並沒有util模組,這裡之所以是util,是因為brut.apkool.smali是我後加入的另一個專案,在它的專案settings.gradle檔案裡是包含了,內容如下:

include 'util', 'dexlib2', 'baksmali', 'smali', 'dexlib2:accessorTestGenerator'

所以直接編譯brut.apkool.smali是可以的,如果放在APKTOOL專案裡編譯就有問題了,解決方法就是將’:util’改為’:brut.apktool.smali:util’,同理其他的也一起改掉。

修改完了再次執行任務,還是報錯。

在brut.apktool\apktool-lib\src\main\java\brut\androlib\src\SmaliDecoder.java檔案裡出現了兩個錯誤,ClassPath沒有dontLoadClassPath靜態變數,baksmaliOptions沒有DIFFPRE靜態變數,我也沒弄明白我下載的都是最新的smali程式碼,為什麼smali類裡會沒有相關變數。

ClassPath.dontLoadClassPath = mDebug;
options.registerInfo = (mDebug ? baksmaliOptions.DIFFPRE : 0);

我把ClassPath.dontLoadClassPath = mDebug;直接去掉,baksmaliOptions.DIFFPRE改為baksmaliOptions.ALL。

修改完後終於編譯通過了,在Apktool\brut.apktool\apktool-cli\build\libs目錄下成功生成apktool-cli.jar。

三. 除錯
“Edit Configurations”->”+”->jar application設定如下內容->”ok”

在apktool-cli下的[email protected]設定斷點,Shift+F9除錯成功。

相關推薦

ANDROID編譯工具APKTOOL原始碼除錯過程

APKTOOL是目前反編譯ANDROID apk的主要工具,可以反編譯出APK裡的資原始檔和smali程式碼,而有些APK開發者為了防止自己的程式碼被反編譯,針對APKTOOL工具加固程式碼,使得APKTOOL無法執行正常,比如這篇文章介紹的Android應用資

Android編譯工具ApkTool的使用

1.直接去官網下載ApkTool,目前最新的版本為2.2.2,下載有問題的小夥伴請點這裡下載。 2.根據官仿給出的安裝文件進行安裝。這裡主要說一下Windows下的安裝:將下載的apktool.bat和apktooljar檔案移動到相應的資料夾,安裝文件中給出的位置是C:/

Android 編譯工具 apktool ,smali2java, dex2jar , jd-gui ,jadx-gui 的安裝與使用

1.apktool  按照上面的步驟 第一步:就是要讓我們下載apktool.bat,把滑鼠移至wrapper script上,然後右擊,連結另存為。 第二步:下載apktool.jar檔案,點選find newest here,跳到下載頁,我們能儘量下載最新版本。

Android 編譯工具apktool ,dex2jar,jd-gui.exe)使用詳解

Apktool 用法 1.下載Apktool 工具(包含aapt.exe & apktool.bat & apktool.jar)。如下圖 2.將準備進行反編譯的apk 放到 apktool.bat 檔案所在路勁。 3.在cm

android編譯工具

apktool 命令 https://ibotpeaches.github.io/Apktool/install/ apktool d testapp.apk d2j-dex2jar -f beautifulcamera.apk dex2jar https://git

編譯工具apktool使用教程

本片文章介紹如何使用apktool對apk檔案進行反編譯; 我們在開發或工作中會有對別人的apk進行反編譯的需求,如參考別人的程式碼或佈局,這時就要用到反編譯工具,下面將介紹如何下載及使用反編譯工具。

常用的Android編譯工具

好久沒有寫部落格,一直在用自己的印象筆記記錄一些問題。2017年了,想重新的把部落格寫起來。也希望通過這個平臺交一些朋友。 什麼是反編譯? 反編譯的定義--計算機軟體反向工程(Reverse engineering)也稱為計算機軟體還原工程,

編譯利器Apktool和Dex2jar匯入原始碼以及編譯除錯

   0x01 Apktool原始碼下載與匯入    1.1 apktool原始碼下載   1.2 匯入    開啟Android Studio,選擇Open an existing Android Studio project,選擇Apktool資料夾匯入。0x02 編譯並

android-- apktool編譯工具使用詳解

如果你想對APK檔案進行修改,那麼就不可避免的要使用到APKTool。論壇裡有很多關於ROM美化的帖子都需要自己動手修改APK檔案,比如修改framework-res.apk、systemUI.apk等等。 相信各位有不少人看了後都想親自來修改一番,但是結果卻是遇到了各

Android apk編譯-----【附:編譯工具

        Android應用開發完成之後,我們最終都會將應用打包成一個apk檔案,然後讓使用者通過手機或者平板電腦下載下來進行安裝。正常情況下,Android應用打包成apk之後,就無法再看到開發這個應用時使用的資原始檔以及程式碼了。但是我們通過網上提供

Apk編譯工具檢視layout 和java原始碼工具

首先要準備反編譯三件套,這個在網上應該會有很多 一: 檢視layout        解壓得到apktol.jar 和 apktool.bat 同時把要反編譯的apk也一起存放在當前目錄下 然後開啟控制檯  cmd 定位到當前目錄下

Android 編譯 apktool+dex2jar+jd-gui

工具下載 apktool 官網下載 百度網盤分享 密碼:xxt7 dex2jar 官網下載 百度網盤分享  密碼:u2td jd-gui 官網下載 百度網盤分享 密碼:vey1 下載完成後直接解壓的資料夾就可以了 簡單反包 先隨便下載個Apk  wind

Android 如何編譯APK獲取原始碼

前言:  這段時間,對Apk 進行了混淆處理。又想起之前學的一點皮毛(反編譯apk)。 一.想回顧一下反編譯是怎麼進行反編譯的。自己總結的。總比看別人的要更讓自己容易理解。 二.想看看自己的混淆啟

Android-Mac電腦如何進行APK編譯-使用apktool、jd-gui

最近群裡有人問如何在mac下進行apk反編譯,我也沒試過,以前都是在windows下進行反編譯的,windows下很簡單,有許多比較好的整合工具,如apkide(改之理),不過我猜mac下應該和win

apk編譯/編譯工具baksmali和smali用法及apktool+dex2jar+jd_gui的用法

一、apk編譯/反編譯工具baksmali和smali用法 、https://smali.googlecode.com/files/baksmali-2.0.3.jar。利用迅雷新建下載連結可以將其下載下來) 用法如下:首先把baksmali-2.0.3.jar和

Android實踐 -- Apk編譯工具-dex2jar

Apk反編譯工具-dex2jar 可以使用dex2-jar 和 工具 jd-gui配合進行apk的反編譯和檢視工作 下載dex2-jar和jd-gui工具 網盤下載 下載之後分別解壓到 對應的檔案目錄 apk本身就是一個壓縮檔案,通過rar或zi

安卓常用的編譯工具:dex2jar、jd-gui、apktool及oat2dex

[apk反編譯]-Jadx反編譯工具及下載位置(smb://172.16.78.123/forever/Tools/apktool/):jadx:https://github.com/skylot/jadx.git1.git clone https://github.com/

安卓開發——Android編譯就是這麼簡單 過程詳解

在學習Android開發的過程你,你往往會去借鑑別人的應用是怎麼開發的,那些漂亮的動畫和精緻的佈局可能會讓你愛不釋手,作為一個開發者,你可能會很想知道這些效果介面是怎麼去實現的,這時,你便可以對改應用的APK進行反編譯檢視。下面是我參考了一些文章後簡單的教程詳解。 (注

[Android]編譯檢視、修改原始碼、逆向分析以及二次打包簽名

  本文我們將來探討關於Android的反編譯。通常來說,我們在開發過程中的apk出於DEBUG狀態,我們並沒有給予APK一個特定的簽名,而是編譯系統預設給apk一個簽名。在釋出到應用商城時,我們會用自己的簽名檔案來簽名apk,以防止被其他人惡意篡改apk。當然

android 編譯 除錯入門資料

0x01 反編譯出錯 1.插入無效指令是部分逆向工具崩潰 原理:大部分逆向工具都是線性讀取位元組碼並解析, 如dex2jar,baksmali,apktool等,當遇到無效位元組碼時,就會引起反編譯工具解析失敗。例如:新版的dex2jar 遇到這種情況任然沒法轉化成jar,