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

談談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寄去 參考文獻 ) ) ) ) lishixinzhi/Article/program/Java/Javascript/201311/25331

創新互聯建站主打移動網站、成都做網站、網站制作、網站改版、網絡推廣、網站維護、申請域名、等互聯網信息服務,為各行業提供服務。在技術實力的保障下,我們為客戶承諾穩定,放心的服務,根據網站的內容與功能再決定采用什么樣的設計。最后,要實現符合網站需求的內容、功能與設計,我們還會規劃穩定安全的技術方案做保障。

如何反編譯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資源。

注意:文件的路徑中最好不要出現中文!

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

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

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

}

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

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

如何反編譯獲得java源代碼

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

當前名稱:反編譯java對比代碼 反編譯語言
URL分享:http://m.kartarina.com/article44/hgshhe.html

成都網站建設公司_創新互聯,為您提供小程序開發網站收錄企業建站網站改版網頁設計公司靜態網站

廣告

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

成都網頁設計公司
主站蜘蛛池模板: 国产成人A亚洲精V品无码| 国产成人精品无码专区| 精品无码一区二区三区爱欲 | 亚洲午夜无码久久久久软件| 亚洲日韩中文无码久久| 亚洲AV无码第一区二区三区| 九九无码人妻一区二区三区| 亚洲精品国产日韩无码AV永久免费网 | 国产精品午夜无码AV天美传媒| 亚洲AV永久无码精品放毛片| 亚洲不卡无码av中文字幕| 最新中文字幕av无码专区| 成人av片无码免费天天看| 日韩放荡少妇无码视频| 亚洲国产成人片在线观看无码| 乱人伦人妻中文字幕无码| 日韩精品无码一区二区三区免费| 最新亚洲人成无码网www电影| 在线高清无码A.| 国产午夜鲁丝片AV无码| 欧洲Av无码放荡人妇网站| 亚洲最大av无码网址| 精品久久久久久中文字幕无码| 无码国内精品人妻少妇| 人妻AV中出无码内射| 无码少妇一区二区浪潮av| 18禁免费无码无遮挡不卡网站 | 国产精品无码av片在线观看播| 无码专区中文字幕无码| 无码人妻精品丰满熟妇区| 亚洲欧洲国产综合AV无码久久| 中文无码热在线视频| 精品无码人妻一区二区三区品 | 无套内射在线无码播放| 最新国产精品无码| 国产午夜鲁丝片AV无码免费| 久久精品日韩av无码| 人妻无码中文字幕免费视频蜜桃| 精品无码成人网站久久久久久 | 精品人妻系列无码一区二区三区| 国产AV无码专区亚洲AVJULIA|