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
主站蜘蛛池模板: 亚洲人成网站色7777| 亚洲成人一区二区| 久久精品亚洲中文字幕乱码| 欧美人与性动交a欧美精品| 波多野结衣亚洲一区| 欧美一级在线看| 九九九国产| 99视频在线看| 99国产精品国产高清一区二区| av一区二区三区在线观看| 经典三级久久| 国产精品亚洲一区二区三区z| 色综合中文字幕| 日本人真淫视频一区二区三区| 国产伦片中文免费观看| 国产国模一区二区三区四区| 国产美女精品人人做人人爽| A级毛片无码久久精品免费| 国产91视频免费| 亚洲成人一区在线| 天天躁夜夜躁狠狠躁图片| 欧美影院久久| 22sihu国产精品视频影视资讯| 国产白浆视频| 亚洲精品第五页| 素人激情视频福利| 爆乳熟妇一区二区三区| 亚洲天堂免费| 国产地址二永久伊甸园| 97在线视频免费观看| 欧美日韩国产在线人成app| 国产精品刺激对白在线| 免费毛片视频| 国产性猛交XXXX免费看| 在线播放真实国产乱子伦| 伊人久久婷婷| 青青操国产视频| 一级毛片免费不卡在线| 在线观看免费AV网| 欧美激情网址| 婷婷亚洲视频| 日本高清视频在线www色| 99er这里只有精品| 欧美翘臀一区二区三区| 国产伦精品一区二区三区视频优播 | 国产精品无码AV中文| 国产精品嫩草影院av| 一本大道视频精品人妻| 人妻中文久热无码丝袜| 青青草a国产免费观看| 欧美福利在线| 亚洲三级色| 激情视频综合网| 人妻丰满熟妇av五码区| 91在线播放免费不卡无毒| 一本综合久久| 国产激爽大片高清在线观看| 国产国语一级毛片在线视频| 成人毛片免费在线观看| 久久成人国产精品免费软件| 高清无码一本到东京热| 亚洲最大福利网站| 日a本亚洲中文在线观看| 在线观看国产小视频| 熟女成人国产精品视频| 国产麻豆精品在线观看| 福利在线一区| 无码国产伊人| 久久久四虎成人永久免费网站| 在线免费亚洲无码视频| 亚洲视频一区| 一本大道在线一本久道| 色偷偷一区二区三区| 性69交片免费看| 特黄日韩免费一区二区三区| 成人自拍视频在线观看| 久久黄色一级片| 在线观看热码亚洲av每日更新| 国产xx在线观看| 亚洲人妖在线| 老司机aⅴ在线精品导航| 无码啪啪精品天堂浪潮av |