jdk反編譯命令
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資源。
注意:文件的路徑中最好不要出現中文!
Ⅱ Java的反編譯命令是什麼
用jd gui可以直接反編譯class為java代碼。
java中的「反編譯」命令是用來查看class文件的。
在jdk/bin的目錄下有個叫做javap的命令行工具。主要是在分析Class文件的時候比較有用。
Ⅲ 求教JDK中的反編譯命令
用習慣了著名的反編譯工具jad的話,如果有的時候單給出class文件,要快速看這個class文件
的JDK版本號等,其實不用工具,也可以用JDK自帶的javap命令進行反編譯輸出,下面小結
其用法:
1,javap -verbose 類名
得到的信息如下:
Compiled from "Test.java"
public class Test extends java.lang.Object
SourceFile: "Test.java"
minor version: 0
major version: 50
Constant pool:
......
可以看出jdk的版本,這個用在判斷某些CLASS的版本是否兼容的時候很有用.
2 最常見的不帶參數的情況:javap 類名
比如某個類:
Java代碼
packagetest;
publicclassTest{
intnumber=5;
publicvoidsayHello(){
System.out.println("Hello");
}
}
則:
C: empjavaptest>javap Test
Compiled from "Test.java"
public class test.Test extends java.lang.Object{
int number;
public test.Test();
public void sayHello();
}
帶參數-c:
則可以看到位元組碼了:
Java代碼
C: empjavaptest>javap-cTest
Compiledfrom"Test.java"
publicclasstest.Testextendsjava.lang.Object{
intnumber;
publictest.Test();
Code:
0:aload_0
1:invokespecial#1;//Methodjava/lang/Object."<init>":()V
4:aload_0
5:iconst_5
6:putfield#2;//Fieldnumber:I
9:return
publicvoidsayHello();
Code:
0:getstatic#3;//Fieldjava/lang/System.out:Ljava/io/PrintStream;
3:ldc#4;//StringHello
5:invokevirtual#5;//Methodjava/io/PrintStream.println:(Ljava/lang/String;)V
8:return
}
帶參數-l: 將顯示行號和局部變數表
-public 只顯示 public 類及成員。
-protected 只顯示 protected 和 public 類及成員。
-package 只顯示包、protected 和 public 類及成員。這是預設設置。
-private 顯示所有類和成員。
Ⅳ 怎麼反編譯class
安裝Java jdk後
看安裝目錄里有沒有jad.exe,沒有要下載,一般都有的
配置Java環境變數
開始-運行-cmd-回車-進入命令行窗口:
cd+空格+class文件所在路徑:
按下面的命令進行反編譯:
例如:[2] jad -sjava example.class 回車
在目錄里可以看到example.java源文件
[1] 反編譯一個class文件:jad example.class,會生成example.jad,用文本編輯器打開就是java源代碼
[2] 指定生成源代碼的後綴名:jad -sjava example.class,生成example.java
[3] 改變生成的源代碼的名稱,可以先使用-p將反編譯後的源代碼輸出到控制台窗口,然後使用重定向,輸出到文件:jad -p example.class > myexample.java
[4] 把源代碼文件輸出到指定的目錄:jad -dnewdir -sjava example.class,在newdir目錄下生成example.java
[5] 把packages目錄下的class文件全部反編譯:jad -sjava packages/*.class
[6] 把packages目錄以及子目錄下的文件全部反編譯:jad -sjava packages/**/*.class,不過你仍然會發現所有的源代碼文件被放到了同一個文件中,沒有按照class文件的包路徑建立起路徑
[7] 把packages目錄以及子目錄下的文件全部反編譯並建立和java包一致的文件夾路徑,可以使用-r命令:jad -r -sjava packages/**/*.class
[8] 當重復使用命令反編譯時,Jad會提示「whether you want to overwrite it or not」,使用-o可以強制覆蓋舊文件
[9] 還有其他的參數可以設置生成的源代碼的格式,可以輸入jad命令查看幫助,這里有個人做了簡單的翻譯:jad命令總結
[10] 當然,你會發現有些源文件頭部有些注釋信息,不用找了,jad沒有參數可以去掉它,用別的辦法吧。
Ⅳ 如何運行從反編譯的java代碼。我從網上下載了一個jar之後用反編譯工具得到了裡面的代碼
反編譯工具(如jdk帶的javap、或jad)將TestSimplePlus反編譯成JavaByteCod,命令如下:
jad-o-a-sd.javaTestSimplePlus.class
javap-cDocFooter>F://test.txt
再上傳個反編譯的神器(批量編譯)
Ⅵ 在命令行下,如何使用JAD反編譯jar文件 轉
操作方法如下:
1)首先使用jar命令將jar文件解壓縮到classes目錄(假設已經設置好了CLASSPATH等,jar.exe是放在jdk的bin目錄下的)
CMD>jar -xvf test.jar -C classes
2)然後使用jad命令對上面產生的classes目錄進行反編譯
CMD>[jad_home]/jad.exe -r -ff -d src -sJavaclasses/**/*.class
含義如下:
其中-r 表示恢復源文件的目錄結構,,-ff 表示將類屬性定義放在類方法定義之前, -d 表示輸出目錄,-s 表示文件的擴展名。
所有的java文件將會被放置到src目錄下。
Ⅶ java反編譯
如今JAVA語言在全世界范圍正如火如荼般的流行,它廣范地應用在INTERNET的資料庫、多媒體、CGI、及動態網頁的製作方面。1999年在美國對JAVA程序員的需求量首次超過C++!
作者因最近分析一些JAVA程序,對JAVA的反編譯進行了一番了解,下面將我所了解的情況作以下介紹,希望對JAVA愛好者有所幫助。
JAVA是採用一種稱做「位元組編碼」的程序結構,分為小程序(嵌入到HTML文件中)和應用程序(直接在命令狀態下執行)兩種類型。無論哪種結構,一旦用JAVAC 命令編譯後,均變成後綴為CLASS的同名可執行文件。這種文件是不可閱讀的代碼。
經查閱了SUN公司的JDK(JDK1.1.3)文檔資料後,我找到了一個據稱是可反編譯JAVA的JAVAP文件(EXE),這個文件位於\JDK\BIN\ 下面,經按說明使用後,感到失望,原來這個「反編譯」僅可反編譯出JAVA程序的數據區(定義)、若干方法和類的引用等。
這里我用了一個簡單例子來說明問題。
JAVA的源程序hello_java.java如下:
import java.applet.*;
import java.awt.*;
public class hello_java extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello Java!\n",20,20);
}
}
經用反編譯命令:javap -c -package -public -private hello_java hello.java
得到的反編譯結果(hello.java)如下:(有關javap命令的選擇參數請見其使用說明,這里-c表示選擇了反編譯)
Compiled from hello_java.java
public synchronized class hello_java extends java.applet.Applet
/* ACC_SUPER bit set */
{
public void paint(java.awt.Graphics);
public hello_java();
Method void paint(java.awt.Graphics)
0 aload_1
1 ldc #1
3 bipush 20
5 bipush 20
7 invokevirtual #6
10 return
Method hello_java()
0 aload_0
1 invokespecial #5 ()V>
4 return
}
Ⅷ 如何將java中的.class文件反編譯
安裝Java jdk後
看安裝目錄里有沒有jad.exe,沒有要下載,一般都有的
配置Java環境變數
開始-運行-cmd-回車-進入命令行窗口:
cd+空格+class文件所在路徑:
按下面的命令進行反編譯:
例如:[2] jad -sjava example.class 回車
在目錄里可以看到example.java源文件
[1] 反編譯一個class文件:jad example.class,會生成example.jad,用文本編輯器打開就是java源代碼
[2] 指定生成源代碼的後綴名:jad -sjava example.class,生成example.java
[3] 改變生成的源代碼的名稱,可以先使用-p將反編譯後的源代碼輸出到控制台窗口,然後使用重定向,輸出到文件:jad -p example.class > myexample.java
[4] 把源代碼文件輸出到指定的目錄:jad -dnewdir -sjava example.class,在newdir目錄下生成example.java
[5] 把packages目錄下的class文件全部反編譯:jad -sjava packages/*.class
[6] 把packages目錄以及子目錄下的文件全部反編譯:jad -sjava packages/**/*.class,不過你仍然會發現所有的源代碼文件被放到了同一個文件中,沒有按照class文件的包路徑建立起路徑
[7] 把packages目錄以及子目錄下的文件全部反編譯並建立和java包一致的文件夾路徑,可以使用-r命令:jad -r -sjava packages/**/*.class
[8] 當重復使用命令反編譯時,Jad會提示「whether you want to overwrite it or not」,使用-o可以強制覆蓋舊文件
[9] 還有其他的參數可以設置生成的源代碼的格式,可以輸入jad命令查看幫助,這里有個人做了簡單的翻譯:jad命令總結
[10] 當然,你會發現有些源文件頭部有些注釋信息,不用找了,jad沒有參數可以去掉它,用別的辦法吧。
Ⅸ 編譯Java程序的命令式什麼運行Java程序的命令是什麼
到cmd命令行狀態下,用cd
命令進入到桌面文件夾下,再運行java
HelloWorld
,不加class
的,這樣應該就可以了
Ⅹ 反編譯工具 java jad怎麼使用方法
下好以後解壓就可以用了,軟體就只有一個exe文件和一個幫助文件,為了方便使用,我直接將exe文件放到JDK的bin目錄里了:)
下面先來看看從網上搜集來的介紹:在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front
End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java
Decompiler、NMI』s Java Class Viewer和國產的JAVA源代碼反編譯專家。
JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD
在JAVA反編譯領域中的尊貴地位。 JAD是使用Microsoft Visual
C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於
JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下:
-d <dir> - 用於指定輸出文件的目錄
-s <ext> - 輸出文件擴展名(默認為: .jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。
最常用的反編譯指令如下所示:
Jad -d c:\test -s .java -8 HelloWorld.class
這將當前目錄下的HelloWorld.class反編譯為HelloWorld.java並保存在c:\test目錄里,其中的提示輸出為中文,
而不是Unicode代碼。
附件:對下載後的說明文檔的簡單翻譯,希望對你有所幫助(mathsfan修改於2006.10.29,翻譯的不好請見諒)0、1略去2、怎樣使用JAD
反編譯一個簡單的java class文件'example1.class'用如下命令: jad example1.class
這個命令將在當前目錄下創建一個'example1.jad'文件,假如當前目錄下存在這個文件,則JAD會提示你覆蓋它與否。選項
-o 允許覆蓋時沒有任何提示。選項 -s <ext>允許改變輸出文件的後綴名: jad -sjava example1.class
這個命令將要創建'example1.java'文件。在一起使用-o 和
-sjava選項時請小心,因為JAD會附帶的重寫你的源文件。JAD使用JAVA
class的名字作為輸出文件的名字。例如,假如class文件'example1.class'包含JAVA class
'test1'那麼JAD將會創建文件'test1.jad'而不是'example1.jad'。假如你想具體指明你的輸出文件的名字使用輸出重命名:
jad -p example1.class > myexm1.java
選項 –d允許你具體指明另外的輸出文件目錄,不管這個目錄是新建的、默認的或者當前目錄。例如:
jad -o -dtest -sjava *.class
(或者 jad -o -d test -s java *.class, 這個有同樣的效果)
這個命令將在當前目錄下反編譯所有的.class文件並在'test'文件夾下建立所有擴展名為.java的輸出文件。
假如你想反編譯整個目錄樹下的JAVA classes,使用如下命令:
jad -o -r -sjava -dsrc tree/**/*.class
這個命令將反編譯當前目錄樹里所有的.class文件並且在當前目錄下建立src文件夾後根據包的名字來輸出文件。例如,假如有一個文件
'tree/a/b/c.class'在包'a.b'下包含了class 'c',那麼輸出文件的名字為'src/a/b/c.java'。
在先前的命令上將通配符那裡注釋掉。則它是用JAD來處理而不是command殼,所以在UNIX上的最後一次參數將會被單獨引用。
jad -o -r -sjava -dsrc 'tree/**/*.class'
你想檢查編譯後的文件的正確性或者出於好奇的情況下,這里有一個選項 –a 將會告訴JAD給輸出的JAVA虛擬位元組碼註解。