當前位置:首頁 » 編程軟體 » linux反編譯java

linux反編譯java

發布時間: 2023-05-18 16:38:27

⑴ 在linux下,怎樣編譯java

Linux下java環境變數設置的完整步驟:從java.sun.com上下載JDK的安裝文件,一般是jdk1.5.0_10_XXXX.bin的格式。 解開生成JDK目錄,這里假設JDK安裝在/usr/java/jdk1.5.0_10中: 代碼:sudo chmod 755 jdk1.5.0_10_XXXX.bin sudo ./jdk1.5.0_10_XXXX.bin sudo mkdir /usr/java sudo mv jdk1.5.0_10/ /usr/java代碼: sudo gedit /etc/profile在這個文件的末尾追加:代碼:export JAVA_HOME=/usr/java/jdk1.5.0_10/ #注意把新添加的JDK的bin目錄追加在$PATH的最前面,這樣當系統中安裝有多個JDK版本時,程序會優先搜尋排在最前面的JDK版本。 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH保存/etc/profile之後,別忘了執行下面這個命令,使環境變數的更改馬上起作用。 代碼:source /etc/profile如果執行上面這個命令時報錯,請仔細檢查你在/etc/profile里新增的文本是不是有錯。最後檢查環境變數更改是否生效: 代碼:java -version

⑵ 反編譯出來的JAVA文件如何重新編譯

java程序編譯成class文件,當中存放的是機器碼,供java虛擬機調用,你在一般編譯器中是打不開class文件的,有個叫jd-gui的編譯器可以將class文件重新編譯成java文件

⑶ 什麼是Java代碼的編譯與反編譯

Java代碼的編譯與反編譯

2017-02-21Hollis數盟

一、什麼是編譯

1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。

2、用編譯程序產生目標程序的動作。編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。

二、什麼是反編譯

計算機軟體反向工程(Reverseengineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。反編譯作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。

三、Java類的編譯與反編譯

我們在最初學習Java的時候,會接觸到兩個命令:javac和java,那個時候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。

class文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然後被連接成單獨的、專門支持特定硬體平台和操作系統的二進制文件。通常情況下,一個平台上的二進制可執行文件不能在其他平台上工作。而Javaclass文件是可以運行在任何支持Java虛擬機的硬體平台和操作系統上的二進制文件。

那麼反編譯呢,就是通過helloworld.class文件得到java文件(或者說是程序員能看懂的Java文件)

四、什麼時候會用到反編譯

1、我們只有一個類的class文件,但是我們又看不懂Java的class文件,那麼我們可以把它反編譯成我們可以看得懂的文件。

2、學習Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現細節,我們可以藉助反編譯。

五、反編譯工具

1、javap

2、Jad:官網(牆裂推薦)

客戶端:

可以在官網下載可執行文件,找到對應的操作系統的對應版本,然後進行安裝使用。

因為我使用的是linux操作系統,所以我下載的是Linux版本的工具,這個工具下載好之後會有一個執行文件,只要在執行文件所在目錄執行./jadhelloworld.class就會在當前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼

Eclipse插件:

下載地址在官網下載插件的jar包,然後將jar包放到eclipse的plugins目錄下『在打開Eclipse,Eclipse->Window->Preferences->Java,此時你會發現會比原來多了一個JadClipse的選項,單擊,在Pathtodecompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時文件的目錄。當然在JadClipse下還有一些子選項,如Debug,Directives等,按照默認配置即可。基本配置完畢後,我們可以查看一下class文件的默認打開方式,Eclipse->Window->Preferences->General->Editors->FileAssociations我們可以看到class文件的打開方式有兩個,JadClipse和Eclipse自帶的ClassFileViewer,而JadClipse是默認的。全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼

⑷ 怎麼在linux的終端裡面編譯運行java小程序

可以使用命令來編譯運行,linux里也可以安裝eclipse等IDE來編寫java程序,用法和windows下差不多

⑸ 談談JAVA的反編譯

作者因最近分析一些JAVA程序 對JAVA的反編譯進行了一番了解 下面將我所了解的情況作以下介紹 希望對JAVA愛好者有所幫助 JAVA是採用一種稱做 位元組編碼 的程序結構 分為小程序(嵌入到HTML文件中)和應用程序(直接在命令狀態下執行)兩種類型 無論哪種結構 一旦用JAVAC 命令編譯後 均變成後綴為CLASS的同名可執行文件 這種文件是不可閱讀的代碼 經查閱了SUN公司的JDK(JDK )文檔資料後 我找到了一個據稱是可反編譯JAVA的JAVAP文件(EXE) 這個文件位於JDKBIN 下面 經按說明使用後 感到失望 原來這個 反編譯 僅可反編譯出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 );}} 經用反編譯命令 javap c package public private hello_java hello java 得到的反編譯結果(hello java)如下 (有關javap命令的選擇參數請見其使用說明 這里 c表示選擇了反編譯)Compiled from hello_java javapublic 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) aload_ ldc # bipush bipush invokevirtual # returnMethod hello_java() aload_ invokespecial # ()V > return}從上述結果不難看出該反編譯未能將源程序全譯出來 像語句g drawString( Hello Java!n ); 就沒有 隨著程序量增加 未能編譯的JAVA語句還會更多 所以這個反編譯程序僅能起個參考作用 幸虧有了INTERNET 筆者通過YAHOO很快找到了一個JAVA反編譯 自由軟體 (SHAREWARE) 這個軟體叫MOCHA 據說是一位 來歲的加拿大的研究生所完成 僅是個 ? 版 原因是這位叫做H P VAN VLIET的小夥子患癌逝世了 十分可惜呀!經使用MOCHA反編譯軟體 感到這個軟體十分好用 筆者試反編譯多個JAVA程序 均得到很好的結果 這里給出如何使用這個軟體 首先 用WINZIP等將 mocha b zip 解開得到 mocha zip 文件 mocha zip 不須再解開 這個包內包括了反編譯的類文件 只需將其拷貝到JDK所在的目錄下 如 c:jdkbin 此外 須設置路徑 SET CLASSPATH=c:myclasses;c:jdkbinmocha zipMOCHA用法 java mocha Depiler [ v] [ o] Class class Class class java 調用Java虛擬機 mocha Depiler 指示要進行JAVA反編譯 v 選擇詳細輸出 o 選寫入已有的 mocha 文件 ClassX class 指出要反編譯類名注意 不需給出輸出的JAVA文件名 因為MOCHA自動產生一個與CLASS同名但擴展名為MOCHA的JAVA源文件 對於上例 可用命令 java mocha Depiler [ v] [ o] hello_java class得到的源文件 /* Depiled by Mocha from hello_java class *//* Originally piled from hello_java java */import java applet Applet;import java awt Graphics;public synchronized class hello_java extends Applet{public void paint(Graphics g){g drawString( Hello Java!n );}public hello_java(){}}我們不難發現 此文件與編譯前的JAVA源文件完全一樣!筆者曾經用MOCHA反編譯出最大為 K的源文件 均取得成功 在此 筆者向英年早逝的VLIET表示敬意 感謝他給我們留下這個工具軟體 如讀者下載MOCHA有困難 可給筆者來電子郵件 筆者可將MOCHA寄去 參考文獻 ) ) ) ) lishixin/Article/program/Java/Javascript/201311/25331

⑹ Java的反編譯命令是什麼

用jd gui可以直接反編譯class為java代碼。
java中的「反編譯」命令是用來查看class文件的。
在jdk/bin的目錄下有個叫做javap的命令行工具。主要是在分析Class文件的時候比較有用。

⑺ 如何在Linux中反編譯java源代碼

之前看同事使用JD-GUI來反編譯java
.class文件,覺得很爽,不過一直以來也沒有再次接觸到這個問題,所以也沒有對這個工具進行深入的了解。

今天無聊看了些技術文檔,忽然想起這個工具來,上網一找。呼呼果真也有Linux的版本。
不過我網上資料顯示主頁上下載的gz包是32位的程序,我在64位的Fedora
12下可能有些問題,程序在運行時會調用不到關鍵的32位庫而失敗。幸運的是只要安裝幾個包即可:

yum install
libcanberra-gtk2.i686 PackageKit-gtk-mole.i686
gtk2-engines.i686

下載後:
tar -xzvf
jd-gui-0.3.2.linux.i686.tar.gz
sudo mv jd-gui
/usr/local/bin

至此jd-gui便可以在linux下運行,對於class或者jar文件都可以使用這個工具打開查看反編譯源碼
轉載,僅供參考。

⑻ linux 反編譯下的apk報毒怎麼處理

2、反編譯過程
1)反編譯出資源文件
使用apktool工具,進入apktool所在的目錄下,使用如下的命令:
./apktool d ./xxx.apk(apk所在的路徑)

d表示decode,在當前目錄下就會生成一個名為xxx的目錄,裡面就是反編譯出來的各種資源文件,其中res表示資源文件,smali表示源代碼,不過是位元組碼,不能直接查看。
以本人的實驗為例子,如下圖所示:

此時會在當前目錄下生成一個目錄app-debug。

2)源代碼的反編譯
a)因為apk文件其實是使用zip進行打包壓縮生成的文件,所以先把xxx.apk文件改名為xxx.zip文件,並對其進行解壓
b)進入解壓後的目錄,其中有一個classes.dex文件,這個文件就是java文件編譯再通過dx工具打包而成的,源代碼就包含在這個文件中。
c)把前一步生成的文件classes.dex復制到dex2jar工具的根目錄中,並使用如下命令對其進行反編譯:
./dex2jar.sh d classes.dex
就會在當前目錄下生成一個classes_dex2jar.jar文件

d)點擊打開jdgui工具,這是一個圖形化的工具,然後打開上上述的classes_dex2jar.jar文件就可以看到apk對應的源代碼。
對於本人的實驗如下:

⑼ 在linux下怎麼編譯和運行java程序

同時載入編譯多個jar包和java文件
在個人平常使用或者當我們把代碼部署到linux伺服器上的時候,我們經常需要通過命令行編譯和運行java文件,網上關於這個的方法大多是通過
javac
-cp
filePath/jarName.jar
javaName.java1
這種方法。但是加入在filepath文件夾下面有好幾個jar包,在src文件夾中有好幾個java文件的時候,這個方法就很笨拙了,我在網上看的資料非常亂,其實下面一個非常簡單的指令就可以解決了:
javac
-Djava.ext.dirs=filePath
*.java//注意這里只需要指定到jar包所在的文件夾就可以了1
其中*.java表示可以一次編譯所有的java文件。
把編譯文件放到指定目錄
如果想要把編譯後的文件放到指定目錄,只需要在java文件後加上
-d
outputFilePath就可以了,例如下面:
javac
-Djava.ext.dirs=filePath
*.java
-d
outputFilePath1
執行java文件
執行java程序頁是同樣,只需要把javac換成java,後面寫上主函數所在的java文件的名稱就可以了,不用加後綴。例如下面
javac
-Djava.ext.dirs=filePath
MainJavaName1
如果想要把編譯後的文件放到指定目錄,只需要在java文件後加上
-d
outputFilePath就可以了

⑽ 如何將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沒有參數可以去掉它,用別的辦法吧。

熱點內容
安裝flexlinux 發布:2025-07-15 16:35:47 瀏覽:372
網站模板php 發布:2025-07-15 16:22:47 瀏覽:248
編譯簡譜 發布:2025-07-15 16:16:37 瀏覽:813
編程口是什麼 發布:2025-07-15 16:11:28 瀏覽:497
微博如何從賬號和密碼登錄 發布:2025-07-15 15:59:02 瀏覽:123
解說電影需要哪些硬體配置 發布:2025-07-15 15:56:59 瀏覽:380
ftp快捷鍵搜索文件 發布:2025-07-15 15:51:44 瀏覽:459
蘋果賬號密碼忘了怎麼注銷 發布:2025-07-15 15:30:50 瀏覽:200
自動閱讀掛機腳本 發布:2025-07-15 15:20:18 瀏覽:848
開票人的許可權配置如何選擇 發布:2025-07-15 14:51:22 瀏覽:131