999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java防反編譯技術研究

2016-12-31 07:20:12
移動信息 2016年10期
關鍵詞:用戶

焦 涌 賴 娜

?

Java防反編譯技術研究

焦 涌 賴 娜

中國電子科技集團第28研究所,江蘇 南京 210000

隨著互聯網技術的興起,Java編程語言發揮著越來越重要的作用,越來越多的互聯網應用使用Java編程語言編寫而成。但是,由于Java語言的開放性和平臺無關特性,Java代碼不是直接編譯成二進制可執行代碼,而是編譯成class文件。class文件能夠被輕易的反編譯源代碼,這樣用Java編寫成的程序就很容易被破解,泄漏應用邏輯或者被非法使用。首先從最一般的反編譯技術談起,分析了目前市面上流行的反編譯技術,最后提出了一種新的反編譯技術,能夠有效防止Java程序被反編譯。

Java防反編譯技術;代碼混淆;class文件加密

由于Java編平臺的開放性,Java應用程序是由class文件組成。class文件并非是二進制機器碼,而是將源碼進行符號化和標記化,這種class文件很容易進行反編譯還原出源碼。這就帶來了非常嚴重的問題,只要非法用戶愿意,他就能夠輕松的獲取軟件源碼,從而獲得一些商業信息。因此,防止反編譯就成為了一個非常重要的內容。

1 防反編譯起源

Java程序自誕生起的一個目標就是跨平臺,為了實現這個目標,Java程序選擇將源碼編譯成平臺無關的class文件,編譯的過程不是直接產生機器碼,而是將源碼符號化和標記化,這就為反編譯創造了條件。現在市面上有很多流行的反編譯軟件,能夠輕松的將class文件反編譯成源碼。一旦獲得了源碼就等于是獲得了軟件的所有信息,這對于軟件的開發者非常的不利。畢竟很多軟件都是收費的,擁有版權信息,甚至于很多軟件還包含了商業公司的重要機密,一旦軟件被反編譯,這就意味著軟件不再擁有版權,因為竊取者能夠通過修改源碼輕松的破解版權保護,甚至通過閱讀源碼輕松的獲取商業機密。因此,Java軟件的防反編譯就成為了一項非常重要的內容,是很多J2EE項目的基本組成部分。為了防止反編譯,目前市面上主流的技術有代碼混淆、class文件加密、JNI本地代碼和class文件隔離[1]。

2 代碼混淆

代碼混淆是一種最基本的防反編譯方式。前面說過,由于Java的編譯過程就是將源碼簡單的符號化和標記化。因此代碼混淆主要是將class文件中的符號進行修改,將其復雜化,這樣就加大了class文件反編譯的難度,同時,反編譯后的源碼也難以閱讀。由于這種方式并沒有對class文件進行加密,因此源碼仍然可以獲得,只不過是增加了閱讀的難度而已,對于耐心的程序員這都不是問題。同時,由于對class文件進行了混淆,有可能會造成class文件無法被Java虛擬機正常執行。現在市面上有很多代碼混淆軟件,有免費的也有收費的。代碼混淆只是初級的防反編譯技術,僅僅做了最低程度的保護。如果對Java軟件有著較高的安全要求,代碼混淆技術無法勝任[2]。

3 class文件加密

既然明文形式形式的class文件很容易被反編譯,如果將class文件進行加密,class文件以密文形式交給用戶,這樣非法用戶就無法通過反編譯class文件來竊取軟件源碼。這樣做有一個問題就是所有的class文件都必須要交給Java虛擬機去執行,而Java虛擬機是無法識別加密的class文件的,因此在交給虛擬機執行以前,class文件必須解密。Java虛擬機通過classloader來加載class文件,因此,為了解決這個問題,通常要提供自己的classloader類,在將類最終交給Java執行之前,會將類解密。這樣,class文件只會在內存中被解密,不會以明文形式存在于用戶的系統中,從而保證了class文件不會被反編譯。這種方式最大的問題就是用戶自己實現的classloader不可能被加密,因為它是首先被Java虛擬機加載的。所以,如果用戶將最初的classloader進行反編譯,獲得源碼,就能夠獲得將其他類解密的方式,從而將其他的class文件解密,然后反編譯,最終獲得源碼。因此,為了防止非法用戶反編譯最初的classloader文件,通常的做法是將最初的classloader文件盡可能的隱藏起來,防止用戶找到。這種方式治標不治本,如果非法用戶有足夠的耐心,他還是能夠找到那個未加密的class文件,從而竊取整個軟件的源代碼。

4 JNI本地代碼

Java通過JNI方式來實現和C/C++代碼的相互調用,而C/C++編譯成的可執行代碼是無法反編譯的。這就又提供了一種方式,就是將核心重要的代碼用C/C++寫成,然后用Java程序調用它。這樣做確實可以防止反編譯,但是由于沒有使用Java語言,就喪失了很多Java語言的優勢,并且這樣做其實本質上是用C/C++語言而不是Java語言,這里不多做研究。

5 class文件隔離

class文件存儲在用戶系統上很容易被用戶反編譯,那么如果不將class文件存儲在用戶系統上,用戶也就無法反編譯了。為了做到這一點,需要客戶端-服務端雙層架構。所有的應用程序邏輯都存放到服務端,服務端提供訪問接口,客戶端通過接口訪問服務端提供的服務。這種方式由于沒有class文件存放在客戶端,因此用戶也就無法通過反編譯class文件來獲取應用邏輯。但是這種方式必須要求雙層架構,因此適用場景有限。很多時候用戶都只需要一個單獨的應用程序運行在本地,沒有網絡訪問,對于這種情形,就無法實現class文件的隔離。

6 JVMTI加密

上面羅列的幾種防止反編譯的方法都不能夠有效的防止反編譯,不是不徹底就是使用場景有限。下面本文將討論一種新的防止反編譯的方法。

JVMTI是JDK提供的一套用于開發JVM監控, 問題定位與性能調優工具的通用編程接口(API)。通過JVMTI,我們可以開發各式各樣的Java虛擬機應用,這種應用的表現形式是一個以C/C++語言編寫的動態共享庫。Java虛擬機啟動或運行時,動態加載一個外部基于JVM TI編寫的動態模塊到Java進程內,這個動態模塊就是基于JVMTI編寫的JAVA虛擬機應用,然后觸發JVM原生線程Attach Listener來執行這個動態模塊的回調函數。在回調函數體內,你可以獲取各種各樣的VM級信息,注冊感興趣的VM事件,甚至控制VM的行為。

JVMTI提供的接口中包含了一個加載class之前調用的回調接口,內容如下:

typedef void (JNICALL *jvmtiEventClassFileLoadHook)

(jvmtiEnv *jvmti_env,

JNIEnv* jni_env,

jclass class_being_redefined,

jobject loader,

const char* name,

jobject protection_domain,

jint class_data_len,

const unsigned char* class_data,

jint* new_class_data_len,

unsigned char** new_class_data);

在Java虛擬機裝載一個類之前會調用該接口,接口參數中包含了加載到Java虛擬機的原始的class文件數據,以及接口調用完畢之后新的class文件數據。當接口調用完后Java虛擬機會加載新的class數據并且運行。這就為防止反編譯提供了新的思路。如果我們將class文件加密后交付給用戶,然后實現一個解密動態模塊,該動態模塊實現了對class文件的解密。這樣,當Java虛擬機加載加密的class文件之前會調用解密動態模塊,解密模塊將class文件數據在內存中進行解密,然后Java虛擬機會加載揭秘過后的原始的class文件數據并且運行。通過這種方式,用戶系統中沒有任何未加密的class文件,并且所有的應用邏輯仍然是以Java寫成,應用開發者只需要編寫一個通用的解密動態模塊,然后將應用程序包含的所有class文件加密,將加密的應用程序和解密動態模塊一起交付給用戶,解密動態模塊由C/C++編寫而成,是二進制機器碼,無法反編譯,因而class文件也無法反編譯,從而實現了防反編譯。

[1]李林蔚.Java字節碼文件保護分析與研究[J].內江職業技術學院學報,2014(3):51-52.

[2]林漢玲,方穎玨,王曉峰.密碼技術在Java類文件保護技術中的新應用[J].現代電子技術,2013,36(3):102-103.

Research on Anti - Compiler Technology of JAVA

Jiao Yong Lai Na

Twenty-eighth Research Institute of China Electronic Science and technology group, Nanjing 210000, Jiangsu, China

with the rise of Internet technology, JAVA programming language is playing a more and more important role, more and more Internet applications using JAVA programming language. However, due to the open nature of the JAVA language and platform independent characteristics, JAVA code is not directly compiled into binary executable code, but compiled into class files. Class files can be easily compiled source code, so that the use of JAVA into the program is very easy to be cracked, the leak of the application logic or illegal use. This paper first from the most general anti compiler technology, analysis of the current popular anti compiler technology in the market, and finally put forward a new anti compilation technology, can effectively prevent the JAVA program is anti compiler.

JAVA anti - Anti - compiler technology; research

TP312.2

A

1009-6434(2016)10-0012-02

猜你喜歡
用戶
雅閣國內用戶交付突破300萬輛
車主之友(2022年4期)2022-08-27 00:58:26
您撥打的用戶已戀愛,請稍后再哭
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年5期)2016-11-28 09:55:15
兩新黨建新媒體用戶與全網新媒體用戶之間有何差別
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
挖掘用戶需求尖端科技應用
Camera360:拍出5億用戶
創業家(2015年10期)2015-02-27 07:55:08
100萬用戶
創業家(2015年10期)2015-02-27 07:54:39
主站蜘蛛池模板: 911亚洲精品| 国产区在线观看视频| 中文字幕永久在线观看| 欧美中文字幕一区| 国产一区二区三区免费观看| 国产91精选在线观看| 欧美在线视频a| 国产麻豆精品久久一二三| 欧美啪啪精品| 天堂成人在线| 秋霞国产在线| 亚洲人成在线精品| 国产精品国产三级国产专业不| 四虎永久在线视频| 国产成人一级| 日本不卡在线| 视频国产精品丝袜第一页| 成人综合网址| 国产美女无遮挡免费视频| 一级毛片高清| 麻豆国产原创视频在线播放| 国产无码精品在线| 欧美区国产区| 热九九精品| 亚洲v日韩v欧美在线观看| 亚洲日韩AV无码一区二区三区人| 免费国产福利| 国产91麻豆视频| 秋霞一区二区三区| 久久精品中文无码资源站| 国产精品久久自在自线观看| 国产剧情伊人| 亚洲国产一区在线观看| 天堂网国产| 国产福利小视频高清在线观看| 波多野结衣一区二区三区88| 99久久精品国产综合婷婷| 天天躁夜夜躁狠狠躁图片| 久久国语对白| 国内精品自在欧美一区| 亚洲va精品中文字幕| 亚洲成人播放| 青青草原国产一区二区| P尤物久久99国产综合精品| 亚洲精品天堂自在久久77| 日韩小视频网站hq| 亚洲系列中文字幕一区二区| 激情无码字幕综合| 99精品国产自在现线观看| 亚洲欧美色中文字幕| 欧美日韩国产在线人| 午夜老司机永久免费看片 | 亚洲无码在线午夜电影| 久久影院一区二区h| 国产精品微拍| 亚洲最大福利网站| 国产成人AV大片大片在线播放 | 欧美在线天堂| 在线观看国产小视频| 中文成人在线视频| 一级毛片在线播放免费观看| 国产精品免费p区| 最新国产在线| 91久久偷偷做嫩草影院电| 2019国产在线| 伊人久久大香线蕉影院| av尤物免费在线观看| 色综合久久无码网| 国产凹凸一区在线观看视频| 亚洲精选无码久久久| 国产va免费精品观看| 国产亚洲欧美日韩在线观看一区二区| 一区二区三区四区精品视频 | 天天色天天综合网| 国产精品理论片| 精品午夜国产福利观看| 亚洲综合二区| 国产91色在线| 欧美性天天| 亚洲自拍另类| 色婷婷在线播放| 素人激情视频福利|