㈠ 從java程序里反編譯出來,一字未改再重新編譯提示100多個錯誤
反編譯的程序,不能保證100%的正確的,所以你再編譯,很明顯問題出來了。
有些地方應該還要手動修改一下。
㈡ APK反編譯,修改了.java源碼,現在怎麼編譯回去
做行通反編譯般能完全源Java代碼代碼甚至語錯誤除非簡單些代碼要改改.class文件非困難要16進制改或者改smali文件比改.class文件要稍微簡單點用16進制修改直接改代碼需要定smali語知識
㈢ 什麼是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即可查看源碼
㈣ java反編譯軟體java反編譯最好的工具
本文對常用的反編譯工具進行簡單介紹
JD-GUI、procyon-decompiler、luyten、crf
反編譯工具分類JD-GUI
JDK7以及之前可以使用 JD-GUI,如果版本>=1.8 各種問題
http://java-decompiler.github.io
procyon-decompiler
如果版本>=1.8 ,可以使用 procyon-decompiler,不過是命令行界面
https://bitbucket.org/mstrobel/procyon/downloads/
luyten
luyten是Procyon的GUI,只需要下載luyten即可,不用下載Procyon
https://github.com/deathmarine/Luyten
下載地址
https://github.com/deathmarine/Luyten/releases
crf
crf也可以支持更高版本
http://www.benf.org/other/cfr/
小結
如果你的版本<=7,都可以使用,如果版本更高,請使用除了JD-GUI以外的選擇
使用JD-GUI
略,JD-GUI網上教程很多,不再介紹。
procyon-decompiler
可以直接解析class文件到cmd窗口顯示
也可以將反編譯之後的文件保存到指定位置,如果需要保存在指定位置,需要增加 -o命令參數,並且需要指定保存的路徑
直接顯示:
java -jar D:\ApplicationFiles\program\procyon-decompiler-0.5.30.jar D:\ProgramData\ideaProjects\...\news\NewsController.class保存文件:
java -jar D:\ApplicationFiles\program\procyon-decompiler-0.5.30.jar D:\ProgramData\ideaProjects\...\news\NewsController.class -o C:\Users\noteless\Desktop\dddddd
luyten
luyten是圖形化界面
通過File直接打開class文件即可
當然,也可以進行文件保存等操作
注意
直接打開luyten的時候,給出了下面的提示信息
但是,系統中的java環境是沒有問題的,也是一直在使用的,CMD下運行java或者javac命令都沒有問題
這是為什麼?
據網上分析是因為使用了免安裝版本的JDK,簡單說不是從官網下載可執行程序一步一步安裝而來
這也就導致了注冊表中不存在JDK的信息
一種變通的途徑就是藉助於命令,通過在命令提示符下面輸入 java -jar .\luyten-0.5.4.exe打開
(此時,我的文件存在於桌面上,所以使用的當前路徑)
如果設置到其他位置,請給出路徑,比如
也可以進一步設置為bat命令
文件就一行內容:
java -jar D:\ApplicationFiles\program\luyten-0.5.4.exe再進一步可以創建一個快捷方式,使用下文的方式,就可以直接使用WIN鍵+R打開
https://www.cnblogs.com/noteless/p/10471005.html
另一種方法,就是手動設置注冊表
還有一種方法是重新安裝JDK,走一遍過程
建議通過命令java -jar就好了,改注冊表後續出現什麼奇怪問題,自己可能都忘記了是自己改出來的
重新安裝麻煩費事
CFR
http://www.benf.org/other/cfr/
CFR更新還是蠻及時的
它的使用,與procyon-decompiler沒有區別
可以直接反編譯呈現在CMD中,也可以輸出到文件中
直接解析:
C:\Users\noteless>java -jar D:\ApplicationFiles\program\cfr-0.141.jar C:\Users\noteless\Desktop\NewsController.class輸出文件:
java -jar D:\ApplicationFiles\program\cfr-0.141.jar C:\Users\noteless\Desktop\NewsController.class --outputdir C:\Users\noteless\Desktop\xxx
㈤ 我把一個class文件反編譯成java文件後再反編譯回去,提示錯誤!
反編譯後的java文件引用了你現在編譯環境中沒有的包,而這些包是原作者在開發的時候專用配置好的,所以你編譯的時候 某些import就會報錯了