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
主站蜘蛛池模板: 四虎影视无码永久免费观看| 四虎永久在线| 欧美成人精品一级在线观看| 国产人在线成免费视频| 亚洲综合经典在线一区二区| 国产激情无码一区二区APP | 亚洲精品爱草草视频在线| 黄色网站在线观看无码| 亚洲色偷偷偷鲁综合| 成人自拍视频在线观看| 美女被躁出白浆视频播放| 国产欧美成人不卡视频| 国产精品亚洲欧美日韩久久| 久久综合成人| 天堂成人在线| 国产在线小视频| 99久久精品免费看国产电影| 国产一区二区三区在线精品专区 | 国产高清色视频免费看的网址| 青草娱乐极品免费视频| 日韩精品亚洲人旧成在线| V一区无码内射国产| 在线观看国产黄色| 欧美在线视频不卡第一页| 亚洲看片网| 国产成人精品亚洲日本对白优播| 人妻丰满熟妇啪啪| 麻豆AV网站免费进入| 青青草一区| 久久人搡人人玩人妻精品| 日本一区二区三区精品国产| 五月天久久综合国产一区二区| 亚洲国产日韩欧美在线| 69视频国产| 天堂久久久久久中文字幕| 亚洲天堂色色人体| 国产理论最新国产精品视频| 日韩在线永久免费播放| 114级毛片免费观看| 国产制服丝袜91在线| 亚洲色大成网站www国产| 亚洲精品老司机| 中文字幕亚洲精品2页| 性色在线视频精品| 欲色天天综合网| 日本a级免费| 1769国产精品视频免费观看| 国产黄色视频综合| 国产精品亚欧美一区二区三区| 狠狠色成人综合首页| 国产亚洲高清视频| 91探花国产综合在线精品| www中文字幕在线观看| 伊人久久综在合线亚洲91| 免费在线a视频| 91 九色视频丝袜| 亚洲综合香蕉| 在线观看亚洲精品福利片| 波多野结衣一区二区三视频| 中文字幕无码av专区久久| 久久91精品牛牛| 精品国产Av电影无码久久久| 亚洲av无码牛牛影视在线二区| 亚洲看片网| 国产欧美日韩在线一区| 免费观看男人免费桶女人视频| 国模私拍一区二区三区| 国产成人精品男人的天堂| 全裸无码专区| 在线观看国产小视频| 人人爱天天做夜夜爽| 青青国产视频| 亚洲水蜜桃久久综合网站| 麻豆国产精品一二三在线观看| 亚洲综合欧美在线一区在线播放| 女人18毛片久久| 在线视频精品一区| 成人免费网站在线观看| 夜色爽爽影院18禁妓女影院| 在线欧美国产| 欧美黑人欧美精品刺激| 小说 亚洲 无码 精品|