御安全淺析安卓開發代碼混淆技術

御安全淺析安卓開發代碼混淆技術

【關鍵詞:代碼混淆,Android應用加固,移動應用保護,APP保護,御安全】


提高native代碼的安全性有什么好辦法嗎?答案是肯定的,今天我們就來介紹一種有效對抗native層代碼分析的方法——代碼混淆技術。

隨著移動互聯網的快速發展,應用的安全問題不斷涌現出來,于是越來越多的應用開發者將核心代碼由java層轉到native層,以對抗成熟的java逆向分析工具,然而如果native層的代碼如果沒有進行任何保護,還是比較容易被逆向分析工作者獲取其運行邏輯,進而完成應用破解或者進行其他的操作。那么提高native代碼的安全性有什么好辦法嗎?答案是肯定的,今天我們就來介紹一種有效對抗native層代碼分析的方法——代碼混淆技術。

那么,什么是代碼混淆呢?代碼混淆的學術定義如下:

[if !supportLineBreakNewLine]

[endif]

代碼混淆(code obfuscation)是指將計算機程序的代碼,轉換成一種功能上等價,所謂功能上的等價是指其在變換前后功能相同或相近。其解釋如下:程序P經過混淆變換為P‘,若P沒有結束或錯誤結束,那么P’也不能結束或錯誤結束;而且P‘程序的結果應與程序P具有相同的輸出。否則P’不是P的有效的混淆。

目前對于混淆的分類,普遍是以Collberg 的理論為基礎,分為布局混淆(layout obfuscation)、數據混淆(data obfuscation)、控制混淆(control obfuscation)和預防混淆(preventive

obfuscation)這四種類型。

1. 布局混淆

布局混淆是指刪除或者混淆軟件源代碼或者中間代碼中與執行無關的輔助文本信息,增加攻擊者閱讀和理解代碼的難度。軟件源代碼中的注釋文本、調試信息可以直接刪除,用不到的方法和類等代碼或數據結構也可以刪除,這樣即可以使攻擊者難以理解代碼的語義,也可以減小軟件體積,提高軟件裝載和執行的效率。軟件代碼中的常量名、變量名、類名和方法名等標識符的命名規則和字面意義有利于攻擊者對代碼的理解,布局混淆通過混淆這些標識符增加攻擊者對軟件代碼理解的難度。標識符混淆的方法有多種,例如哈希函數命名、標識符交換和重載歸納等。哈希函數命名是簡單地將原來標識符的字符串替換成該字符串的哈希值,這樣標識符的字符串就與軟件代碼不相關了;標識符交換是指先收集軟件代碼中所有的標識符字符串,然后再隨機地分配給不同的標識符,該方法不易被攻擊者察覺;重載歸納是指利用高級編程語言命名規則中的一些特點,例如在不同的命名空間中變量名可以相同,使軟件中不同的標識符盡量使用相同的字符串,增加攻擊者對軟件源代碼的理解難度。布局混淆是最簡單的混淆方法,它不改變軟件的代碼和執行過程。

2. 數據混淆

數據混淆是修改程序中的數據域,而對代碼段不作處理。常用的數據混淆方式有合并變量、分割變量、數組重組、字符串加密等。

合并變量是將幾個變量合并為一個數據,原來的每個變量占據其中一個區域,類似于一個大的數據結構。分割變量則是將一個變量分割為兩個變量,對分割前后提供一種映射關系,將對一個變量的操作轉化為對分割后兩個變量的操作。

數組重組有數組的分割、合并、折疊和平滑等幾種方式。分割是將一個數組分成2個或多個相同維度的數組;合并則相反;折疊是增加數組的維數;平滑則是相反。

在ELF文件中,全局變量和常量字符串存放在數據段中,反匯編工具可以輕易查找到字符串與代碼之間的引用關系。在軟件破解中,通過一些字符串提示可以很方便的找到代碼關鍵語句,從而破解軟件。字符串加密則可以對這些明顯的字符串進行加密存儲,在需要時再進行解密。

3. 控制混淆

控制混淆也稱流程混淆,它是改變程序的執行流程,從而打斷逆向分析人員的跟蹤思路,達到保護軟件的目的。一般采用的技術有插入指令、偽裝條件語句、斷點等。偽裝條件語句是當程序順序執行從A到B,混淆后在A和B之間加入條件判斷,使A執行完后輸出TRUE或FALSE,但不論怎么輸出,B一定會執行。

控制混淆采用比較多的還有模糊謂詞、內嵌外聯、打破順序等方法。

模糊謂詞是利用消息不對稱的原理,在加入模糊謂詞時其值對混淆者是已知的,而對反混淆者卻很難推知。所以加入后將干擾反匯編者對值的分析。模糊謂詞的使用一般是插入一些死的或不相關的代碼(bogus code),或者是插入在循環或分支語句中,打斷程序執行流程。

內嵌(in-line)是將一小段程序嵌入到被調用的每一個程序點,外聯(out-line)是將沒有任何邏輯聯系的一段代碼抽象成一段可被多次調用的程序。

打破順序是指打破程序的局部相關性。由于程序員往往傾向于把相關代碼放在一起,通過打破順序改變程序空間結構,將加大破解者的思維跳躍。

4. 預防混淆

預防混淆一般是針對專用的反編譯器設計的,目的就是預防被這類反編譯器反編譯。他是利用特定的反編譯器或反混淆器的弱點進行專門設計。預防混淆對于特定的反編譯器非常有效,所以在使用時要綜合利用各種反編譯器的特點進行設計。

御安全保護方案提供了以上所述四種混淆分類的多維度的保護,布局混淆方面,御安全提供了針對native代碼層中的函數名進行了混淆刪除調試信息等功能;數據混淆方面,御安全提供了針對常量字符串加密及全局變量的混淆的功能;控制混淆方面,御安全針對代碼流程上,提供了扁平化,插入bogus 分支以及代碼等價變換等功能;預防混淆方面,御安全在混淆過程中加入了針對主流反編譯器的預防混淆的代碼,能夠有效地抵抗其分析。御安全還對應用開發者提供不同等級的保護力度及多種混淆方式的功能的選擇,用戶可以根據自己的需求定制不同的混淆功能保護。

同時,御安全保護方案除了提供代碼混淆保護方面的技術,還提供代碼虛擬化技術及反逆向、反調試等其他安全保護方案,綜合使用多種保護方案可以有效地提高您的代碼安全,歡迎大家使用。

關于騰訊安全實驗室


騰訊移動安全實驗室:基于騰訊手機管家產品服務,通過終端安全平臺、網絡安全平臺和硬件安全平臺為移動產業打造云管端全方位的安全解決方案。其中騰訊御安全專注于為個人和企業移動應用開發者,提供全面的應用安全服務。

騰訊安全反詐騙實驗室:匯聚國際最頂尖白帽黑客和多位騰訊專家級大數據人才,專注反詐騙技術和安全攻防體系研究。反詐騙實驗室擁有全球最大安全云數據庫并服務99%中國網民。

(騰訊御安全團隊原創,轉載請注明來源)


i

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377