不需要對(duì)源代碼混淆。class有這種功能的,在J2ME中混淆是必須的,結(jié)果跟你說(shuō)的一樣,不過(guò)原理不是你那么走的,混淆以后的class反編譯也會(huì)讓人看不懂,全部變成了a,b,c,d這樣的名字。
為洛龍等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及洛龍網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、洛龍網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
可以使用Virbox Protector Standalone 加殼工具對(duì)java的class類進(jìn)行加密,支持各種開(kāi)發(fā)語(yǔ)言的程序加密。可防止代碼反編譯,更安全,更方便
產(chǎn)品簡(jiǎn)介
Virbox Protector Standalone提供了強(qiáng)大的代碼虛擬化、高級(jí)混淆與智能壓縮技術(shù),保護(hù)您的程序免受逆向工程和非法修改。
Virbox Protector Standalone 將被保護(hù)的程序代碼轉(zhuǎn)換為虛擬機(jī)代碼,程序運(yùn)行時(shí),虛擬機(jī)將模擬程序執(zhí)行,進(jìn)入和離開(kāi)虛擬機(jī)都有高級(jí)代碼混淆。虛擬機(jī)配合代碼混淆可以達(dá)到很好的保護(hù)效果,尤其是開(kāi)發(fā)者的私有邏輯。高級(jí)混淆利用花指令和代碼非等價(jià)變形等技術(shù),將程序的代碼,轉(zhuǎn)換成一種功能上等價(jià),但是難于閱讀和理解的代碼,可充分干擾靜態(tài)分析。應(yīng)用程序的解壓縮含有動(dòng)態(tài)密碼,讓一切自動(dòng)脫殼工具失效,有效的阻止.Net、PE 程序的直接反編譯。
特點(diǎn)
多種加密策略:代碼虛擬化、高級(jí)混淆、智能壓縮
性能分析:智能分析引擎,一鍵分析各個(gè)函數(shù)模塊調(diào)用的次數(shù)
支持多種開(kāi)發(fā)語(yǔ)言:多種開(kāi)發(fā)語(yǔ)言加殼支持
源碼級(jí)保護(hù):保護(hù)到匯編級(jí)別,c#保護(hù)IL級(jí)別
免費(fèi)更新:免費(fèi)版本升級(jí)
由于Java字節(jié)碼的抽象級(jí)別較高,因此它們較容易被反編譯。下面介紹了幾種常用的方法,用于保護(hù)Java字節(jié)碼不被反編譯。通常,這些方法不能夠絕對(duì)防止程序被反編譯,而是加大反編譯的難度而已,因?yàn)檫@些方法都有自己的使用環(huán)境和弱點(diǎn)。
1.隔離Java程序
最簡(jiǎn)單的方法就是讓用戶不能夠訪問(wèn)到Java Class程序,這種方法是最根本的方法,具體實(shí)現(xiàn)有多種方式。例如,開(kāi)發(fā)人員可以將關(guān)鍵的Java Class放在服務(wù)器端,客戶端通過(guò)訪問(wèn)服務(wù)器的相關(guān)接口來(lái)獲得服務(wù),而不是直接訪問(wèn)Class文件。這樣黑客就沒(méi)有辦法反編譯Class文件。目前,通過(guò)接口提供服務(wù)的標(biāo)準(zhǔn)和協(xié)議也越來(lái)越多,例如 HTTP、Web Service、RPC等。但是有很多應(yīng)用都不適合這種保護(hù)方式,例如對(duì)于單機(jī)運(yùn)行的程序就無(wú)法隔離Java程序。
2.對(duì)Class文件進(jìn)行加密
為了防止Class文件被直接反編譯,許多開(kāi)發(fā)人員將一些關(guān)鍵的Class文件進(jìn)行加密,例如對(duì)注冊(cè)碼、序列號(hào)管理相關(guān)的類等。在使用這些被加密的類之前,程序首先需要對(duì)這些類進(jìn)行解密,而后再將這些類裝載到JVM當(dāng)中。這些類的解密可以由硬件完成,也可以使用軟件完成。
在實(shí)現(xiàn)時(shí),開(kāi)發(fā)人員往往通過(guò)自定義ClassLoader類來(lái)完成加密類的裝載(注意由于安全性的原因,Applet不能夠支持自定義的ClassLoader)。自定義的ClassLoader首先找到加密的類,而后進(jìn)行解密,最后將解密后的類裝載到JVM當(dāng)中。在這種保護(hù)方式中,自定義的ClassLoader是非常關(guān)鍵的類。由于它本身不是被加密的,因此它可能成為黑客最先攻擊的目標(biāo)。如果相關(guān)的解密密鑰和算法被攻克,那么被加密的類也很容易被解密。
3.轉(zhuǎn)換成本地代碼
將程序轉(zhuǎn)換成本地代碼也是一種防止反編譯的有效方法。因?yàn)楸镜卮a往往難以被反編譯。開(kāi)發(fā)人員可以選擇將整個(gè)應(yīng)用程序轉(zhuǎn)換成本地代碼,也可以選擇關(guān)鍵模塊轉(zhuǎn)換。如果僅僅轉(zhuǎn)換關(guān)鍵部分模塊,Java程序在使用這些模塊時(shí),需要使用JNI技術(shù)進(jìn)行調(diào)用。當(dāng)然,在使用這種技術(shù)保護(hù)Java程序的同時(shí),也犧牲了Java的跨平臺(tái)特性。對(duì)于不同的平臺(tái),我們需要維護(hù)不同版本的本地代碼,這將加重軟件支持和維護(hù)的工作。不過(guò)對(duì)于一些關(guān)鍵的模塊,有時(shí)這種方案往往是必要的。為了保證這些本地代碼不被修改和替代,通常需要對(duì)這些代碼進(jìn)行數(shù)字簽名。在使用這些本地代碼之前,往往需要對(duì)這些本地代碼進(jìn)行認(rèn)證,確保這些代碼沒(méi)有被黑客更改。如果簽名檢查通過(guò),則調(diào)用相關(guān)JNI方法。
4.代碼混淆
代碼混淆是對(duì)Class文件進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能(語(yǔ)義)。但是混淆后的代碼很難被反編譯,即反編譯后得出的代碼是非常難懂、晦澀的,因此反編譯人員很難得出程序的真正語(yǔ)義。從理論上來(lái)說(shuō),黑客如果有足夠的時(shí)間,被混淆的代碼仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是從實(shí)際情況來(lái)看,由于混淆技術(shù)的多元化發(fā)展,混淆理論的成熟,經(jīng)過(guò)混淆的Java代碼還是能夠很好地防止反編譯。下面我們會(huì)詳細(xì)介紹混淆技術(shù),因?yàn)榛煜且环N保護(hù)Java程序的重要技術(shù)。