反編譯java對比代碼 反編譯語言

談?wù)凧AVA的反編譯

作者因最近分析一些JAVA程序 對JAVA的反編譯進行了一番了解 下面將我所了解的情況作以下介紹 希望對JAVA愛好者有所幫助 JAVA是采用一種稱做 字節(jié)編碼 的程序結(jié)構(gòu) 分為小程序(嵌入到HTML文件中)和應(yīng)用程序(直接在命令狀態(tài)下執(zhí)行)兩種類型 無論哪種結(jié)構(gòu) 一旦用JAVAC 命令編譯后 均變成后綴為CLASS的同名可執(zhí)行文件 這種文件是不可閱讀的代碼 經(jīng)查閱了SUN公司的JDK(JDK )文檔資料后 我找到了一個據(jù)稱是可反編譯JAVA的JAVAP文件(EXE) 這個文件位于JDKBIN 下面 經(jīng)按說明使用后 感到失望 原來這個 反編譯 僅可反編譯出JAVA程序的數(shù)據(jù)區(qū)(定義) 若干方法和類的引用等 這里我用了一個簡單例子來說明問題 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 );}} 經(jīng)用反編譯命令 javap c package public private hello_java hello java 得到的反編譯結(jié)果(hello java)如下 (有關(guān)javap命令的選擇參數(shù)請見其使用說明 這里 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}從上述結(jié)果不難看出該反編譯未能將源程序全譯出來 像語句g drawString( Hello Java!n ); 就沒有 隨著程序量增加 未能編譯的JAVA語句還會更多 所以這個反編譯程序僅能起個參考作用 幸虧有了INTERNET 筆者通過YAHOO很快找到了一個JAVA反編譯 自由軟件 (SHAREWARE) 這個軟件叫MOCHA 據(jù)說是一位 來歲的加拿大的研究生所完成 僅是個 ? 版 原因是這位叫做H P VAN VLIET的小伙子患癌逝世了 十分可惜呀!經(jīng)使用MOCHA反編譯軟件 感到這個軟件十分好用 筆者試反編譯多個JAVA程序 均得到很好的結(jié)果 這里給出如何使用這個軟件 首先 用WINZIP等將 mocha b zip 解開得到 mocha zip 文件 mocha zip 不須再解開 這個包內(nèi)包括了反編譯的類文件 只需將其拷貝到JDK所在的目錄下 如 c:jdkbin 此外 須設(shè)置路徑 SET CLASSPATH=c:myclasses;c:jdkbinmocha zipMOCHA用法 java mocha Depiler [ v] [ o] Class class Class class java 調(diào)用Java虛擬機 mocha Depiler 指示要進行JAVA反編譯 v 選擇詳細輸出 o 選寫入已有的 mocha 文件 ClassX class 指出要反編譯類名注意 不需給出輸出的JAVA文件名 因為MOCHA自動產(chǎn)生一個與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(){}}我們不難發(fā)現(xiàn) 此文件與編譯前的JAVA源文件完全一樣!筆者曾經(jīng)用MOCHA反編譯出最大為 K的源文件 均取得成功 在此 筆者向英年早逝的VLIET表示敬意 感謝他給我們留下這個工具軟件 如讀者下載MOCHA有困難 可給筆者來電子郵件 筆者可將MOCHA寄去 參考文獻 ) ) ) ) lishixinzhi/Article/program/Java/Javascript/201311/25331

創(chuàng)新互聯(lián)建站主打移動網(wǎng)站、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、申請域名、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

如何反編譯Apk得到Java源代碼

1.下載反編譯工具

需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot

dex2jar:將apk中的classes.dex轉(zhuǎn)化成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文件后,你會發(fā)現(xiàn)res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex文件,無法用普通的反編譯class文件的方法來處理,dex2jar可以將dex文件轉(zhuǎn)換成普通的jar包。

解壓下載的dex2jar,把解壓后的文件夾放到系統(tǒng)盤跟目錄中并把這個目錄加到系統(tǒng)path變量中,就可以直接用:dex2jar.bat或dex2jar.sh轉(zhuǎn)換dex文件了。

DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路徑)。

將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。

4.反編譯jar包

得到j(luò)ar包后,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形界面,可以反編譯單個class文件,也可以反編譯jar包,比較方便。

打開壓縮文件JD-GUI,運行jd-gui.exe,打開上面生成的jar包,即可看到源代碼了。

5.反編譯xml文件

打開解壓的res\layout目錄,有很多xml文件,如果你想看下作者是如何設(shè)計界面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。

具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個文件夾下,這個文件夾有三個文件:aapt.exe,apktool.bat,apktool.jar。把這個文件夾也放到系統(tǒng)盤的根目錄中并把這個目錄加到path變量中。以HelloWord.apk為例:

在DOS命令行中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夾,此文件夾中的xml文件就是編譯好的可以正常查看的文件。

這樣就得到了可以得到編譯的源碼和XML資源。

注意:文件的路徑中最好不要出現(xiàn)中文!

什么是Java代碼的編譯與反編譯

java代碼的編譯,就是你寫完代碼,java編譯器把它編譯成java虛擬機認識的代碼,然后再由虛擬機執(zhí)行它。反編譯就是反過來,當(dāng)然這不是java虛擬機干的事兒,是你找反編譯工具干的事兒,把編譯過的代碼反編譯成人看得懂的源代碼。

java反編譯

如今JAVA語言在全世界范圍正如火如荼般的流行,它廣范地應(yīng)用在INTERNET的數(shù)據(jù)庫、多媒體、CGI、及動態(tài)網(wǎng)頁的制作方面。1999年在美國對JAVA程序員的需求量首次超過C++!

作者因最近分析一些JAVA程序,對JAVA的反編譯進行了一番了解,下面將我所了解的情況作以下介紹,希望對JAVA愛好者有所幫助。

JAVA是采用一種稱做“字節(jié)編碼”的程序結(jié)構(gòu),分為小程序(嵌入到HTML文件中)和應(yīng)用程序(直接在命令狀態(tài)下執(zhí)行)兩種類型。無論哪種結(jié)構(gòu),一旦用JAVAC 命令編譯后,均變成后綴為CLASS的同名可執(zhí)行文件。這種文件是不可閱讀的代碼。

經(jīng)查閱了SUN公司的JDK(JDK1.1.3)文檔資料后,我找到了一個據(jù)稱是可反編譯JAVA的JAVAP文件(EXE),這個文件位于\JDK\BIN\ 下面,經(jīng)按說明使用后,感到失望,原來這個“反編譯”僅可反編譯出JAVA程序的數(shù)據(jù)區(qū)(定義)、若干方法和類的引用等。

這里我用了一個簡單例子來說明問題。

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);

}

}

經(jīng)用反編譯命令:javap -c -package -public -private hello_java hello.java

得到的反編譯結(jié)果(hello.java)如下:(有關(guān)javap命令的選擇參數(shù)請見其使用說明,這里-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

}

反編譯微信,得到的.class和.java文件。仔細對比了下,發(fā)現(xiàn)很多地方都差不多呀,難道.Class文件就這樣?

其實這個 我只是了解一點 我知道多少說多少吧 class文件是java自己內(nèi)部通過程序員寫的java文件編譯出來的 class文件 人是看不懂的 只有機器能識別 java文件是人看得懂的 因為java文件最終是要機器使用 所以 就要編譯成機器能識別的文件 其實java文件中有些是要用到底層的東西的 這些在java文件中是看不到的 只有在class文件中才能看見 既然class文件可以看得見 我們有看不懂 所以 我們就用反編譯器把class文件反編譯成我們看得懂的文件 這樣有些在java文件中不會有的代碼在反編譯后的class文件中就會看得到 其實大部分class文件反編譯后的代碼和java文件的代碼都是一樣的 區(qū)別只是少數(shù)

如何反編譯獲得java源代碼

就是有些R資源只顯示ID號,還有一些沒用的代碼也反編譯出來了

當(dāng)前名稱:反編譯java對比代碼 反編譯語言
URL分享:http://muchs.cn/article44/hgshhe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站收錄、企業(yè)建站、網(wǎng)站改版網(wǎng)頁設(shè)計公司、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司