當前位置:首頁 » 編程軟體 » 反編譯apk怎麼

反編譯apk怎麼

發布時間: 2022-04-19 09:12:22

『壹』 怎麼反編譯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 <clinit>()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
<clinit>()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文件,可讀性降低了,但仔細研究也能看出大概。

『貳』 安卓apk文件如何反編譯

安卓apk文件反編譯:
一、反編譯xml文件
1>
首先下載我給你們提供的文件夾apk_fanbianyi,把它放到某個盤的根目錄下(為了方便輸入dos命令),然後打開apktool文件夾,安裝win+r鍵,然後輸入cmd,進入dos命令行,大家別怕,不用暈,很簡單的。
2>
然後在dos命令中首先輸入文件夾所在盤符+「:」回車,接著再輸入cd+apktool所在目錄,切換dos工作空間到apktool文件夾下。
3>
接著輸入
apktool.bat
d
【需反編譯apk文件路徑】
{【反編譯文件反編譯後的路徑】},其中最後一部分可以省去,系統會默認把apk文件反編譯到apktool目錄下,例如輸入
apktool.bat
d
d:/apk_fanbianyi/ttkp.apk,在apktool文件夾下就會生成一個ttpk的文件夾,所有的xml文件全部反編譯成功。
二、反編譯java文件
1>
首先解壓需要反編譯的apk文件,拷貝出裡面的classes.dex文件到dex2jar文件夾(為了方便操作,省去dos命令輸入路徑的麻煩)
2>
把工作空間切換到dex2jar文件夾下,輸入命令cd
d:/apk_fanbianyi/dex2jar回車
3>
輸入命令dex2jar.bat
classes.dex回車,發現dex2jar文件夾下多了一個classes_dex2jar.jar文件,這是反編譯成功的java文件
三、xml文件的打開
1>
打開apktool文件夾下的ttkp文件夾,任意找到一個xml文件,選中單擊右鍵,選擇notepad++打開(需下載),如果沒有此軟體,可以選擇打開方式,選擇記事本打開
四、java文件的打開
1>
dex2jar文件夾下的classes_dex2jar.jar拷貝到apktool文件夾的ttkp文件夾中,不能用notepad++打開,不然會亂碼的
2>
啟動apk_fanbianyi文件夾下的jd-gui.exe,然後點左上角file,選擇open
file,找到classes_dex2jar.jar文件,可以發現有很多包,選擇包下的任意一個java文件,打開不亂碼了,是不是很神奇,哈哈,你學會了安卓apk文件反編譯

『叄』 如何反編譯系統的apk

1
下載apktool所需文件:
a、 apktool1.5.2.tar.bz2
b、apktool-install-windows-r05-ibot.tar.bz2 (windows系統)

2
解壓剛剛下載的文件,並將解壓的文件放入C:\Windows目錄下

3
啟動控制台,輸入apktool,回車可查看到apktool工具常用指令

4
新建一個文件夾,用於存放apk及待解壓的文件,這里筆者將文件夾建在D:\apk目錄,同時放入用於測試的android app包(test.apk)

5
控制台輸入:apktool d D:\apk\test.apk D:\apk\test 進行反編譯操作
中句話中「D:\apk\test.apk」指apk存放位置,「D:\apk\test」指反編譯後文件存放的位置

6
反編譯成功之後,進入D:\apk\test文件目錄可以查看到反編譯後的文件

『肆』 如何反編譯apk文件

工具/原料

1、apktool 它可以拿到apk裡面的資源文件,我們要下載兩個文件,分別是apktool1.5.2.tar還有apktool-install-windows-r05-ibot.tar,

2、dex2jar 它可以把apk裡面的dex文件轉換成jar文件

3、jd-gui 它可以把jar文件或class文件反編譯成java文件


方法/步驟

首先下載這三個軟體,然後解壓(注意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文件,就可以看到源碼文件了

『伍』 如何反編譯APK

雖然不提倡逆向工程別人的勞動成果
但是萬一一個feature你想做,卻始終搞不懂,怎麼辦?參考一下別人怎麼實現的吧!
可是Android用的Dalvik壓根不是標準的Java
VM的Jar,而是DEX格式的,怎麼辦?
附件是dxe2jar和JD,兩個工具都是open
source的,我已經全部放在一個壓縮包了。
別著急,有辦法:
1. 假設你要反匯編的是app.apk,那麼先改名成app.zip
2.
解壓
3. 在解壓出來的裡面找到classes.dex,這個就是目標的程序的二進制文件
4. 用附件的dex2jar,在Windows命令行下運行
dex2jar classes.dex
5. 生成classes.dex.dex2jar.jar,這個就是轉換後的JAR文件了
6.
執行jd-gui,找到剛才生成的JAR文件,打開之。
7. 偷偷樂吧,90%以上的Java源代碼躍然眼前。

『陸』 如何反編譯apk文件得到源碼和XML文件

最近因為一些事所以需要得到師兄的某個apk的源代碼,但師兄說那個項目包已經刪了,哎,沒辦法,只能自己想辦法了。後來找到了反編譯apk的方法,現在拿出來分享下。其實這個方法網上都有,我只是記載一下自己這段時間的學習情況。
1.下載工具
首先,要反編譯需要下面這
4個工具:
dex2jar:將apk中的classes.dex轉化成Jar文件。
JD-GUI:反編譯工具,可以直接查看Jar包的源代碼。
apktool:反編譯工具,通過反編譯APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:輔助windows批處理工具。
2.解壓apk
直接右鍵解壓apk就行了,這沒什麼好說的。【解壓後會有個dex後綴的文件,下面會用到】
3.反編譯dex文件
1)解壓下載的dex2jar,把解壓後的文件夾放到系統盤跟目錄中並把這個目錄加到系統path變數中,就可以直接用:dex2jar.bat或dex2jar.sh轉換dex文件了。
2)DOS行命令如下:dex2jar.bat
xx\classes.dex(xx是classes.dex文件所在的路徑)。
將在同目錄得到普通jar包:【classes_dex2jar.jar】,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。
4.反編譯jar文件
1)解壓壓縮文件JD-GUI
2)運行該文件夾里的jd-gui.exe,打開上面生成的jar包,
即可看到源代碼了。
5.反編譯xml文件
為什麼要發編譯xml文件呢?因為直接解壓apk得到的xml文件是亂碼來的,我們需要用工具把它調會正常來
具體操作方法:
1)將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個文件夾下,這個文件夾有三個文件:aapt.exe,apktool.bat,apktool.jar。
2)把這個文件夾也放到系統盤的根目錄中並把這個目錄加到path變數中。以HelloWord.apk為例:
3)在DOS命令行中輸入:apktool
d
xx\HelloWord.apk
HelloWord得到HelloWord文件夾,此文件夾中的xml文件就是編譯好的可以正常查看的文件。
6.後話
不過,說到底反編譯還是反編譯,還是不能完全地還原出真正的源代碼的,比如一般會出現下面這樣的問題:
setContentView(2130903048);
在真正的源代碼中其實是這樣的:
setContentView(R.layout.welcome)

熱點內容
怎麼寫編程語言 發布:2025-03-20 18:42:52 瀏覽:686
我去密碼是多少 發布:2025-03-20 18:12:28 瀏覽:540
方舟編譯器啥時候開始 發布:2025-03-20 18:11:40 瀏覽:957
常用java類 發布:2025-03-20 18:07:06 瀏覽:201
怎麼查看安卓大屏使用的什麼協議 發布:2025-03-20 18:03:07 瀏覽:703
好用的linux系統 發布:2025-03-20 17:51:15 瀏覽:647
n1網路存儲 發布:2025-03-20 17:51:11 瀏覽:634
mysql資料庫更改密碼 發布:2025-03-20 17:50:33 瀏覽:774
java塔 發布:2025-03-20 17:36:03 瀏覽:350
怎麼修改伺服器介面地址 發布:2025-03-20 17:35:26 瀏覽:714