java防止反編譯
A. java的打包後jar包裡面的class文件都能被反編譯成為源碼嗎
jd-gui這個工具可以進行反編譯的操作。 不過反編譯的質量隨著混淆的程度而定。
特別復雜的代碼(如加密演算法)反編譯一般都有問題。可以建議用 javap -c -p 來看位元組碼。然後參考jvm指令。
一般編譯的文件,都可以反編譯為源碼,但如果是經過加密、以及代碼異常復雜,是很難恢復全部的源碼。
B. myeclipse 生成jar 怎麼防止反編譯
1.下載MyEclipse反編譯Class文件的工具
2.工具的安裝
下載後上面的工具之後,解壓出來,我們可以看到有兩個文件:jad.exe、net.sf.jadclipse_3.3.0.jar 。
第一步:我們將jad.exe文件放到JDK的bin目錄下
第二步:將 net.sf.jadclipse_3.3.0.jar 拷貝到 MyEclipse安裝目錄下的plugins目錄下面D:
第三步:在D:-8.6dropins創建一個eclipse文件夾.
第四步:在創建好的eclipse文件夾下,分別創建featues、plugins兩個文件夾.
第六步:將net.sf.jadclipse_3.3.0.jar 文件分別拷貝到創建好的featues、plugins兩個文件夾裡面.
第七步:重新啟動MyEclipse,在Windows——>Perference——>Java下面應該會多出一個JadClipse目錄. 如果沒有出現的話,多試幾次就OK了,我當時也是這樣.
第八步:點擊JadClipse,在右邊的窗口中配置JadClipse. 設置path to decompiler為jad.exe的全路徑,如:C:jdkinjad.exe,在Directory for temporary files中指定l臨時文件路徑,如 :D:-8.6 esult ,其中result是新建一個文件夾. 同時需要選中 User Eclipse code formatter ,這樣編譯出來的Java 代碼會和Class文件的格式一樣.
為了避免編譯後的中文亂碼問題,我們需要配置Misc
第九步:安裝完成之後,雙擊Class文件,MyEclipse就自動反編譯了.如果沒有出現想要的結果,需要檢查一下「*.class」默認關聯的編輯器為「JadClipse Class File Viewer「
關聯之後,就可以自動的反編譯啦!
C. java開發的jsp程序編譯後能夠通過反編譯看到源碼,如何可以避免源碼泄露|
JSP沒有辦法,把方法什麼的都寫到JAVA代碼里,JSP只調用,JAVA代碼可以通過工具進行混淆,讓人無法反編譯出原代碼
D. 什麼是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即可查看源碼
E. 用apk改之理,反編譯一個apk的時候卡住不動了,是什麼原因我關掉Java運行環境的話,就會瞬間
如果有命令行,就看命令行提示什麼信息,,,,,,,,,這種第3方的程序,一般很麻煩
F. 如何防止代碼被反編譯
針對代碼反編譯,推薦使用CBS賽博鎖,通過把安全容器內嵌到操作系統中,對容器內的應用和數據進行加鎖,程序和數據在容器內運行,實現最後一米數據安全,防止核心數據被泄露,防止伺服器終端中病毒,防止反編譯,反破解。
G. 如何混淆Java編譯後的類或jar,或將jar編譯成exe,使人無法反編譯獲得源代碼
混淆就可以了
我一直在用proguard4.5.1做Java項目的混淆
H. 怎麼防止Java開發出來的程序被別人反編譯
防止Java開發出來的程序被別人反編譯有很多種方法,下面給你介紹幾種:
1、隔離Java程序
最簡單的方法就是讓用戶不能夠訪問到Java Class程序,這種方法是最根本的方法,具體實現有多種方式。例如,開發人員可以將關鍵的Java Class放在伺服器端,客戶端通過訪問伺服器的相關介面來獲得服務,而不是直接訪問Class文件。這樣黑客就沒有辦法反編譯Class文件。目前,通過介面提供服務的標准和協議也越來越多,例如 HTTP、Web Service、RPC等。但是有很多應用都不適合這種保護方式,例如對於單機運行的程序就無法隔離Java程序。
2、對Class文件進行加密
為了防止Class文件被直接反編譯,許多開發人員將一些關鍵的Class文件進行加密,例如對注冊碼、序列號管理相關的類等。在使用這些被加密的類之前,程序首先需要對這些類進行解密,而後再將這些類裝載到JVM當中。這些類的解密可以由硬體完成,也可以使用軟體完成。
3、轉換成本地代碼
將程序轉換成本地代碼也是一種防止反編譯的有效方法。因為本地代碼往往難以被反編譯。開發人員可以選擇將整個應用程序轉換成本地代碼,也可以選擇關鍵模塊轉換。如果僅僅轉換關鍵部分模塊,Java程序在使用這些模塊時,需要使用JNI技術進行調用。
4、代碼混淆
代碼混淆是對Class文件進行重新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能(語義)。但是混淆後的代碼很難被反編譯,即反編譯後得出的代碼是非常難懂、晦澀的,因此反編譯人員很難得出程序的真正語義。從理論上來說,黑客如果有足夠的時間,被混淆的代碼仍然可能被破解,甚至目前有些人正在研製反混淆的工具。但是從實際情況來看,由於混淆技術的多元化發展,混淆理論的成熟,經過混淆的Java代碼還是能夠很好地防止反編譯。
不同保護技術比較希望能給大家帶來參考: