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

Android應用保護技術綜述

2015-04-29 00:00:00張鵬秦飛舟
學園 2015年35期

【摘 要】Android的大量應用給移動終端用戶帶來了豐富的體驗,但其存在的大量盜版應用卻嚴重損害了開發者的權益。本文在分析Android應用結構的基礎上,總結現有的Android應用保護技術,如代碼混淆技術、動態加載技術、軟件水印技術等。

【關鍵詞】Android 軟件保護 代碼混淆 動態加載 軟件水印

【中圖分類號】TP311 【文獻標識碼】A 【文章編號】1674-4810(2015)35-0097-03

由于Android具有開源和免費的特點,得到了大量移動終端制造商的支持,各種各樣的Android應用層出不窮。在應用數量不斷增長的同時,盜版應用的數量也隨之增加。為了阻止應用被破解或篡改,多種保護Android應用的方法也應運而生,本文主要對現有的Android應用保護技術進行歸納總結。

一 Android應用結構

Android系統的結構如圖1所示,應用程序的執行主要依賴于Android的核心庫(Libraries)和Dalvik虛擬機。

圖1 Android系統結構

由于PC平臺的Java虛擬機不適合移動終端,因此Google公司為Android平臺設計了Dalvik虛擬機。它是Android應用程序的最終運行環境。除了本地庫代碼可以直接在底層運行外,應用程序的其他部分都被編譯為Dalvik字節碼在Dalvik虛擬機上運行。Java程序經過編譯后會生成Android平臺特有的dex(Dalvik Executable)文件,它是一種專為Dalvik虛擬機設計的壓縮文件格式,適合處理器頻率和內存容量有限的移動終端。

為了給用戶提供更好的操作體驗,Android應用除了dex文件外還包括其他一些文件或文件目錄,如用于存儲簽名信息的META-INF目錄,用于存儲資源文件的res目錄,用于存儲本地代碼的lib目錄和二進制資源文件resources.arsc等。這些文件會在Android應用程序發布前,和dex文件一同打包成完整的apk(Android Package)文件。

二 Android應用保護技術

一般來說,攻擊者對Android應用的破解主要經過以下幾個步驟:首先是對應用的反編譯,通過反編譯的代碼分析程序的執行流程,從中找到破解應用的突破口;其次,如果對應用的反編譯效果不理想,攻擊者會轉向對應用的跟蹤調試,嘗試在跟蹤的過程中發現程序的某些關鍵數據或代碼;最后,如果完成了對Android應用的破解,攻擊者會對應用進行重新打包,生成新的apk文件。為了阻止攻擊者對軟件的破解,可以采取以下幾種方法對軟件進行保護。

1.代碼混淆技術

代碼混淆的目的是將程序轉化為語義相同但語句不同的版本。經過混淆的代碼可以明顯加大分析代碼語義的難度,因此非常適合防范針對程序的反編譯攻擊。由于Android應用主要使用Java語言進行開發,可以通過混淆Java源代碼,或混淆編譯后的字節碼來實現阻止攻擊者分析程序語義的目的。目前代碼混淆主要有以下幾種:

第一,詞法混淆和數據混淆。詞法混淆是改變或去除函數名或變量名原有含義的一種混淆方法,而數據混淆是對變量或數據結構進行分割或合并的一種混淆方法。De AR提出一種通過交換程序中的變量名、函數名和類名的詞法混淆方法,這種方法的特點是不僅可以去除程序中的詞法信息,而且可以進行逆向混淆。Chan提出了一種對標識符進行修改和重用的詞法混淆算法。這種方法不是直接對標識符重命名,而是盡可能重用已有的標識符。經過這種方法混淆的程序,其中存在大量名稱相似的標識符,攻擊者很難從中分析出函數或變量原有的含義。Collberg總結了多種數據混淆的方案,如多變量(或數組)的合并、單變量(或數組)的拆解、靜態字符串的動態生成等。這些方法的目的都是去除原始代碼中的有意義信息,增加攻擊者理解代碼的難度。

第二,類混淆和布局混淆。Sosonkin等人提出了類合并和類拆分兩種混淆方法。顧名思義,類合并是將原有類中的變量和函數進行組合后生成新類,而類拆分則是將一個完整的類拆分成多個相互關聯的小類。無論是類合并還是類拆分,都會改變原有類之間的調用或繼承關系,人為地增加代碼分析的難度。

布局混淆主要采用刪除調試、注釋信息、改變數據的分布順序對程序進行混淆。由于在編寫程序時往往會留下大量的注釋信息,而邏輯上相關的數據往往也會被程序員放置在物理上相鄰的位置,這些都會成為攻擊者分析程序的線索。為了清除這些有可能被攻擊者利用的信息,Collberg提出了一些布局混淆的方法,如改變實例變量、方法或數組的順序等。

第三,控制流混淆。程序的控制流信息是一種非常重要的程序結構信息。如果攻擊者重構出程序的控制流信息,不僅可以了解程序的工作流程,而且還可以很容易地對程序的執行過程進行篡改。因此,必須使用某種方法對于程序的控制流信息進行修改,使其變得難以理解,從而增加攻擊者破解的難度。

對于控制流信息的修改,一般采用控制流混淆技術,具體有以下幾種方法:一是通過內聯、外聯變換改變代碼的組織結構。例如,合并函數或使用增加額外參數的辦法來控制函數的執行次序。這種方法改變了原有代碼中函數的調用順序和執行次數,也稱為控制聚合混淆。二是對原有代碼的執行方向進行調整。例如,原有代碼中的增序循環可以轉變為相反的降序循環。這種方法不會改變程序的執行,但攻擊者卻會產生迷惑,因此也稱為控制順序混淆。三是通過“壓扁”“平整”控制流,改變原有程序的分支轉移結構。例如,將多個IF…ELSE分支整合成一個多分支的switch結構。這種方法將原本清晰的條件分支轉變為晦澀難懂的分支結構,從而增加了分析的難度,因此也稱為Dispatcher混淆。四是通過增加無效代碼、Goto語句等,偽造額外的控制流,不僅消耗攻擊者的分析時間,也可以令某些反編譯軟件失效,這種方法也稱為控制計算混淆。

2.動態加載技術

動態加載是一種在PC平臺得到廣泛應用的代碼保護技術。它的實現原理是將原始程序嵌套在另一個可執行程序中,將該可執行程序變成原始程序的“外殼”。動態加載的原理如圖2所示。

圖2 動態加載原理

當用戶運行增加了“外殼”的可執行程序時,首先被執行的是“外殼”代碼,它會將原始程序從數據段中解密出來,釋放到內存或文件系統中,然后根據一定的條件(如驗證用戶身份是否合法)決定是否將運行權交給原始程序。如果攻擊者對增加了“外殼”的可執行文件進行反編譯,只能得到“外殼”代碼的反編譯結果,無法窺探到原始程序的代碼。

對Android應用的動態加載保護可以通過使用Java類加載器和Jni調用本地代碼實現。如果使用Java類加載器,那么需要生成“外殼”程序的dex文件,并將原始程序的dex文件作為數據嵌入“外殼”程序的數據段中,形成圖3所示的結構。

Dex Header

Checksum

Signature

File_size

……

Loader代碼

加密壓縮后的原始dex代碼

圖3 加殼后的dex文件

當“外殼”程序開始執行后,它會將數據段中的原始dex文件進行恢復,存放在文件系統中,然后通過DexClassLoader加載運行原始的dex文件。該方法實現簡單,但需要將原始dex文件釋放到文件系統中,存在一定的安全隱患。

為了克服將原始dex文件釋放到文件系統中的缺點,Patrick提出了一種利用Jni調用openDexFile(byte[ ])函數來實現加載dex文件的方法。由于該方法可通過一個字節數組來傳遞 dex文件,原始dex文件可以直接釋放到內存中,無須寫入文件系統,因此避免了文件泄露的危險。

3.軟件水印技術

軟件水印是一種把程序的版權信息和用戶身份信息嵌入到程序中,或利用程序本身的一些特征(如代碼結構、調用關系等)來識別盜版軟件的技術。由于Android應用在被攻擊者破解后,往往會被重新打包發布,因此目前針對Android應用的軟件水印保護研究主要集中在如何檢測應用的相似度,從而檢測出被重新打包的盜版應用。

Wu Zhou以Dalvik字節碼中的操作符和操作數作為應用的特征,設計了一種應用相似度檢測系統。該系統利用模糊散列技術,分別提取原始程序和目標程序的特征,然后依據特征值的近似程度作為檢測的結果。

為了提高檢測的準確度,Jonathan將較難被篡改的程序依賴關系圖PDG(Program Dependency Graph)作為程序的特征,提出了一種基于PDG的相似度檢測系統,并通過實驗證明該方法的有效性。

4.反跟蹤調試技術

跟蹤調試軟件是程序設計人員發現程序中潛在錯誤的重要工具,但攻擊者同樣可以使用跟蹤調試軟件來記錄程序的執行過程、內存訪問和文件讀寫數據,從中查找分析程序執行中的關鍵部分,從而對程序進行破解。為了讓攻擊者得不到程序執行時的信息,可以使用以下的方法阻止跟蹤調試軟件對程序進行動態跟蹤。

第一,時間差異法。時間差異法主要是通過在代碼的任意兩端插入獲取當前時間的函數,通過計算兩端時間的差值,來判斷是否有調試器附著在本程序進程上。如果程序沒有被調試器附著,那么程序的執行速度完全取決于CPU的運算速度,在代碼任意兩端設置的時間函數所計算出的時間差應該是一個很小的、固定的值。但是,如果程序被調試器附著后,攻擊者往往會對程序進行單步執行跟蹤,從而觀察、分析程序的執行過程,這樣一來勢必造成時間差的大幅增加。因此,可以通過編寫代碼,在需要保護的代碼兩端設置計時函數并設置閾值。如果計時函數計算出的時間差超過閾值,則說明程序很有可能被調試器附著,可以采取終止程序等手段來阻止攻擊者的跟蹤調試。

第二,父進程判別法。調試器可以通過兩種方法對目標程序進行調試,一種是在目標程序運行后,附著在目標程序上對其進行跟蹤,另一種是首先運行調試器程序,繼而由調試器程序啟動目標程序,將目標程序作為調試器程序的子進程,進行跟蹤調試。子進程可以通過操作系統提供的函數來獲得父進程的PID(Process Identifier),這是該進程在系統中獨一無二的標識信息。通過PID,子進程還可以進一步獲得父進程的其他信息,如進程映像名稱。子進程可以將獲得的父進程映像名稱與流行的調試器映像名稱進行對比,從而判斷自己是否處于被調試器加載啟動的狀態。

在Android平臺中,一個進程可以通過函數getppid獲得其父進程的PID。如果該程序是由NDK編寫,那么該程序的父進程應該與該程序所在的APK包同名。如果程序判斷兩者不同,則程序極有可能是作為某種調試器的子進程,此時程序可以采取停止運行來對抗調試。

三 總結及展望

如何防止攻擊者對軟件進行破壞或盜版一直是信息安全領域的研究熱點,本文選擇Android應用作為研究目標,分析了Android應用開發的結構,闡述了幾種常見的Android應用保護技術,對這些技術的特點和適用范圍進行了總結。利用這些技術,開發人員可以不同程度地延緩或阻止攻擊者對應用的破解,保護自身的合法權益。

參考文獻

[1]史揚、曹立明、王小平.混淆算法研究綜述[J].同濟大學學報(自然科學版),2005(6)

[2]王一賓、陳意云.代碼迷惑技術研究進展[J].吉林大學學報(信息科學版),2008(4)

[3]羅宏、蔣劍琴、曾慶凱.用于軟件保護的代碼混淆技術[J].計算機工程,2006(11)

[4]王建民、余志偉、王朝坤等.Java程序混淆技術綜述[J].計算機學報,2011(9)

[5]趙躍華、郭玉杰.面向對象的控制流轉換方法[J].計算機工程與設計,2010(20)

[6]張鵬、牛少彰.Android平臺軟件保護技術[J].中國電子商情(通信市場),2014(1)

[7]張立和、楊義先、鈕心忻等.軟件水印綜述[J].軟件學報,2003(2)

[8]吳世忠、郭濤、董國偉等.軟件漏洞分析技術進展[J].清華大學學報(自然科學版),2012(10)

[9]王浩宇、王仲禹、郭耀等.基于代碼克隆檢測技術的Android應用重打包檢測[J].中國科學(信息科學),2014(1)

〔責任編輯:龐遠燕、汪二款〕

主站蜘蛛池模板: 亚洲国产成人麻豆精品| 伊人成人在线| 久久午夜影院| 亚洲精品第五页| 欧美无遮挡国产欧美另类| 亚洲综合国产一区二区三区| 亚洲香蕉在线| 欧美精品1区| 国产精品开放后亚洲| 国产剧情无码视频在线观看| 国产永久无码观看在线| 人妻丝袜无码视频| 992Tv视频国产精品| 久热中文字幕在线| 操操操综合网| 国产欧美日韩精品综合在线| 色网站免费在线观看| 国产精品冒白浆免费视频| 无码内射中文字幕岛国片| 亚洲免费福利视频| 国产内射一区亚洲| 国产精品毛片在线直播完整版| 欧美中文字幕在线二区| 国内精品一区二区在线观看| 黄片一区二区三区| www.av男人.com| 亚洲精品不卡午夜精品| 亚洲视频欧美不卡| 国产精品网址你懂的| 四虎成人在线视频| 国产凹凸视频在线观看| 欧美精品成人| 国产主播喷水| 国产最新无码专区在线| www成人国产在线观看网站| 一级香蕉人体视频| 中文字幕在线一区二区在线| 免费观看男人免费桶女人视频| 国产成人精品亚洲77美色| 久久天天躁夜夜躁狠狠| 亚洲人成网18禁| 精品无码人妻一区二区| 欧美怡红院视频一区二区三区| 看看一级毛片| 国产福利2021最新在线观看| 亚洲日本韩在线观看| 热99精品视频| 免费AV在线播放观看18禁强制| 亚洲欧美一区二区三区蜜芽| 99re视频在线| 精品国产免费人成在线观看| 91久久青青草原精品国产| 夜夜高潮夜夜爽国产伦精品| 成人综合久久综合| 人妻中文久热无码丝袜| 欧美福利在线观看| 亚洲天堂久久| 91免费国产在线观看尤物| 欧美激情第一欧美在线| 91福利国产成人精品导航| 亚洲欧美日韩天堂| 日本五区在线不卡精品| 91精品亚洲| 99ri国产在线| 99一级毛片| 亚洲国产日韩视频观看| 亚洲国产第一区二区香蕉| 日韩色图在线观看| 91一级片| 亚洲人成影院午夜网站| 亚洲精品波多野结衣| 欧美日韩一区二区在线播放 | 欧美午夜网站| 精品综合久久久久久97| 久久久黄色片| 国产精品55夜色66夜色| 亚洲愉拍一区二区精品| 中文字幕亚洲专区第19页| 国产成人亚洲欧美激情| 狠狠色综合网| 久视频免费精品6| 亚洲91在线精品|