java本就是開源的,你加密感覺怪怪的。
想防止反編譯,最簡單的方法就是你可以向Jar注入無效代碼。比如建一個類,建一個沒有意義的方法private class Invalid{ },然後輸出為jar。用解壓縮軟體打開這個jar,以文本方式找到那個類的class,然後將那個方法名的一個字母刪掉,然後更新入壓縮文件中。用jd-gui反編譯提示錯誤。這種方式不能用於android中。
還有種方法就是混淆代碼,加密class和高級加密class,方式比較復雜,可以自行網路。
Ⅱ 有哪些防止反編譯 Java 類庫 jar 文件的辦法
反編譯工具(如jdk帶的javap、或jad)將TestSimplePlus反編譯成Java Byte Cod,命令如下:jad -o -a -s d.java TestSimplePlus.classjavap -c DocFooter > F://test.txt再上傳個反編譯的神器(批量編譯)
Ⅲ java程序如何防止反編譯
用其他語言.
C#和Java是最容易反編譯的.
我接觸過一個產品, C#寫的, 為了防止反編譯, 他們存放資料庫簡搜的數據都是編譯春咐斗的.表之間的關系是用一些meta來描述的,天書一樣.
我建議, 換語言或者在資料庫這端採取手扒磨段.
Ⅳ java加密
可以的,但是對jar包直接加密,目前只支持J2SE,還不支持J2EE。更多的還是用混編器(java obfuscator)。下面是關於HASP的介紹。
-----------------------------------------------------
針對java加密防止反編譯的解決方案
眾所周知,java開發語言提供了很方便的開發平台,開發出來的程序很容易在不同的平台上被移植,現在越來越多的人使用它來開發軟體,與.net語言並駕齊驅。
Java有它方便的一面,同時也給開發者帶來了一個不小的煩惱,就是保護程序代碼變得困難,因為java語言編譯和代碼執行的特殊性,目前,除了HASP外,還沒有一個更好的解決辦法或保護方案,但如果不採取有力的措施,則自己辛辛苦苦開發出來的程序很容易被人復制而據為己有,一般情況下,大多數的人都是用混編器(java obfuscator)來把開發出來的程序進行打亂,以想達到防止反編譯的目的,但是,這種方法在網上很容易找到相關的軟體來重新整理,那麼這個混編器工具也只能控制一些本來就沒有辦法的人,而對於稍懂工具的人幾乎是透明的,沒有任何意義。再說硬體加密鎖,大多數廠商提供的加密鎖只能進行dll的連接或簡單的api調用,只要簡單地反編譯,就很容易把api去掉,這樣加密鎖根本起不了作用,那到底是否還有更好的解決辦法呢?
現提供2種解決辦法:
1、以色列阿拉丁公司的HASP HL加密鎖提供的外殼加密工具中,有一個叫做數據加密的功能,這個功能可以很好的防止反編譯而去掉api的調用,大家知道:硬體加密鎖的保護原理就是讓加密過的軟體和硬體緊密地連接在一起,調用不會輕易地被剔除,這樣才能持久地保護您的軟體不被盜版,同時,這種方式使用起來非常簡單,很容易被程序員掌握,要對一個軟體實現保護,大約只需幾分鍾的時間就可以了,下面簡單介紹一下它的原理:
運用HASP HL的外殼工具先把java解釋器進行加密,那麼,如果要啟動這個解釋器就需要有特定的加密鎖存在,然後,再運用外殼工具中的數據加密功能把java程序(CLASS或JAR包)當作一個數據文件來進行加密處理,生成新的java程序(CLASS或JAR包),因為這個加密過程是在鎖內完成的,並採用了128位的AES演算法,這樣,加密後的java程序,無論你採用什麼樣的反編譯工具,都是無法反編譯出來的。您的軟體也只有被加密過的java解釋器並有加密鎖的情況下才能正常運行,如果沒有加密鎖,程序不能運行,從而達到真正保護您的軟體的目的。
2、HASP HL提供專門針對java外殼加密工具,直接加密jar包,防止外編譯,目前只支持J2SE,將來會進一步支持J2EE,如果情況適合則是最簡單的方法。
Ⅳ 如何防止JAVA程序源代碼被反編譯
我們都知道JAVA是一種解析型語言,這就決定JAVA文件編譯後不是機器碼,而是一個位元組碼文件,也就是CLASS文件。而這樣的文件是存在規律的,經過反編譯工具是可以還原回來的。例如Decafe、FrontEnd,YingJAD和Jode等等軟體。下面是《Nokia中Short數組轉換演算法》
類中Main函數的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代碼是:short [] pixels = parseImage("/ef1s.png");
我們通過反編譯工具是可以還原出以上源代碼的。而通過簡單的分析,我們也能自己寫出源代碼的。
第一行:ldc #16
ldc為虛擬機的指令,作用是:壓入常量池的項,形式如下ldc index這個index就是上面的16,也就是在常量池中的有效索引,當我們去看常量池的時候,我們就會找到index為16的值為String_info,裡面存了/ef1s.png.
所以這行的意思就是把/ef1s.pn作為一個String存在常量池中,其有效索引為16。
第二行:2 invokestatic #18
invokestatic為虛擬機指令,作用是:調用類(static)方法,形式如下
invokestatic indexbyte1 indexbyte2
其中indexbyte1和indexbyte2必須是在常量池中的有效索引,而是指向的類型必須有Methodref標記,對類名,方法名和方法的描述符的引用。
所以當我們看常量池中索引為18的地方,我們就會得到以下信息:
Class Name : cp_info#1
Name Type : cp_info#19
1 和19都是常量池中的有效索引,值就是右邊<中的值,再往下跟蹤我就不多說了,有興趣的朋友可以去JAVA虛擬機規范。
這里我簡單介紹一下parseImage(Ljava/lang/String;)[S 的意思。
這就是parseImage這個函數的運行,我們反過來看看parseImage的原型就明白了
short [] parseImage(String)
那麼Ljava/lang/String;就是說需要傳入一個String對象,而為什麼前面要有一個L呢,這是JAVA虛擬機用來表示這是一個Object。如果是基本類型,這里就不需要有L了。然後返回為short的一維數組,也就是對應的[S。是不是很有意思,S對應著Short類型,而「[」對應一維數組,那有些朋友要問了,兩維呢,那就「[[」,呵呵,是不是很有意思。
好了,調用了函數,返回的值要保存下來吧。那麼就是第三行要做的事情了。
Ⅵ class文件能被反編譯,java程序不就沒有保密性了嗎
Java .class 文件是高度抽象的, 因而反編譯技術難度不大, 現行也有很多好用的工具. 所以, 不加特別的保護策略的話, 可以說 Jar 包是沒有保密性的了.
但是, 一般來說, 代碼是有知識產權保護和 Licence 聲明的, 所以, 你的競爭對手在反編譯你的代碼時, 是冒著侵權被訴訟的風險的.
而且, 可以採用保護策略來防止反編譯, 比如採用工具來擾亂編譯得到的 .class 文件.
Ⅶ class文件能被反編譯,java程序不就沒有保密性了嗎
可以採用保護策略來防止反編譯, 一般來說.class 文件是高度抽象的, 不加特別的保護策略的話, 可以說 Jar 包是沒有保密性的了.
但是, 比如採用工具來擾亂編譯得到的 , 你的競爭對手在反編譯你的代碼時.
而且Java , 現行也有很多好用的工具. 所以, 代碼是有知識產權保護和 Licence 聲明的, 所以, 是冒著侵權被訴訟的風險的.class 文件, 因而反編譯技術難度不大
Ⅷ 請教:對Java類庫jar文件,有什麼好的防止反編譯辦法,最好是加密/解密方案,而不是代碼混淆方案。
很久前做過一個項目,用很復雜的演算法加密 class文件,然後在虛擬機載入前調用解密程序。用的是 jvmti。這樣可以防止class loader被反編譯導致加解密演算法泄漏,應該算比較好的一種解決方案了。
Ⅸ 北大青鳥設計培訓:java中的編譯與反編譯
一、什麼是編譯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文件,那麼昌平java培訓http://www.kmbdqn.cn/認為可以把它反編譯成我們可以看得懂的文件。
2、學習Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現細節,我們可以藉助反編譯。
Ⅹ 如何防止java文件被反編譯
所謂魔高一尺,道高一丈
這種事是很難做到絕對防止反編譯的