安卓反編譯apk工具java
我今天也遇到了這個問題,我的問題解決了是因為包不旁團完整,有損壞(可以慎手通過直接運行APK,損壞的話會提示安裝不了),另外我在查資料的時候發現也有可能apk被二次加工過,寬啟嫌不是白包,添加了混淆或反編譯。
B. 安卓apk反編譯java怎麼回編譯
這樣做是行不通的。反編譯一般是不能完全得到源Java代碼的,得到的代碼甚至會有語法錯誤,除非是簡單的那些代碼。要改的話就得改.class文件,但這個非常困難,要在16進制下改。或者改smali文件,這個比改.class文件要稍微簡單一點,不用在16進制...
C. 怎麼反編譯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文件,可讀性降低了,但仔細研究也能看出大概。
D. 怎樣用apk反編譯工具破解游戲
打開Androidfby中的Android反編譯工具,開始直接反編譯,選中你要反編譯的apk,反編譯即可,這樣就可以得到軟體中圖片,xml,dex文件,或者直接用解壓文件解壓,但是不能保證xml正常顯示,所以我們最好是結合一起用
打開反編譯之後的文件夾,找到classes.dex,將其復制到dex2jar的文件夾目錄下面,與dex2jar.bat在同一目錄即可。打開命令提示符,一直打開到dex2jar目錄,執行以下命令dex2jar.bat classes.dex
這時會在dex2jar目錄下生成一個classes_dex2jar.jar文件,這時運行jd-gui目錄下的jd-gui.exe,選擇File-----》Openfile------》classes_dex2jar.jar,即可查看java代碼了
E. apk反編譯工具包怎麼得到java文件
大家做Android開發,看到別人應用里一些好的功能,是不是很想得到源碼,借鑒一下?既然Android是用JAVA開發的,那麼我們就能很容易的通過反編譯的到應用的源代碼。下面我簡單介紹下應該怎麼操作。
具體步驟:
1.首先將apk文件後綴改為RAR並解壓。
2.解壓rar文件,得到其中的classes.dex文件
3.我們需要用到dex2jar 把dex文件轉為jar文件。
3.1把解壓得到的classes.dex文件放入dex2jar.bat 所在目錄 )
3.2打開DOS命令行,進入dex2jar所在目錄,運行 dex2jar.bat classes.dex 生成 classes_dex2jar.jar
4.最後用jd-gui.exe打開生成的classes_dex2jar.jar我們就能開到應用的源代碼了。
F. 安卓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文件反編譯
G. 如何反編譯Apk得到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批處理工具。
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包得到原文件。
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資源。
注意:文件的路徑中最好不要出現中文!
H. 安卓apk反編譯 一直不成功 ,java環境配置ok的 下了很多工具apktool都不能用 要麼有的可以反編譯成功
我建議你下載一個軟體叫91助手
I. 如何反編譯Apk得到Java源代碼
先使用dex2jar工具將classes.dex轉為jar,再使用jd-gui打肢察戚開該jar查歷陵看java源代碼。沒純
J. 如何使用JAVA軟體反編譯APK