您好,登錄后才能下訂單哦!
御安全淺析安卓開發(fā)代碼混淆技術(shù)
【關(guān)鍵詞:代碼混淆,Android應(yīng)用加固,移動應(yīng)用保護(hù),APP保護(hù),御安全】
提高native代碼的安全性有什么好辦法嗎?答案是肯定的,今天我們就來介紹一種有效對抗native層代碼分析的方法——代碼混淆技術(shù)。
隨著移動互聯(lián)網(wǎng)的快速發(fā)展,應(yīng)用的安全問題不斷涌現(xiàn)出來,于是越來越多的應(yīng)用開發(fā)者將核心代碼由java層轉(zhuǎn)到native層,以對抗成熟的java逆向分析工具,然而如果native層的代碼如果沒有進(jìn)行任何保護(hù),還是比較容易被逆向分析工作者獲取其運(yùn)行邏輯,進(jìn)而完成應(yīng)用破解或者進(jìn)行其他的操作。那么提高native代碼的安全性有什么好辦法嗎?答案是肯定的,今天我們就來介紹一種有效對抗native層代碼分析的方法——代碼混淆技術(shù)。
那么,什么是代碼混淆呢?代碼混淆的學(xué)術(shù)定義如下:
代碼混淆(code obfuscation)是指將計(jì)算機(jī)程序的代碼,轉(zhuǎn)換成一種功能上等價(jià),所謂功能上的等價(jià)是指其在變換前后功能相同或相近。其解釋如下:程序P經(jīng)過混淆變換為P‘,若P沒有結(jié)束或錯(cuò)誤結(jié)束,那么P’也不能結(jié)束或錯(cuò)誤結(jié)束;而且P‘程序的結(jié)果應(yīng)與程序P具有相同的輸出。否則P’不是P的有效的混淆。
??
目前對于混淆的分類,普遍是以Collberg 的理論為基礎(chǔ),分為布局混淆(layout obfuscation)、數(shù)據(jù)混淆(data obfuscation)、控制混淆(control obfuscation)和預(yù)防混淆(preventive obfuscation)這四種類型。
布局混淆
??
布局混淆是指刪除或者混淆軟件源代碼或者中間代碼中與執(zhí)行無關(guān)的輔助文本信息,增加***者閱讀和理解代碼的難度。軟件源代碼中的注釋文本、調(diào)試信息可以直接刪除,用不到的方法和類等代碼或數(shù)據(jù)結(jié)構(gòu)也可以刪除,這樣即可以使***者難以理解代碼的語義,也可以減小軟件體積,提高軟件裝載和執(zhí)行的效率。軟件代碼中的常量名、變量名、類名和方法名等標(biāo)識符的命名規(guī)則和字面意義有利于***者對代碼的理解,布局混淆通過混淆這些標(biāo)識符增加***者對軟件代碼理解的難度。標(biāo)識符混淆的方法有多種,例如哈希函數(shù)命名、標(biāo)識符交換和重載歸納等。哈希函數(shù)命名是簡單地將原來標(biāo)識符的字符串替換成該字符串的哈希值,這樣標(biāo)識符的字符串就與軟件代碼不相關(guān)了;標(biāo)識符交換是指先收集軟件代碼中所有的標(biāo)識符字符串,然后再隨機(jī)地分配給不同的標(biāo)識符,該方法不易被***者察覺;重載歸納是指利用高級編程語言命名規(guī)則中的一些特點(diǎn),例如在不同的命名空間中變量名可以相同,使軟件中不同的標(biāo)識符盡量使用相同的字符串,增加***者對軟件源代碼的理解難度。布局混淆是最簡單的混淆方法,它不改變軟件的代碼和執(zhí)行過程。
數(shù)據(jù)混淆
??
數(shù)據(jù)混淆是修改程序中的數(shù)據(jù)域,而對代碼段不作處理。常用的數(shù)據(jù)混淆方式有合并變量、分割變量、數(shù)組重組、字符串加密等。
??
合并變量是將幾個(gè)變量合并為一個(gè)數(shù)據(jù),原來的每個(gè)變量占據(jù)其中一個(gè)區(qū)域,類似于一個(gè)大的數(shù)據(jù)結(jié)構(gòu)。分割變量則是將一個(gè)變量分割為兩個(gè)變量,對分割前后提供一種映射關(guān)系,將對一個(gè)變量的操作轉(zhuǎn)化為對分割后兩個(gè)變量的操作。
??
數(shù)組重組有數(shù)組的分割、合并、折疊和平滑等幾種方式。分割是將一個(gè)數(shù)組分成2個(gè)或多個(gè)相同維度的數(shù)組;合并則相反;折疊是增加數(shù)組的維數(shù);平滑則是相反。
??
在ELF文件中,全局變量和常量字符串存放在數(shù)據(jù)段中,反匯編工具可以輕易查找到字符串與代碼之間的引用關(guān)系。在軟件破解中,通過一些字符串提示可以很方便的找到代碼關(guān)鍵語句,從而破解軟件。字符串加密則可以對這些明顯的字符串進(jìn)行加密存儲,在需要時(shí)再進(jìn)行解密。
打破順序是指打破程序的局部相關(guān)性。由于程序員往往傾向于把相關(guān)代碼放在一起,通過打破順序改變程序空間結(jié)構(gòu),將加大破解者的思維跳躍。
關(guān)于騰訊安全實(shí)驗(yàn)室
騰訊移動安全實(shí)驗(yàn)室:基于騰訊手機(jī)管家產(chǎn)品服務(wù),通過終端安全平臺、網(wǎng)絡(luò)安全平臺和硬件安全平臺為移動產(chǎn)業(yè)打造云管端全方位的安全解決方案。其中騰訊御安全專注于為個(gè)人和企業(yè)移動應(yīng)用開發(fā)者,提供全面的應(yīng)用安全服務(wù)。
騰訊安全反詐騙實(shí)驗(yàn)室:匯聚國際最頂尖白帽***和多位騰訊專家級大數(shù)據(jù)人才,專注反詐騙技術(shù)和安全***體系研究。反詐騙實(shí)驗(yàn)室擁有全球最大安全云數(shù)據(jù)庫并服務(wù)99%中國網(wǎng)民。
(騰訊御安全團(tuán)隊(duì)原創(chuàng),轉(zhuǎn)載請注明來源)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。