• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            chenglong7997

            Java程序易遭受逆向工程攻擊的原因

             Java應(yīng)用程序雖然能夠“編寫一次,隨處運行”(Write Once, Run Anywhere)是一個巨大的優(yōu)勢,但這種環(huán)境的架構(gòu)方式使其遠(yuǎn)比本機應(yīng)用程序更容易被黑客進(jìn)行逆向工程。這意味著開發(fā)人員面臨著失去知識產(chǎn)權(quán)的非常真實的危險。基于應(yīng)用程序的虛擬機比本機應(yīng)用程序更容易逆向工程的原因有很多:
            JVM是開源的
              Sun已經(jīng)免費提供JVM的源代碼。這使得黑客只需查看代碼即可弄清虛擬機的工作方式。
            Java .class文件格式是可公開獲取的
            如前所述,Java源代碼被編譯成字節(jié)碼,而字節(jié)碼存儲在Java .class文件中。Java .class文件格式的規(guī)范是可公開獲取的,因此有技術(shù)背景的任何人都能容易地編寫可以處理、修改或轉(zhuǎn)換.class文件的工具。
            JVM是軟件,而不是硬件
               與需要理解特定處理器的專家使用的標(biāo)準(zhǔn)編程語言不同,JVM是一個應(yīng)用程序,它如同微處理器一樣運作,并使用操作系統(tǒng)和計算機硬件提供的內(nèi)置功能。由于黑客不必深入到硬件級別,因此更容易取得對JVM的完全控制。
               因此,例如在使用標(biāo)準(zhǔn)本機系統(tǒng)開發(fā)語言進(jìn)行調(diào)試時,暫停處理器極為困難,需要具備處理器、調(diào)試功能及可用環(huán)調(diào)試器的專家知識。但是,由于JVM 運行環(huán)境的源代碼是可公開獲取的,因此開發(fā)人員可以輕松地建立自己的虛擬機來完全控制虛擬處理器的各個方面。這樣可以容易地分析運行環(huán)境中運行的每個應(yīng)用程序。
            Java的指令比本機代碼少
               然而,JVM代碼易于進(jìn)行反向工程的另一個原因是它具有比本地應(yīng)用程序更少的指令。這是出于性能考慮。JVM的使用在應(yīng)用程序和本機處理器之間增加了一個軟件層,這會對性能產(chǎn)生負(fù)面影響。雖然現(xiàn)代處理器不斷提高的執(zhí)行速度最終將緩解這一問題,但這一問題仍然很明顯。虛擬機開發(fā)人員提高執(zhí)行速度的一種方法是使用比本機處理器匯編程序更小的字節(jié)碼指令集。本機應(yīng)用程序可能包含多達(dá)400條指令,而Java應(yīng)用程序通常使用不超過200條的指令。更少的指令意味著黑客可以更快地分析代碼以進(jìn)行逆向工程。這些特性使得虛擬機遠(yuǎn)比其它類型的應(yīng)用程序更容易遭受逆向工程攻擊。
            第三方反匯編程序增加了漏洞
             不僅是JVM本身容易遭受逆向工程攻擊,商業(yè)和免費的Java字節(jié)碼反匯編程序也越來越多,從而進(jìn)一步簡化了代碼逆向工程的過程。IDA和Eclipse字節(jié)碼插件是眾多Java字節(jié)碼反匯編程序中的兩種。作為商業(yè)產(chǎn)品,IDA是一種普遍的反匯編程序,可用于許多不同的處理器,包括80x86和MIPS。Eclipse字節(jié)碼插件是免費軟件。它能夠反編譯Java .class文件的字節(jié)碼并以適當(dāng)?shù)捻樞蝻@示所有操作碼指令。 盡管這些產(chǎn)品不大可能從字節(jié)碼完美地恢復(fù)原始代碼,但它們恢復(fù)的源代碼將等同于原始代碼,并且比字節(jié)碼更具可讀性。一旦恢復(fù)了源代碼,攻擊者可以容易地刪除部分代碼并將其非法地用于競爭對手的應(yīng)用程序中,或在.class文件中定位打補丁。
            圖1提供了黑客可能如何在.class文件中打補丁的一個示例。屏幕的上半部分顯示了一小段Java源代碼。屏幕的下半部分顯示了字節(jié)碼反匯編的輸出,也就是一個字節(jié)碼指令列表。標(biāo)記為紅色的區(qū)域是源代碼中IF結(jié)構(gòu)的對應(yīng)指令。字節(jié)碼指令“LCMP”的十六進(jìn)制表示為0x94。該工具還指出了操作碼在.class文件中的位置。有了這些信息,黑客可以使用簡單的十六進(jìn)制編輯器來改變該IF分支,而這只需不到一分鐘的時間。假設(shè)該IF條件用于許可證檢查,黑客可倒置該條件,指示即使在許可證被驗證為無效(如已過期)的情況下仍返回“True”,從而突破許可證檢查。在這種情況下,黑客使用一個字節(jié)的補丁即可完成所有工作。雖然大多數(shù)應(yīng)用程序都比這個示例更加復(fù)雜,但即使在復(fù)雜的應(yīng)用程序中,字節(jié)碼也非常簡單并且容易理解。
             Java應(yīng)用程序雖然能夠“編寫一次,隨處運行”(Write Once, Run Anywhere)是一個巨大的優(yōu)勢,但這種環(huán)境的架構(gòu)方式使其遠(yuǎn)比本機應(yīng)用程序更容易被黑客進(jìn)行逆向工程。這意味著開發(fā)人員面臨著失去知識產(chǎn)權(quán)的非常真實的危險。基于應(yīng)用程序的虛擬機比本機應(yīng)用程序更容易逆向工程的原因有很多:

            圖1 - 用于字節(jié)碼反匯編的Eclipse字節(jié)碼插件

            posted on 2012-04-11 13:43 Snape 閱讀(334) 評論(0)  編輯 收藏 引用 所屬分類: Java

            導(dǎo)航

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            my

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国产精品青草久久久久福利99 | 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久久久亚洲AV无码专区首JN| 国产精品内射久久久久欢欢| 99热成人精品免费久久| 久久婷婷五月综合97色直播| 久久久无码精品亚洲日韩蜜臀浪潮| 2020久久精品亚洲热综合一本| 久久久久久国产精品无码超碰 | 人妻无码精品久久亚瑟影视| 久久天堂AV综合合色蜜桃网| 很黄很污的网站久久mimi色| 亚洲精品无码久久千人斩| 久久精品国产亚洲一区二区| 久久精品亚洲男人的天堂| 亚洲va久久久噜噜噜久久男同| 岛国搬运www久久| 亚洲AV无码成人网站久久精品大| 国产精品欧美亚洲韩国日本久久 | 国产69精品久久久久777| 欧美激情精品久久久久久| 狠狠88综合久久久久综合网| 欧美色综合久久久久久| 日本精品久久久久中文字幕8| 97久久国产综合精品女不卡| 久久久久免费视频| 久久99精品久久久久久水蜜桃 | 久久精品国产福利国产琪琪| 精品免费久久久久久久| 久久久无码精品亚洲日韩蜜臀浪潮| 开心久久婷婷综合中文字幕| segui久久国产精品| 久久国产乱子伦精品免费强| 久久精品水蜜桃av综合天堂 | 国产三级精品久久| 9191精品国产免费久久| 久久国产精品国产自线拍免费 | 中文字幕久久精品| 国产成人精品综合久久久| 人人妻久久人人澡人人爽人人精品 | 国产精品青草久久久久婷婷|