1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何防止你的 jar 被反編譯?

        共 4748字,需瀏覽 10分鐘

         ·

        2021-12-20 06:50

        者 | dartagnan

        來源 | https://cnblogs.com/dartagnan/archive/2011/03/24/2003434.html

        Java作為解釋型的語言,其高度抽象的特性意味其很容易被反編譯,容易被反編譯,自然有防止反編譯措施存在。今天就拜讀了一篇相關(guān)的文章,受益匪淺,知彼知己嘛?。≈詴ava的反編譯感興趣,那是因?yàn)樽约涸趯W(xué)習(xí)的過程中,常常需要借鑒一下別人的成果(你懂的...)?;蛟S反編譯別人的代碼不怎么道德,這個嘛......

        廢話不多說,正文如下:

        常用的保護(hù)技術(shù)

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

        1. 隔離Java程序

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

        圖1隔離Java程序示意圖   

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

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

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

        圖2 對Class文件進(jìn)行加密示意圖

        3. 轉(zhuǎn)換成本地代碼

        將程序轉(zhuǎn)換成本地代碼也是一種防止反編譯的有效方法。因?yàn)楸镜卮a往往難以被反編譯。開發(fā)人員可以選擇將整個應(yīng)用程序轉(zhuǎn)換成本地代碼,也可以選擇關(guān)鍵模塊轉(zhuǎn)換。如果僅僅轉(zhuǎn)換關(guān)鍵部分模塊,Java程序在使用這些模塊時,需要使用JNI技術(shù)進(jìn)行調(diào)用。

        當(dāng)然,在使用這種技術(shù)保護(hù)Java程序的同時,也犧牲了Java的跨平臺特性。對于不同的平臺,我們需要維護(hù)不同版本的本地代碼,這將加重軟件支持和維護(hù)的工作。不過對于一些關(guān)鍵的模塊,有時這種方案往往是必要的。

        為了保證這些本地代碼不被修改和替代,通常需要對這些代碼進(jìn)行數(shù)字簽名。在使用這些本地代碼之前,往往需要對這些本地代碼進(jìn)行認(rèn)證,確保這些代碼沒有被黑客更改。如果簽名檢查通過,則調(diào)用相關(guān)JNI方法。這種保護(hù)方式示意圖見圖3。

        圖3 轉(zhuǎn)換成本地代碼示意圖

        4. 代碼混淆

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

        圖4 代碼混淆示意圖

        如果您正在學(xué)習(xí)Spring Boot,那么推薦一個連載多年還在繼續(xù)更新的免費(fèi)教程:http://blog.didispace.com/spring-boot-learning-2x/

        幾種技術(shù)的總結(jié)

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

        混淆技術(shù)介紹

        表1 不同保護(hù)技術(shù)比較表

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

        符號混淆

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

        數(shù)據(jù)混淆

        圖5 改變數(shù)據(jù)訪問

        數(shù)據(jù)混淆是對程序使用的數(shù)據(jù)進(jìn)行混淆。混淆的方法也有多種,主要可以分為改變數(shù)據(jù)存儲及編碼(Store and Encode Transform)、改變數(shù)據(jù)訪問(Access Transform)。

        改變數(shù)據(jù)存儲和編碼可以打亂程序使用的數(shù)據(jù)存儲方式。例如將一個有10個成員的數(shù)組,拆開為10個變量,并且打亂這些變量的名字;將一個兩維數(shù)組轉(zhuǎn)化為一個一維數(shù)組等。對于一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu),我們將打亂它的數(shù)據(jù)結(jié)構(gòu),例如用多個類代替一個復(fù)雜的類等。

        另外一種方式是改變數(shù)據(jù)訪問。例如訪問數(shù)組的下標(biāo)時,我們可以進(jìn)行一定的計(jì)算,圖5就是一個例子。

        在實(shí)踐混淆處理中,這兩種方法通常是綜合使用的,在打亂數(shù)據(jù)存儲的同時,也打亂數(shù)據(jù)訪問的方式。經(jīng)過對數(shù)據(jù)混淆,程序的語義變得復(fù)雜了,這樣增大了反編譯的難度。

        控制混淆   

        控制混淆就是對程序的控制流進(jìn)行混淆,使得程序的控制流更加難以反編譯,通常控制流的改變需要增加一些額外的計(jì)算和控制流,因此在性能上會給程序帶來一定的負(fù)面影響。有時,需要在程序的性能和混淆程度之間進(jìn)行權(quán)衡??刂苹煜募夹g(shù)最為復(fù)雜,技巧也最多。這些技術(shù)可以分為如下幾類:

        增加混淆控制通過增加額外的、復(fù)雜的控制流,可以將程序原來的語義隱藏起來。例如,對于按次序執(zhí)行的兩個語句A、B,我們可以增加一個控制條件,以決定B的執(zhí)行。通過這種方式加大反匯編的難度。但是所有的干擾控制都不應(yīng)該影響B(tài)的執(zhí)行。圖6就給出三種方式,為這個例子增加混淆控制。

        圖6 增加混淆控制的三種方式

        控制流重組重組控制流也是重要的混淆方法。例如,程序調(diào)用一個方法,在混淆后,可以將該方法代碼嵌入到調(diào)用程序當(dāng)中。反過來,程序中的一段代碼也可以轉(zhuǎn)變?yōu)橐粋€函數(shù)調(diào)用。另外,對于一個循環(huán)的控制流,為可以拆分多個循環(huán)的控制流,或者將循環(huán)轉(zhuǎn)化成一個遞歸過程。這種方法最為復(fù)雜,研究的人員也非常多。

        預(yù)防性混淆

        這種混淆通常是針對一些專用的反編譯器而設(shè)計(jì)的,一般來說,這些技術(shù)利用反編譯器的弱點(diǎn)或者Bug來設(shè)計(jì)混淆方案。例如,有些反編譯器對于 Return后面的指令不進(jìn)行反編譯,而有些混淆方案恰恰將代碼放在Return語句后面。這種混淆的有效性對于不同反編譯器的作用也不太相同的。一個好的混淆工具,通常會綜合使用這些混淆技術(shù)。

        案例分析

        在實(shí)踐當(dāng)中,保護(hù)一個大型Java程序經(jīng)常需要綜合使用這些方法,而不是單一使用某一種方法。這是因?yàn)槊糠N方法都有其弱點(diǎn)和應(yīng)用環(huán)境。綜合使用這些方法使得Java程序的保護(hù)更加有效。另外,我們經(jīng)常還需要使用其它的相關(guān)安全技術(shù),例如安全認(rèn)證、數(shù)字簽名、PKI等。

        本文給出的例子是一個Java應(yīng)用程序,它是一個SCJP(Sun Certificate Java Programmer)的模擬考試軟件。該應(yīng)用程序帶有大量的模擬題目,所有的題目都被加密后存儲在文件中。由于它所帶的題庫是該軟件的核心部分,所以關(guān)于題庫的存取和訪問就成為非常核心的類。一旦這些相關(guān)的類被反編譯,則所有的題庫將被破解?,F(xiàn)在,我們來考慮如何保護(hù)這些題庫及相關(guān)的類。

        在這個例子中,我們考慮使用綜合保護(hù)技術(shù),其中包括本地代碼和混淆技術(shù)。因?yàn)樵撥浖饕l(fā)布在Windows上,因此轉(zhuǎn)換成本地代碼后,僅僅需要維護(hù)一個版本的本地代碼。另外,混淆對Java程序也是非常有效的,適用于這種獨(dú)立發(fā)布的應(yīng)用系統(tǒng)。

        在具體的方案中,我們將程序分為兩個部分,一個是由本地代碼編寫的題庫訪問的模塊,另外一個是由Java開發(fā)的其它模塊。這樣可以更高程度地保護(hù)題目管理模塊不被反編譯。對于Java開發(fā)的模塊,我們?nèi)匀灰褂没煜夹g(shù)。該方案的示意圖參見圖7。

        圖7 SCJP保護(hù)技術(shù)方案圖

        如果您正在學(xué)習(xí)Spring Cloud,推薦一個經(jīng)典教程(含Spring Cloud Alibaba):https://blog.didispace.com/spring-cloud-learning/

        對于題目管理模塊,由于程序主要在Windows下使用,所以使用C++開發(fā)題庫訪問模塊,并且提供了一定的訪問接口。為了保護(hù)題庫訪問的接口,我們還增加了一個初始化接口,用于每次使用題庫訪問接口之前的初始化工作。它的接口主要分為兩類:

        1. 初始化接口

        在使用題庫模塊之前,我們必須先調(diào)用初始化接口。在調(diào)用該接口時,客戶端需要提供一個隨機(jī)數(shù)作為參數(shù)。題庫管理模塊和客戶端通過這個隨機(jī)數(shù),按一定的算法同時生成相同的SessionKey,用于加密以后輸入和輸出的所有數(shù)據(jù)。通過這種方式,只有授權(quán)(有效)的客戶端才能夠連接正確的連接,生成正確的 SessionKey,用于訪問題庫信息。非法的客戶很難生成正確的SessionKey,因此無法獲得題庫的信息。如果需要建立更高的保密級別,也可以采用雙向認(rèn)證技術(shù)。

        2. 數(shù)據(jù)訪問接口

        認(rèn)證完成之后,客戶端就可以正常的訪問題庫數(shù)據(jù)。但是,輸入和輸出的數(shù)據(jù)都是由SessionKey所加密的數(shù)據(jù)。因此,只有正確的題庫管理模塊才能夠使用題庫管理模塊。圖8時序圖表示了題庫管理模塊和其它部分的交互過程。


        怎么接私活?這個渠道你100%有用!請收藏!


        ,點(diǎn)在看 
        瀏覽 39
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人做爰100片免费着| 亚洲AV免费在线| 夜夜骑夜夜| 成人AV影院| 国产精品粉嫩福利在线| 亚洲激情五月| 国产做爱视频| 乱伦五月| 日韩无码精品一区二区三区| 国产91视频在线观看| 日本黄色电影在线观看| 无码在线观看免费| 亚洲无码乱码精品| 欧美日韩网| 人妻爽爽| 在线a视频免费观看| 91精品国产综合久久久久久久| 豆花无码视频一区二区| 91丨九色丨熟女老版| 亚洲精品成人av| 国产激情免费视频| 黄色视频白丝| 日韩精品一区二区三区四区| 福利视频网亚洲| 韩国三级HD中文字幕2019年| 成人精东影业JDAV3密友| 一级操逼黄色视频| 日韩人妻无码一区二区三区七区| 六月婷婷五月丁香| 欲色av| 欧美视频一区二区三区| 日韩AV在线免费观看| 国产无码免费| 97精品人妻| 国产又爽又黄免费视频网站| 中文字幕在线看| 91性爱视频| 91成人情欲影视网| 妓女不卡| 88海外华人免费一区| A一级黄色| 欧美欧美欧美| h在线观看h| 久久A√一区二区| 亚洲色婷婷五月| 天天干天天射天天| 天堂中文8资源在线8| 91大神在线免费观看| 强行征服邻居人妻HD高清日本| 国产wwwww| 精品国产精品三级精品AV网址 | 日本A片免费观看| 国产麻豆精品成人毛片| 风流少妇一区二区三区91| 成人激情视频网| 久久国产综合| 国产精品久久久久久久久久九秃| 免费看黄片的网站| 天美精东蜜桃91| 超碰操逼| 三级片久久久| 国产高清在线视频| 中文字幕无码不卡| 欧美黄色大香蕉| av操逼网| 丁香五月婷婷综合网| 欧美日韩国产三级| 狠狠色av| 青青草原国产视频| 免费毛片在线| 大香蕉尹人在线观看| 亚洲欧美日韩高清| 天天做天天爽| 国产高清无码一区二区| 成人视频在线观看免费| 玖玖色综合| 国产成人aV| 日韩一级无码| 无码av亚洲一区二区毛片公司| 北条麻妃在线观看香蕉| 在线99精品| 91精彩视频| 亚洲精品福利视频导航| 国产午夜精品一区二区三区四区 | 高清无码在线视频| 人妻少妇偷人精品无码免费| 欧美日韩国产a| 黄片视频在线免费播放| 国精品无码A区一区二区| 青青草视频免费| 黄片中文字幕| 一级黄色电影免费观看| 国产乱妇乱子伦视频免费观看让女人 | 操B无码| 黄色在线观看免费| 亚洲福利女神成人福利| 一本色道精品久久一区二区三区| 婷婷开心五月天| 免费AV网站在线| 亚洲欧美在线视频免费| 久艹大香蕉| 亚洲av自拍| 日韩无码www| 色色9999| 亚洲中文在线视频| 综合欧美国产视频二区| 天堂无吗| 日本爱爱片| 国产精品精品精品| 中文在线资源| 丰满人妻一区二区三区不卡二| 美女黄色视频网站| 69av在线播放| 雾水情缘电影港片| 四季AV一区二区凹凸懂色桃花| 亚洲影院第一页| 无码人妻AⅤ一区二区三区| 大鸡巴久久久久久| 日韩无码五月天| 午夜av在线观看| 大地影院在线资源观看| 国产视频一区二区三区四区| 夜色福利网| AV电影在线免费观看| 一个人看的www日本高清视频| 久久久高清无码| 免费91视频| 久久凹凸视频| 超碰人人操| 69av天堂| 欧美色图在线观看视频| 色老板在线观看视频| 加勒比无码在线播放| 亚洲欧美在线观看视频| 黄色网页在线观看| 天天爽夜夜爽精品成人免费| 性爱xxxxx| www.豆花福利视频| 亚洲毛片在线| 高清无码在线观看18| 日韩不卡在线| 中国女人如毛片| 强伦人妻一区二区三区视频| 一区二区三区网站| 久操无码| 黄色片视频网站| 欧美日韩国产不卡视频| 日本天堂网站| 在线视频久| 一区二区水蜜桃| 九九热在线观看| AⅤ中文字幕在线免费观看| 国产午夜福利免费视频在线观看 | 少妇无码一区| 玖玖色资源| 无码在线高清| 人人草人人看| 综合+夜夜| 国产欧美一级片| 日韩中文字幕在线高清| 老司机视频在线视频18| 免费看黄片,在线观看| 五月丁香在线视频| 亚洲一二期视频| 少婦揉BBBB揉BBBB揉| 亚洲午夜精品久久久| 日韩欧美爱爱| 无码三级| 亚洲日韩AV电影| 91人妻人人爽人人澡| 亚洲成人AV在线播放| 中文字幕在线观看视频www| 国产精品超碰| 你懂的在线免费观看| 一道本无码在线视频| 午夜精品18视频国产17c| 亚洲精品字幕| 男女免费av| 韩国人妻无码| 色五月天婷婷| 精品无码国产一区二区三区51安| 国产天堂视频| 岛国AV免费在线| 欧美丰满美乳XXⅩ高潮www| 大鸡吧在线观看| 大香焦草久| 操逼网站在线看| 色噜噜AV| 五月丁香综合网| 欧美成人性色欲影院| 国产熟睡乱子伦午夜视频_第1集| 欧美亚洲综合在线| 嫩草在线观看| 亚洲精品中文字幕在线| 国产精品一区av| 国产成人无码精品久在线观看| 操人妻| 天天干天天日天天操| 91AV在线观看视频| 只有精品| 另类图片亚洲色图| 草久精品| 久久精品女同亚洲女同13| 嫩BBB槡BBBB槡BBBB视频-百度| 蜜桃91视频| 嫩草av在线| 国产精品一区二区免费| 中文字幕无码人妻在线视频| 91亚洲成人| 久久草草热国产精| 成人免费A片在线观看直播96| 免费在线观看黄视频| 18XXX亚洲HD护士JD| 91蝌蚪视频在线| 蜜臀AV网| 91爱爱网| 欧美一在线一综合| 日韩无码福利| 久久精品内射| 欧美九九九| 伊人色色色| 五月天成人小说| 嫩草亚洲小泬久久夂| 青娱在线视频| 激情午夜av| 亚洲成人免费网站| 天天天天毛片| 少妇中文字幕| 无码一区二区视频| 日韩精品一区二区三区免费观看高清 | 中文天堂网| 五月天亚洲激情| 人成无码| 91做爱| 开心激情播播网| 怡春院院成人免费视频| 玩弄人妻少妇500系列视频| 美女网站黄a| 国产熟睡乱子伦午夜视频_第1集| 国产乱人| 亚洲操逼网| 浮力影院av| 91免费看片| 日本三级网站| 黄色片视频日韩| 高清无码在线不卡| 精品一区二区三区四区| 国产av综合网| 日韩无码人妻一区二区| 青娱AV| 免费无码婬片aaaa| 成人三级电影在线观看| 91最新在线播放| 国产又黄又| 亚洲综合视频在线观看| 人人爱人人妻人人操| 操B久久| 亚洲国产精品久久久| 国产人成视频免费观看| 麻豆精品传媒2021md| 伊人大香蕉久久| 亚洲国精产品| 黄色草逼视频| 狠狠撸在线| 亚洲操逼图片| 中文字幕无码日韩| 亚洲操逼视频| 超碰九一| 亚洲欧美视频在线| 日本黄色视频官网| 色哟哟在线观看| 三级网站免费| 天天射天天干天天| 亚洲免费一级| 99热精品在线| 蜜桃视频com.www| 一区二区三区四区免费| 六月天av| 开心老牛熟| 99久久精品国产色欲| 猛男大粗猛爽h男人味| 亚洲第一免费视频| 欧美在线成人网| 天天天天天天天干| 国产午夜成人福利在线| 女人18片毛片60分钟翻译| 午夜蜜桃人妻一区二区| 丁月婷婷五香天日五月天| 亚洲精品一级| 国产在线小电影| 99久久综合国产精品二区| 午夜福利影视| 国产91视频| 在线观看免费一区| 青草视频在线播放| 成年人视频在线观看免费| 91热热| 女人卖婬视频播放| 国产白丝视频| 精久久久|