欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
防止java反編譯的一些常用方法
常用的保護技術(shù)

  由于Java字節碼的抽象級別較高,因此它們較容易被反編譯。下面介紹了幾種常用的方法,用于保護Java字節碼不被反編譯。通常,這些方法不能夠絕對防止程序被反編譯,而是加大反編譯的難度而已,因為這些方法都有自己的使用環(huán)境和弱點(diǎn)。

  1.隔離Java程序

  最簡(jiǎn)單的方法就是讓用戶(hù)不能夠訪(fǎng)問(wèn)到Java Class程序,這種方法是最根本的方法,具體實(shí)現有多種方式。例如,開(kāi)發(fā)人員可以將關(guān)鍵的Java Class放在服務(wù)器端,客戶(hù)端通過(guò)訪(fǎng)問(wèn)服務(wù)器的相關(guān)接口來(lái)獲得服務(wù),而不是直接訪(fǎng)問(wèn)Class文件。這樣黑客就沒(méi)有辦法反編譯Class文件。目前,通過(guò)接口提供服務(wù)的標準和協(xié)議也越來(lái)越多,例如 HTTP、Web Service、RPC等。但是有很多應用都不適合這種保護方式,例如對于單機運行的程序就無(wú)法隔離Java程序。

  2.對Class文件進(jìn)行加密

  為了防止Class文件被直接反編譯,許多開(kāi)發(fā)人員將一些關(guān)鍵的Class文件進(jìn)行加密,例如對注冊碼、序列號管理相關(guān)的類(lèi)等。在使用這些被加密的類(lèi)之前,程序首先需要對這些類(lèi)進(jìn)行解密,而后再將這些類(lèi)裝載到JVM當中。這些類(lèi)的解密可以由硬件完成,也可以使用軟件完成。

  在實(shí)現時(shí),開(kāi)發(fā)人員往往通過(guò)自定義ClassLoader類(lèi)來(lái)完成加密類(lèi)的裝載(注意由于安全性的原因,Applet不能夠支持自定義的ClassLoader)。自定義的ClassLoader首先找到加密的類(lèi),而后進(jìn)行解密,最后將解密后的類(lèi)裝載到JVM當中。在這種保護方式中,自定義的ClassLoader是非常關(guān)鍵的類(lèi)。由于它本身不是被加密的,因此它可能成為黑客最先攻擊的目標。如果相關(guān)的解密密鑰和算法被攻克,那么被加密的類(lèi)也很容易被解密。

  3.轉換成本地代碼

  將程序轉換成本地代碼也是一種防止反編譯的有效方法。因為本地代碼往往難以被反編譯。開(kāi)發(fā)人員可以選擇將整個(gè)應用程序轉換成本地代碼,也可以選擇關(guān)鍵模塊轉換。如果僅僅轉換關(guān)鍵部分模塊,Java程序在使用這些模塊時(shí),需要使用JNI技術(shù)進(jìn)行調用。當然,在使用這種技術(shù)保護Java程序的同時(shí),也犧牲了Java的跨平臺特性。對于不同的平臺,我們需要維護不同版本的本地代碼,這將加重軟件支持和維護的工作。不過(guò)對于一些關(guān)鍵的模塊,有時(shí)這種方案往往是必要的。為了保證這些本地代碼不被修改和替代,通常需要對這些代碼進(jìn)行數字簽名。在使用這些本地代碼之前,往往需要對這些本地代碼進(jìn)行認證,確保這些代碼沒(méi)有被黑客更改。如果簽名檢查通過(guò),則調用相關(guān)JNI方法。

  4.代碼混淆

  代碼混淆是對Class文件進(jìn)行重新組織和處理,使得處理后的代碼與處理前代碼完成相同的功能(語(yǔ)義)。但是混淆后的代碼很難被反編譯,即反編譯后得出的代碼是非常難懂、晦澀的,因此反編譯人員很難得出程序的真正語(yǔ)義。從理論上來(lái)說(shuō),黑客如果有足夠的時(shí)間,被混淆的代碼仍然可能被破解,甚至目前有些人正在研制反混淆的工具。但是從實(shí)際情況來(lái)看,由于混淆技術(shù)的多元化發(fā)展,混淆理論的成熟,經(jīng)過(guò)混淆的Java代碼還是能夠很好地防止反編譯。下面我們會(huì )詳細介紹混淆技術(shù),因為混淆是一種保護Java程序的重要技術(shù)。

  幾種技術(shù)的總結

  以上幾種技術(shù)都有不同的應用環(huán)境,各自都有自己的弱點(diǎn),表1是相關(guān)特點(diǎn)的比較。

  到目前為止,對于Java程序的保護,混淆技術(shù)還是最基本的保護方法。Java混淆工具也非常多,包括商業(yè)的、免費的、開(kāi)放源代碼的。Sun公司也提供了自己的混淆工具。它們大多都是對Class文件進(jìn)行混淆處理,也有少量工具首先對源代碼進(jìn)行處理,然后再對Class進(jìn)行處理,這樣加大了混淆處理的力度。目前,商業(yè)上比較成功的混淆工具包括JProof公司的1stBarrier系列、Eastridge公司的JShrink和4thpass.com的SourceGuard等。主要的混淆技術(shù)按照混淆目標可以進(jìn)行如下分類(lèi),它們分別為符號混淆(Lexical Obfuscation)、數據混淆(Data Obfuscation)、控制混淆(Control Obfuscation)、預防性混淆(Prevent Transformation)。

  符號混淆

  在Class中存在許多與程序執行本身無(wú)關(guān)的信息,例如方法名稱(chēng)、變量名稱(chēng),這些符號的名稱(chēng)往往帶有一定的含義。例如某個(gè)方法名為getKeyLength(),那么這個(gè)方法很可能就是用來(lái)返回Key的長(cháng)度。符號混淆就是將這些信息打亂,把這些信息變成無(wú)任何意義的表示,例如將所有的變量從vairant_001開(kāi)始編號;對于所有的方法從method_001開(kāi)始編號。這將對反編譯帶來(lái)一定的困難。對于私有函數、局部變量,通??梢愿淖兯鼈兊姆?,而不影響程序的運行。但是對于一些接口名稱(chēng)、公有函數、成員變量,如果有其它外部模塊需要引用這些符號,我們往往需要保留這些名稱(chēng),否則外部模塊找不到這些名稱(chēng)的方法和變量。因此,多數的混淆工具對于符號混淆,都提供了豐富的選項,讓用戶(hù)選擇是否、如何進(jìn)行符號混淆。

  

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java vs C++
Java面向對象編程-類(lèi)的聲明周期
深入淺出:圖形化淺析JAVA程序運行模式及虛擬機JVM
JVM內存分析,以及一步步詳解Java程序是如何運行的?
全棧必備 Java基礎
java動(dòng)態(tài)編譯執行
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久