亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java軟件保護(hù)機(jī)制的研究與實(shí)現(xiàn)

        2016-09-06 08:55:50尹艷陽(yáng)任洪敏
        現(xiàn)代計(jì)算機(jī) 2016年19期
        關(guān)鍵詞:序列號(hào)源代碼解密

        尹艷陽(yáng),任洪敏

        (上海海事大學(xué)信息工程學(xué)院,上海 201306)

        Java軟件保護(hù)機(jī)制的研究與實(shí)現(xiàn)

        尹艷陽(yáng),任洪敏

        (上海海事大學(xué)信息工程學(xué)院,上海 201306)

        軟件保護(hù)是一個(gè)困擾軟件行業(yè)開(kāi)發(fā)者的問(wèn)題,特別是在當(dāng)今互聯(lián)網(wǎng)飛速發(fā)展且強(qiáng)調(diào)知識(shí)產(chǎn)權(quán)的時(shí)代,更應(yīng)該引起業(yè)界的足夠重視。Java語(yǔ)言以其“一次編譯,到處運(yùn)行”等眾多優(yōu)點(diǎn)占據(jù)著編程語(yǔ)言排行榜第一的位置。但是天生的特性使其非常容易通過(guò)各類(lèi)反編譯軟件反編譯得到源代碼,致使Java軟件安全面臨著巨大危險(xiǎn)。因而提出Java軟件序列號(hào)方式實(shí)現(xiàn)授權(quán),對(duì)序列號(hào)和Java類(lèi)文件分別加密,在自定義加載類(lèi)中解碼編譯,并用混淆器做代碼混淆。結(jié)果表明Java軟件無(wú)任何異常同時(shí)實(shí)現(xiàn)保護(hù)作用。

        軟件保護(hù);類(lèi)文件;自定義加載類(lèi);代碼混淆

        0 引言

        軟件的開(kāi)發(fā)需要大量的人力、智力和財(cái)力的投入,是由一個(gè)人或團(tuán)隊(duì)協(xié)作完成的高強(qiáng)度腦力勞動(dòng)的結(jié)晶,是以知識(shí)、經(jīng)驗(yàn)和智慧為基礎(chǔ)具有創(chuàng)造性的產(chǎn)物。與有形財(cái)產(chǎn)一樣,也應(yīng)受到保護(hù),以提高開(kāi)發(fā)者積極性和創(chuàng)造力,促進(jìn)軟件行業(yè)發(fā)展。但它同一般物質(zhì)性商品有明顯的差別,軟件產(chǎn)品的復(fù)制(批量生產(chǎn))是極其簡(jiǎn)單的,其復(fù)制成本同其開(kāi)發(fā)成本相比較,幾乎可以忽略不計(jì)。

        Java語(yǔ)言在知識(shí)產(chǎn)權(quán)保護(hù)方面有著天然的劣勢(shì),Java代碼經(jīng)過(guò)編譯后產(chǎn)生字節(jié)碼,但是字節(jié)碼能夠通過(guò)反編譯從而獲得到軟件源代碼的,從而來(lái)推導(dǎo)出軟件產(chǎn)品所使用的思路、結(jié)構(gòu)、算法、原理、運(yùn)行方法、處理過(guò)程等具有知識(shí)產(chǎn)權(quán)的設(shè)計(jì)要素,這樣就使Java軟件的安全和知識(shí)產(chǎn)權(quán)受到嚴(yán)重威脅。

        1 Java軟件保護(hù)的研究現(xiàn)狀

        目前已經(jīng)有多種技術(shù)方法來(lái)限制反編譯或者提升反編譯的難度。本地編譯技術(shù)是把 Java程序編譯成為能夠在特定計(jì)算機(jī)上運(yùn)行的應(yīng)用程序。編譯后產(chǎn)生的是本地可執(zhí)行的二進(jìn)制文件,使得用戶(hù)無(wú)法通過(guò)反編譯獲得源代碼,但此方法破壞了Java語(yǔ)言的可移植性。數(shù)字水印是在軟件產(chǎn)品中嵌入的標(biāo)識(shí)信號(hào),數(shù)字不破壞軟件的使用價(jià)值和使用體驗(yàn)。但是水印技術(shù)不是從本質(zhì)上解決反編譯問(wèn)題,只是提供了有反編譯行為時(shí)的證據(jù)。代碼混淆(Obfuscated code)也稱(chēng)之為花指令,是保持軟件程序功能等價(jià)的基礎(chǔ)上對(duì)源代碼做復(fù)雜的再組織和加工,令閱讀和理解代碼增加難度。

        在Java軟件保護(hù)方面,本文提出Java軟件以序列號(hào)方式授權(quán),用戶(hù)必須擁有合法身份使用軟件,對(duì)于非法用戶(hù)有排斥和懲治措施。以及對(duì)Java class文件加密,動(dòng)態(tài)解密。該方案的主要思想是:由程序獲得運(yùn)行計(jì)算機(jī)唯一標(biāo)識(shí)MAC地址,對(duì)唯一標(biāo)識(shí)做RSA公鑰加密作為軟件序列號(hào)。同時(shí)對(duì)選擇的類(lèi)文件加密,然后在類(lèi)文件被加載調(diào)用時(shí)對(duì)其進(jìn)行解密,在動(dòng)態(tài)解密過(guò)程中隨機(jī)對(duì)序列號(hào)進(jìn)行檢測(cè),從而實(shí)現(xiàn)對(duì) Java源代碼的保護(hù)。然后對(duì)加載類(lèi)和部分代碼做混淆。

        2 Java軟件保護(hù)的設(shè)計(jì)

        2.1 Java軟件序列號(hào)授權(quán)設(shè)計(jì)

        本文提出的Java軟件保護(hù)機(jī)制的序列號(hào)方式授權(quán)的主要思路過(guò)程可以分為如下步驟:①將程序獲得運(yùn)行機(jī)的唯一標(biāo)識(shí)MAC地址以及用戶(hù)提交用戶(hù)信息交由開(kāi)發(fā)者;②開(kāi)發(fā)者對(duì)計(jì)算機(jī)唯一標(biāo)識(shí)和用戶(hù)信息進(jìn)行處理,做加密作為軟件序列號(hào),然后將軟件的序列號(hào)發(fā)送給用戶(hù);③用戶(hù)輸入軟件序列號(hào)并保存在軟件配置文件中,由本地程序判斷序列號(hào)的合法性,檢查用戶(hù)是否為合法身份。Java軟件序列號(hào)授權(quán)過(guò)程整體流程如圖1所示。

        圖1

        2.2 class文件加密設(shè)計(jì)

        (1)加密類(lèi)文件

        利用 Java Security包中加密擴(kuò)展接口結(jié)合 RSA加密算法來(lái)對(duì) Java應(yīng)用程序里關(guān)鍵核心類(lèi)文件和數(shù)據(jù)進(jìn)行加密。加密后class文件不再是符合規(guī)則的字節(jié)碼文件,而是變成反編譯器無(wú)法打開(kāi)的亂碼文件,那么意味著反編譯器為首的逆向工程工具無(wú)法從加密后的Java class文件中獲得任何受保護(hù)的信息。整體思路如圖2所示。

        圖2

        (2)自定義加載器

        類(lèi)加載器 Classloader是Java運(yùn)行環(huán)境的一部分,負(fù)責(zé)把Java類(lèi)動(dòng)態(tài)加載到Java虛擬機(jī)的內(nèi)存里。每一個(gè)Java類(lèi)必須由某個(gè)類(lèi)加載器裝入到內(nèi)存中。Java虛擬機(jī)啟動(dòng)時(shí),虛擬機(jī)內(nèi)有三個(gè)默認(rèn)的類(lèi)加載器,形成類(lèi)加載器層次:Bootstrap ClassLoader是用本地代碼實(shí)現(xiàn)的,它負(fù)責(zé)加載Java核心庫(kù) (存儲(chǔ)在

        圖3

        在Java軟件開(kāi)始運(yùn)行時(shí),Java虛擬機(jī)將自定義的類(lèi)加載器載入JVM內(nèi)存中。在自定義ClassLoader中調(diào)用findClass方法實(shí)現(xiàn)父親委托。所謂的父親委托機(jī)制就是自定義加載器委托父加載器(Common)加載Class,Common委托System加載器,System委托BootStrap,如果BootStrap不能加載,則讓Sys加載,逐級(jí)下發(fā),如果直到自定義 ClassLoader還不能加載 Class這拋出ClassNotFindException。委托機(jī)制被提出的最初原因是為安全性考慮的,為了確保Object等重要類(lèi)只可由JVM加載。要特別說(shuō)明的是加載器之間的父子關(guān)系與類(lèi)之間的繼承關(guān)系不是同一概念,指的是加載器彼此的包裝關(guān)系。在本方案中,自定義的類(lèi)加載器通過(guò)讀取配置文件中的參數(shù),實(shí)現(xiàn)查找辨別完成解密處理后完成類(lèi)文件的加載。請(qǐng)求加載過(guò)程如圖 4所示。

        2.3 混淆設(shè)計(jì)

        Java Obfuscator的原理就是將字節(jié)碼轉(zhuǎn)換為一個(gè)邏輯上的對(duì)等物,這種轉(zhuǎn)換后的版本極難拆散。即使有人試圖去反編譯,過(guò)程將極其艱難復(fù)雜,并很難繞過(guò)轉(zhuǎn)換后模糊晦澀的編碼。主要的過(guò)程如下:

        用一個(gè)常規(guī)編譯器(例如JDK)編譯Java源代碼運(yùn)行混淆器,在受保護(hù)的環(huán)境下生成編譯類(lèi)文件。最后生成的會(huì)是一個(gè)不同的輸出文檔,也許擴(kuò)展名也會(huì)不同。這個(gè)被重命名為.class file的文件在功能上與原字節(jié)碼是對(duì)等的,由于虛擬機(jī)仍然可以對(duì)其進(jìn)行解譯,因此對(duì)功能不會(huì)產(chǎn)生影響。

        圖4

        3 Java軟件保護(hù)的實(shí)現(xiàn)

        3.1 Java軟件序列號(hào)的生成

        將程序獲得的計(jì)算機(jī)唯一標(biāo)識(shí),用戶(hù)提交的用戶(hù)信息,提交注冊(cè)時(shí)間戳,隨即字符串做為Java軟件序列號(hào)生成的參數(shù),通過(guò)處理得到序列號(hào)。如式(1)。

        在檢查序列號(hào)正確性時(shí),對(duì)用戶(hù)輸入的序列號(hào)做MD5加密與用戶(hù)名判斷是否為特定值,同時(shí)與MAC、用戶(hù)信息做對(duì)比,如果身份合法則調(diào)用裝載器將軟件加密部分做解密處理裝入內(nèi)存,初始化JVM虛擬機(jī)環(huán)境并運(yùn)行Java軟件,否則終止退出。如式(2):

        3.2 自定義加載類(lèi)的實(shí)現(xiàn)

        使用自定義的類(lèi)加載器 ClassLoader:在自定義ClassLoader中調(diào)用findClass()方法判斷類(lèi)是否己經(jīng)是需要解密的類(lèi)文件,如果是普通未被做加密處理的類(lèi)文件,則交給父類(lèi)Webapp加載類(lèi)的findClass()方法負(fù)責(zé)加載;否則由自定義加載器調(diào) findClassEncrypt()方法來(lái)載入className,這樣被 className直接或間接引用的Java類(lèi)都將由自定義加載類(lèi)DeryptClassLoader載入。自定義加載類(lèi)調(diào)入方法核心代碼如下所示:

        自定義加載類(lèi)調(diào)入過(guò)程詳細(xì)說(shuō)明:

        (1)判斷此Class有沒(méi)有載入過(guò)(即在cache中是否有此Class),如果有到(8),如果沒(méi)有到(2)。

        (2)如果parent classloader不存在(沒(méi)有parent,那parent一定是bootstrap classloader了),到(4);如果存在,到(3)。

        (3)請(qǐng)求parent classloader載入,如果成功到(8),不成功到(5)。

        (4)請(qǐng)求JVM從bootstrap classloader中載入,如果成功到(8)。

        (5)查找Class文件(在和該classloader有關(guān)的類(lèi)路徑中查找)。找到了到(6),如果找不到則到(7)。

        (6)從文件中載入Class,到(8)。

        (7)拋出ClassNotFoundException。

        (8)返回Class.

        在 Java軟件加載自定義加載類(lèi)和對(duì)加密后的class文件進(jìn)行解密的過(guò)程中,添加一個(gè)隨機(jī)調(diào)用序列號(hào)判斷方法,概率控制在10%,該方法用于進(jìn)行檢測(cè)用戶(hù)身份合法性,對(duì)于非法用戶(hù)有排斥和懲治措施。

        3.3 代碼混淆的實(shí)現(xiàn)

        使用Zelix KlassMaster混淆器,它是一款用Java寫(xiě)的實(shí)用工具,能讀取和修改Java類(lèi)文件。該工具綜合了控制流模糊處理和異常模糊處理技術(shù),對(duì)Java字節(jié)碼文件進(jìn)行混淆處理。含有對(duì)字符串加密技術(shù),加密后的字符串存儲(chǔ)在常量池中。同時(shí)它提供了命名混淆功能,以降低項(xiàng)目包、類(lèi)、字段、方法名稱(chēng)字節(jié)碼大小。下圖為例子HelloWorld混淆之后代碼。

        圖5

        4 Java軟件保護(hù)部署及測(cè)試

        運(yùn)行class文件加密程序,選擇要加密的class文件。運(yùn)行效果圖6:

        圖6

        用加密過(guò)的class文件替換掉原未被加密的class文件

        將自定義的加載器打成jar包放在lib文件夾中。并在context.xml里

        用JD-GUI等反編譯軟件測(cè)試反編譯加密后的class文件結(jié)果無(wú)法打開(kāi)。

        測(cè)試在class文件加密后,項(xiàng)目依然可以正常運(yùn)行。加密后的字節(jié)碼文件對(duì)比如圖。

        圖7

        圖8

        由于class文件的加密,在加載時(shí)有解密的過(guò)程,必然會(huì)消耗一些時(shí)間,降低一點(diǎn)運(yùn)行效率。實(shí)驗(yàn)用了幾組不同大小的class文件做測(cè)試性能分析,發(fā)現(xiàn)系統(tǒng)執(zhí)行效率與加密的class文件大小存在線性關(guān)系。

        5 結(jié)語(yǔ)

        任何的軟件保護(hù)都并不是無(wú)法攻克的城池,但作為保護(hù)軟件安全和知識(shí)產(chǎn)權(quán)的最后一道關(guān)卡,要盡可能地阻止和增加破解的代價(jià)。本文主要研究了一套Java軟件的保護(hù)方案,實(shí)現(xiàn)了在不影響Java軟件正常運(yùn)行的情況下完成了對(duì)Java軟件的保護(hù)。通過(guò)Java軟件序列號(hào)方式實(shí)現(xiàn)授權(quán)。以?xún)煞N加密方式對(duì)序列號(hào)和Java類(lèi)文件分別加密,在自定義加載類(lèi)中解碼編譯。用Java混淆器做代碼混淆。詳解了部署過(guò)程和方法,對(duì)測(cè)試結(jié)果做了判斷分析,證明該方案起到了保護(hù)作用。

        [1]Eckel B.Java編程思想[M].機(jī)械工業(yè)出版社,2007

        [2]SHorstmann G,Cornell G.Java核心技術(shù) 卷II:高級(jí)特性[M].機(jī)械工業(yè)出版社,2008.

        [3]探矽工作室.深入嵌入式Java虛擬機(jī)[M].中國(guó)鐵道出版社,2003.

        [4]梁棟.Java加密與解密的藝術(shù)[M].機(jī)械工業(yè)出版社,2010

        [5]周志明.深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐[M].機(jī)械工業(yè)出版社,2011

        [6]Herbert Schildt著.Java:The Complete Reference.張良華等譯.電子工業(yè)出版社,2008

        [7]Jason Brittain著.Tomcat權(quán)威指南.O’Reilly Taiwan譯.中國(guó)電力出版社,2004

        [8]Alex Kalinovsky.透視Java-反編譯、修補(bǔ)和逆向工程技術(shù)[M].清華大學(xué)出版社,2005

        [9]Joshua Bloch.《Effective Java中文版》第二版 [M].機(jī)械工業(yè)出版社,2009

        Software Protection;Class Files;Custom ClassLoader;Code Obfuscation

        Research and Implement of Java Software Protection Mechanism

        YIN Yan-yang,Ren Hong-min
        (College of Information Engineering,Shanghai Maritime University,Shanghai 201306)

        Software protection is a troubled developer of software industry,particularly the rapid development of the Internet in today's era of intellectual property rights and stressed,should arouse enough attention to the industry.Java language with its"compile once,run anywhere" and many other advantages list of programming languages occupy the first position.However,the natural features make it very easy to decompile the source code through various decompile software,resulting Java software security is facing great danger.Therefore,proposes ways Java software serial number authorization for serial numbers and Java class files are encrypted,in a custom compiled loaded class decoding,and code obfuscation to do with confusion.The results show no protective effect of Java software while achieving the exception.

        1007-1423(2016)19-0027-05

        10.3969/j.issn.1007-1423.2016.19.008

        尹艷陽(yáng)(1990-),男,吉林梅河口人,碩士,研究方向?yàn)檐浖_(kāi)發(fā)方法與軟件管理

        任洪敏 (1969-),男,上海人,博士,副教授,研究方向?yàn)檐浖w系結(jié)構(gòu)、構(gòu)件技術(shù)、軟件復(fù)用、過(guò)程工程、軟件項(xiàng)目管理

        2016-05-04

        2016-06-30

        猜你喜歡
        序列號(hào)源代碼解密
        解密“熱脹冷縮”
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        基于TXL的源代碼插樁技術(shù)研究
        解密“一包三改”
        炫詞解密
        recALL
        軟件源代碼非公知性司法鑒定方法探析
        揭秘龍湖產(chǎn)品“源代碼”
        解密“大調(diào)解”
        PP助手教你辨別翻新iPhone5小白不再中招
        国内精品视频在线播放不卡 | 免费毛片视频网站| 亚洲综合色婷婷七月丁香| 加勒比一区二区三区av| 久久一区二区国产精品| 色天使久久综合网天天| 伊人久久大香线蕉综合影院首页| 亚洲а∨精品天堂在线| 无码a∨高潮抽搐流白浆| 婷婷丁香五月亚洲| 玩弄放荡人妻一区二区三区| 久久久精品国产三级精品| 日本不卡在线视频二区三区| 日本大肚子孕妇交xxx| 国产精品无码av一区二区三区| 欧美疯狂性xxxxxbbbbb| 午夜tv视频免费国产区4| 2021最新久久久视精品爱| 亚洲国产综合精品一区最新| 少妇免费av一区二区三区久久| 国产成人无码精品久久久免费| 国自产拍偷拍精品啪啪一区二区| 日本真人做人试看60分钟| 精品无码一区二区三区亚洲桃色| 双腿张开被9个黑人调教影片| 制服丝袜视频国产一区| 丰满少妇高潮在线观看| 91亚洲免费在线观看视频| 国产亚洲精品一区二区无| 人妻熟女一区二区三区app下载| 午夜精品久久久久成人| 99热这里只有精品69| 午夜视频福利一区二区三区| 久久精见国产亚洲av高清热| 久青草影院在线观看国产| 天堂无码人妻精品av一区| 暖暖免费 高清 日本社区在线观看| 99久久99久久久精品久久| 亚洲一区二区三区综合网| 天堂蜜桃视频在线观看| 日韩精品极品免费在线视频|