java代碼禁止反編譯 java代碼怎么防止反編譯

java程序如何不被反編譯

如果是一個簡單的jar包或class文件想不被反編譯目前來講那是不可能的

創(chuàng)新互聯(lián)是一家成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè),提供網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,網(wǎng)站制作,建網(wǎng)站,按需定制設(shè)計,網(wǎng)站開發(fā)公司,2013年開創(chuàng)至今是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價值為核心業(yè)務(wù),全程參與項目的網(wǎng)站策劃設(shè)計制作,前端開發(fā),后臺程序制作以及后期項目運營并提出專業(yè)建議和思路。

想讓自己的代碼不被別人反編譯出具體的代碼內(nèi)容,簡單的方法就是用一些特定的工具對程序進行封裝,比如說封裝成exe文件,代碼方面的話做混淆處理等添加反編譯難度,這樣就大大提高了反編譯的難度了

如何防止JAVA程序源代碼被反編譯

我們都知道JAVA是一種解析型語言,這就決定JAVA文件編譯后不是機器碼,而是一個字節(jié)碼文件,也就是CLASS文件。而這樣的文件是存在規(guī)律的,經(jīng)過反編譯工具是可以還原回來的。例如Decafe、FrontEnd,YingJAD和Jode等等軟件。下面是《Nokia中Short數(shù)組轉(zhuǎn)換算法》

類中Main函數(shù)的ByteCode:0 ldc #162 invokestatic #185 astore_16 return其源代碼是:short [] pixels = parseImage("/ef1s.png");

我們通過反編譯工具是可以還原出以上源代碼的。而通過簡單的分析,我們也能自己寫出源代碼的。

第一行:ldc #16

ldc為虛擬機的指令,作用是:壓入常量池的項,形式如下ldc index這個index就是上面的16,也就是在常量池中的有效索引,當我們?nèi)タ闯A砍氐臅r候,我們就會找到index為16的值為String_info,里面存了/ef1s.png.

所以這行的意思就是把/ef1s.pn作為一個String存在常量池中,其有效索引為16。

第二行:2 invokestatic #18

invokestatic為虛擬機指令,作用是:調(diào)用類(static)方法,形式如下

invokestatic indexbyte1 indexbyte2

其中indexbyte1和indexbyte2必須是在常量池中的有效索引,而是指向的類型必須有Methodref標記,對類名,方法名和方法的描述符的引用。

所以當我們看常量池中索引為18的地方,我們就會得到以下信息:

Class Name : cp_info#1

Name Type : cp_info#19

1 和19都是常量池中的有效索引,值就是右邊中的值,再往下跟蹤我就不多說了,有興趣的朋友可以去JAVA虛擬機規(guī)范。

這里我簡單介紹一下parseImage(Ljava/lang/String;)[S 的意思。

這就是parseImage這個函數(shù)的運行,我們反過來看看parseImage的原型就明白了

short [] parseImage(String)

那么Ljava/lang/String;就是說需要傳入一個String對象,而為什么前面要有一個L呢,這是JAVA虛擬機用來表示這是一個Object。如果是基本類型,這里就不需要有L了。然后返回為short的一維數(shù)組,也就是對應(yīng)的[S。是不是很有意思,S對應(yīng)著Short類型,而“[”對應(yīng)一維數(shù)組,那有些朋友要問了,兩維呢,那就“[[”,呵呵,是不是很有意思。

好了,調(diào)用了函數(shù),返回的值要保存下來吧。那么就是第三行要做的事情了。

有哪些防止反編譯 Java 類庫 jar 文件的辦法

java本就是開源的,你加密感覺怪怪的。

想防止反編譯,最簡單的方法就是你可以向Jar注入無效代碼。比如建一個類,建一個沒有意義的方法private class Invalid{ },然后輸出為jar。用解壓縮軟件打開這個jar,以文本方式找到那個類的class,然后將那個方法名的一個字母刪掉,然后更新入壓縮文件中。用jd-gui反編譯提示錯誤。這種方式不能用于android中。

還有種方法就是混淆代碼,加密class和高級加密class,方式比較復(fù)雜,可以自行百度。

如何防止java文件被反編譯

無法防止。.class文件的標準是公開的,無法防止別人反編譯你的代碼。

你頂多可以用代碼擾亂工具擾亂你的代碼,這樣反編譯的代碼就難以閱讀。比如可以試試用proguard來擾亂(“加密”)和反擾亂(“解密”)你的代碼。

但是java有那么多很不錯的代碼閱讀分析工具,即使你用了擾亂器,也不能保證代碼的安全。

當前標題:java代碼禁止反編譯 java代碼怎么防止反編譯
分享網(wǎng)址:http://www.muchs.cn/article40/doeegeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、域名注冊、App開發(fā)企業(yè)建站、手機網(wǎng)站建設(shè)、小程序開發(fā)

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站建設(shè)