當前位置:首頁 » 編程軟體 » mac下反編譯apk

mac下反編譯apk

發布時間: 2022-11-16 13:30:13

1. mac反編譯安卓apk

兩種方式

兩種方式

目錄結構

2. mac下apktool怎麼安裝

APKTool是GOOGLE提供的APK編譯工具,需要java運行環境,推薦使用JDK1.6或者JDK1.7。
如果你想對APK文件進行修改,那麼就不可避免的要使用到APKTool。論壇里有很多關於ROM美化的帖子都需要自己動手修改APK文件,比如修改framework-res.apk、systemUI.apk等等。
相信各位有不少人看了後都想親自來修改一番,但是結果卻是遇到了各式各樣的錯誤卻無法進行改正,甚至都不知道自己錯在哪裡。
一.APKTOOL使用環境配置
1.安裝JAVA並設置環境變數。
下載安裝都很簡單,關鍵是安裝完後還需要親自設置環境變數以方便其他程序能夠條用JAVA。
以WIN7為例,在桌面上右鍵點擊計算機——>屬性——>高級系統設置——>環境變數——>在下邊的系統變數里新建一個變數,變數名為JAVA_HOME,值為JAVA的安裝路徑,比如我的是H:\ProgramFiles\Java\jdk1.6.0_26
二.APKTool的安裝
1.其實這個談不上安裝,不過如果你願意的話可以把下載到的APKTOOL中的三個文件(aapt.exe、apktool.bat、apktool.jar)解壓縮到你的Windows安裝目錄下,以方便使用Dos命令.
2.可能有些人下載的APKTOOL里有個安裝的bat文件,並且有另外兩個方便使用的bat文件,在這里我不推薦大家使用這些bat文件,雖然使用起來很方便(其實我並不覺得方便),但是如果出現錯誤不方便查看。
三.APKTool的使用
1.decode
該命令用於進行反編譯apk文件,一般用法為
apktool d <file.apk> <dir>
<file.apk>代表了要反編譯的apk文件的路徑,最好寫絕對路徑,比如C:\MusicPlayer.apk
<dir>代表了反編譯後的文件的存儲位置,比如C:\MusicPlayer
如果你給定的<dir>已經存在,那麼輸入完該命令後會提示你,並且無法執行,需要你重新修改命令加入-f指令
apktool d –f <file.apk> <dir>
這樣就會強行覆蓋已經存在的文件
2.build
該命令用於編譯修改好的文件,一般用法為
apktool b <dir>
這里的<dir>就是剛才你反編譯時輸入的<dir>(如C:\MusicPlayer),輸入這行命令後,如果一切正常,你會發現C:\MusicPlayer內多了2個文件夾build和dist,其中分別存儲著編譯過程中逐個編譯的文件以及最終打包的apk文件。
3.install-framework
該命令用於為APKTool安裝特定的framework-res.apk文件,以方便進行反編譯一些與ROM相互依賴的APK文件。具體情況請看常見問題

3. 如何反編譯apk文件

注意:反編譯的前提是:開發者沒有使用proguard(java代碼混淆的工具)。

1.下載反編譯工具
需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
dex2jar:將apk中的classes.dex轉化成Jar文件。
JD-GUI:反編譯工具,可以直接查看Jar包的源代碼。
apktool:反編譯工具,通過反編譯APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:輔助windows批處理工具。
下載地址:
dex2jar:http://code.google.com/p/dex2jar/downloads/list
JD-GUI:http://code.google.com/p/innlab/downloads/lis
apktool:http://code.google.com/p/android-apktool/downloads/list
工具截圖:

2.解壓縮APK包
apk文件也是一種常見的zip,常用的壓縮軟體就可輕松地解壓apk文件。用壓縮軟體將apk文件中的文件解壓到一個文件夾中,得到APK中的資源包括XML文件和classes.dex文件,classes.dex就是java文件編譯再通過dx工具打包而成的。
解壓截圖:

3.反編譯dex文件
解壓apk文件後,你會發現res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex文件,無法用普通的反編譯class文件的方法來處理,dex2jar可以將dex文件轉換成普通的jar包。
解壓下載的dex2jar,把解壓後的文件夾放到系統盤跟目錄中並把這個目錄加到系統path變數中,就可以直接用:dex2jar.bat或dex2jar.sh轉換dex文件了。
DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路徑)。
將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。
編譯截圖:

生成jar文件的截圖如下:

4.反編譯jar包
得到jar包後,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形界面,可以反編譯單個class文件,也可以反編譯jar包,比較方便。
打開壓縮文件JD-GUI,運行jd-gui.exe,打開上面生成的jar包,即可看到源代碼了。
截圖如下:

5.反編譯xml文件
打開解壓的res\layout目錄,有很多xml文件,如果你想看下作者是如何設計界面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。
具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個文件夾下,這個文件夾有三個文件:aapt.exe,apktool.bat,apktool.jar。把這個文件夾也放到系統盤的根目錄中並把這個目錄加到path變數中。以HelloWord.apk為例:
在DOS命令行中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夾,此文件夾中的xml文件就是編譯好的可以正常查看的文件。
截圖如下:

生成的文件:

這樣就得到了可以得到編譯的源碼和XML資源。
注意:文件的路徑中最好不要出現中文!

4. 怎麼反編譯APK文件

一、dexmp方法

dexmp是emulator自帶提供的查看dex文件的工具,可使用類似這樣的命令將dex文件mp到txt文件中:

D:\Program Files\android-sdk-windows-1.6_r1\platforms\android-1.6\tools>dexmp.exe -d classes.dex > spk.mp.txt

得到的文件內容,描述了類的信息,但實在是不好讀啊~~~~

二、dex2jar + XJad 方法

該方法是使用dex2jar.jar包,將classes.dex文件解包成jar,在通過XJad(或者其他class反編譯工具)進行java反編譯。如:

1、dex2jar.bat d:\play\classes.dex

默認的輸出路徑同classes.dex,生成的文件名為classes.dex.dex2jar.jar

2、使用XJad反編譯該jar包

之後的使用方法,大家都懂的:)

該方法的好處在於,通過XJad反編譯後,大家可直接開到java源文件,缺點在於只能反編譯出開發時的java文件,而開發時使用的lib包不能反編譯出來。

三、AXMLPrinter2.jar + baksmali.jar + smali.jar 方法

這個方法就強大了,AXMLPrinter2是還原AndroidManifest.xml和main.xml的工具,直接打開這兩個xml文件是亂碼,而通過還原之後,可以很明白的看到裡面的內容(我猜測還是使用了位元組異或的方式加的密)。

baksmali.jar是反解析dex的工具,smali.jar則是再還原成dex的工具

操作方式如下:

1、java -jar AXMLPrinter2.jar D:\play\AndroidManifest.xml > AndroidManifest.txt

2、java -jar AXMLPrinter2.jar D:\play\res\layout\main.xml > main.txt

3、java -jar baksmali-1.2.5.jar -o classout/ d:\play\classes.dex

baksmali可解析(注意,是解析,不是反編譯)原java包以及引用的lib包,解析出的文件認真看還是能看懂,比如以下片段:

view plain to clipboardprint?
.class Lcom/paul/test/a;
.super Landroid/view/View;

# static fields
.field private static final a:Landroid/graphics/Typeface;

# instance fields
.field private b:I
.field private c:I
.field private d:Z
.field private e:J
.field private f:I
.field private l:[Ljava/lang/String;

# direct methods
.method static constructor ()V
.registers 2
sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;
const/4 v1, 0x0
invoke-static {v0, v1}, Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;
move-result-object v0
sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;
return-void
.end method
#
# other methods ..........
#
# virtual methods
.method public onKeyUp(ILandroid/view/KeyEvent;)Z
.registers 4
const/16 v0, 0x42
if-eq p1, v0, :cond_8
const/16 v0, 0x17
if-ne p1, v0, :cond_b
:cond_8
invoke-direct {p0}, Lcom/paul/test/a;->d()V
:cond_b
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V
invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
move-result v0
return v0
.end method
.class Lcom/paul/test/a;
.super Landroid/view/View;

# static fields
.field private static final a:Landroid/graphics/Typeface;

# instance fields
.field private b:I
.field private c:I
.field private d:Z
.field private e:J
.field private f:I
.field private l:[Ljava/lang/String;

# direct methods
.method static constructor ()V
.registers 2
sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;
const/4 v1, 0x0
invoke-static {v0, v1}, Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;
move-result-object v0
sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;
return-void
.end method
#
# other methods ..........
#
# virtual methods
.method public onKeyUp(ILandroid/view/KeyEvent;)Z
.registers 4
const/16 v0, 0x42
if-eq p1, v0, :cond_8
const/16 v0, 0x17
if-ne p1, v0, :cond_b
:cond_8
invoke-direct {p0}, Lcom/paul/test/a;->d()V
:cond_b
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V
invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
move-result v0
return v0
.end method

認真一看,就知道:

# static fields 定義靜態變數的標記

# instance fields 定義實例變數的標記

# direct methods 定義靜態方法的標記

# virtual methods 定義非靜態方法的標記

以onKeyUp方法為例,其中定義了處理邏輯,if-eq p1, v0, :cond_8 表示如果p1和v0相等,則執行cond_8的流程:

:cond_8
invoke-direct {p0}, Lcom/paul/test/a;->d()V

調用com.paul.test.a的d()方法

不相等: if-ne p1, v0, :cond_b 則執行cond_b的流程:

:cond_b
const/4 v0, 0x0

invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V

invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z

move-result v0

大概意思就是調用com.paul.test.a的setPressed方法,然後再調用父類View的onKeyUp方法

最後 return v0

該方法,能把外部引用的lib包類也解析出來,能開到包的全貌。缺點在於,解析出的smali文件並不是反編譯出的java文件,可讀性降低了,但仔細研究也能看出大概。

5. 如何進行APK反編譯

如何進行APK反編譯

我們下載到某些apk的時候,可能總想學習下別人是怎麼進行程序設計的,或者怎樣使用xml文件布局的,這時就想到將apk文件的後綴改為rar並解壓,最終得到一些圖片資源和很多打開為亂碼的文件,可見這種方式不可行,這就需要使用下面的工具對apk進行反編譯了。

一、工具准備:apktool、dex2jar、jd-gui

工具包也可以在這里下載。

1、dex2jar可以在這里下載,jd-gui可以在這里下載。

2、apktool,可以到Google官方下載,apktool-1.0.0.tar.bz2(裡面有apktool.jar)和apktool-install-windows-2.1_r01-1.zip兩個包都要下。解壓apktool.jar到 C:\Windows,解壓apktool-install-windows.zip到任意文件夾(例如E盤根目錄)。

二、使用dex2jar + jd-gui 得到apk的java源碼,步驟如下:

1、用.rar打開apk文檔,將classes.dex文件解壓出來,然後使用工具反編譯成.jar文件。

在cmd下進入dex2jar.bat所在路徑,然後輸入「dex2jar.bat XXX」,XXX指的是你要反編譯的apk中的classes.dex文件所在路徑及名稱,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路徑下,classes.dex在D:\Android下,所以你進入到dex2jar.bat路徑後,輸入dex2jar.bat D:\Android\classes.dex,這樣會生成一個jar文件。

2、用jd-gui反編譯工具將得到.jar文件反編譯成.java文件。

三、使用apktool得到apk的xml文件

1、Win+R 運行CMD,用cd命令轉到apktool-install-windows所在文件夾,輸入命令:

apktool d XXX.apk ABC 反編譯XXX.apk到文件夾ABC

2、 在解壓後的文件夾中可以得到apk的xml配置文件。

四、第二步得到的程序源代碼和第三步得到的xml文件組合下,就成一個android工程,即可得到完整的apk源碼。

6. Android-Mac電腦怎麼進行APK反編譯

第一步:下載反編譯工具集,apktool、dex2jar、jd-gui,最後我會上傳這些工具,解壓後如下圖:

下面那個彈出框是JD-GUI的,用來將位元組碼反編譯成java源文件用的

第二步,工具集准備好之後還不能進行反編譯,你在命令窗口下執行輸入apktool 會提示命令不存在,需要配置一下環境變數
,怎麼配置呢,如下命令:
1.打開命令窗口,cd /usr/local/bin下,可能有的mac電腦不存在bin這個目錄,直接在創建一個就好了,命令是:sudo mkdir bin,執行後會讓你輸入root許可權密碼,輸入完後執行ls命令查看,bin目錄就存在了,如圖:

2.將你解壓後的apktool文件夾下的三個文件aapt、apktool、apktool.jar 復制到/usr/local/bin/目錄下,怎麼復制呢,當然用命令cp了,如下圖:

復制多個文件用空格隔開,android-workspace/APK/apktool/目錄是源目錄,存放的是我們要復制的那三個文件,執行命令後,提示輸入密碼,輸完密碼後就復製成功了,ls查看一下,這三個文件已經存在了。

這時候就已經配置好環境變數PATH了,什麼,我怎麼沒看到和PATH有關的任何命令,其實,/usr/local/bin本來就在PATH下,不信我執行命令你看:

這也是我們把apktool3個文件放在/usr/local/bin下的原因,現在你再輸入apktool命令試試:

輸出這樣的命令就代表環境配置好了

第三步:開始進行反編譯了,其實用到的命令也很簡單,我們隨便拿一個apk來,例如:

我們要對dz-android.apk進行反編譯,命令行進入這個目錄 cd /Users/hailonghan/android-workspace/APK,到這個目錄後,
執行命令apktool d dz-android.apk,如下圖:

執行成功後,會在當前目錄下生成一個da-android文件夾,點擊去就看到相關apk的資源文件了,選中AndroidManifest.xml,然後空格鍵,就可以看到反編譯後的內容了:

第四步:反編譯java源文件
這就用到dex2jar和jd-gui了,將dz-android.apk重命名改成dz-android.zip,然後利用解壓縮軟體解壓,得到一個dz-android目錄,我們要拿到裡面的classes.dex文件,
將其復制到dex2jar-0.0.9.15目錄下,

然後執行命令:sh dex2jar.sh classes.dex,

執行成功後會生成一個classes_dex2jar.jar文件,

最後,用jd-gui工具打開這個jar包就可以看到java源代碼了,

7. apk反編譯和重新打包

操作系統:Mac OS X
軟體:apktool

進入官網 https://ibotpeaches.github.io/Apktool/ ,點擊官網首頁的install( https://ibotpeaches.github.io/Apktool/install/ )進入安裝指南,裡面有Windows,linux和Mac的安裝方法,不同的操作系統按不同的步驟來就可以了。

在終端輸入: apktool d xxx.apk ,我在反編譯時出現了以下錯誤:

看提示是無法寫入到這個目錄 /Users/xxx/Library/apktool/framework (xxx為電腦用戶名),那就在 /Users/xxx/Library 下新建apktool文件夾,並在apktool文件夾下再新建個framework文件夾,然後為了保險起見設置新建文件夾到許可權,在終端輸入: chmod -R 777 /Users/xxx/Library/apktool
接著再重新執行反編譯命令就可以成功了,在xxx.apk相同目錄下會出現反編譯後的文件夾。

在終端輸入編譯命令: apktool b xxx (xxx為剛才反編譯的文件夾),成功後會在xxx文件夾下的dist文件夾下生成打包好後的apk文件

現在打包好後的apk是沒有簽名的,所以無法安裝,現在給apk簽名

20000為時間,這個設置長點就好了,-keystore後面是簽名文件保存路徑。輸入命令按回車鍵會讓輸入密碼等信息,按提示輸入,不要忘了密碼,簽名時要用。
2.接著在終端輸入:

-keystore後面的為簽名文件的路徑,-signedjar後面為簽名好後apk的存放路徑,在這個後面的一個為需要簽名的pak的路徑,最後的android.keystore為證書的別名,如果不知道別名,可以在終端輸入: keytool -list -v -keystore /Users/xxx/Desktop/android.keystore 查看具體信息,裡面有別名。
這一步還要注意,簽名文件和需要簽名的apk要在同一目錄下。

8. mac怎麼打開apk文件

MAC下修改apk後綴為ZIP即可解壓打開了,反編譯的話用apktool、dex2jar、jd-gui,
要在MAC下運行apk的話就用android 模擬器例如MuMu等總之,MAC版的android 模擬器還有很多自己搜一下

9. 最近群里有人問如何在mac下進行apk反編譯,我也沒試過,以前都是在windows下進行反

直接用Linux上的相關反編譯工具即可。畢竟mac的系統和linux系統差不多的。

10. 如何反編譯apk文件

首先下載這三個軟體,網上有很多資源,這里就不附加下載鏈接了
然後解壓(注意apktool的兩個文件解壓到一個文件夾)。
把需要反編譯的APK放到apktool文件夾下,然後打開Cmd(運行),進入apktool文件夾下
輸入apktool d apk名字 ,注意apk名字需要帶有後綴,這個獲取的是apk的資源文件,可以看到資源文件全都在這里了
這一步獲取apk代碼文件,將需要反編譯的APK用壓縮軟體打開(我用的好壓),提取裡面的classes.dex,然後把classes.dex放到dex2jar文件夾下(就是第二個軟體的解壓文件夾),cmd進入dex2jar下面輸入dex2jar classes.dex
就看到jar文件了

打開jd-gui文件夾,打開jd-gui.exe,然後打開jar文件,就可以看到源碼文件了

熱點內容
csgo怎麼進日本伺服器 發布:2025-05-14 00:39:18 瀏覽:747
ip查伺服器商家 發布:2025-05-14 00:33:37 瀏覽:212
雲伺服器布 發布:2025-05-14 00:27:55 瀏覽:78
吃雞最佳配置怎麼看 發布:2025-05-14 00:25:32 瀏覽:226
oraclesql效率 發布:2025-05-14 00:17:40 瀏覽:601
cifjava代碼 發布:2025-05-14 00:10:34 瀏覽:214
泰國電視劇密碼在哪裡看 發布:2025-05-13 23:54:22 瀏覽:481
安卓用郵件下完保存在哪裡 發布:2025-05-13 23:52:31 瀏覽:479
解壓美食蛋糕 發布:2025-05-13 23:36:25 瀏覽:354
php含有字元 發布:2025-05-13 23:32:08 瀏覽:184