程式碼混淆不再愁:一篇掌握核心技巧
1. 概述
程式碼混淆是將計算機程式的程式碼轉換成一種功能上等價,但是難以閱讀和理解的形式。
對於軟體開發者來說,程式碼混淆可以在一定程度上保護程式免被逆向。
對於逆向工程師來說,學習程式碼混淆可以幫助我們研究反混淆技術。
2. 常見混淆思路
常見的混淆思路有:符號混淆、控制流混淆、計算混淆和虛擬機器混淆。
2.1 符號混淆
指的是將函式的符號,如函式名、全域性變數名去除或者混淆。對於ELF檔案可以透過strip指令去除符號表完成。
下圖就是一個去除了符號的程式。
下圖則對函式名進行了混淆。
2.2 控制流混淆
指的是混淆程式正常的控制流,使其在功能保持不變的情況下,使其不能清晰地反映原程式的正常邏輯。
常見的有:控制流平坦化、虛假控制流、隨機控制流。
控制流平坦化指的是將正常控制流中基本塊之間的跳轉關係刪除,用一個集中的分發塊來排程基本塊的執行順序,下圖為經過控制流平坦化的控制流圖。
虛假控制流指的是,透過向正常控制流中插入若干不可達基本塊和由不透明謂詞造成的虛假跳轉以產生大量垃圾程式碼干擾攻擊者分析的混淆。
下圖為虛假控制流混淆的控制流圖,它與控制流平坦化不同,呈現出長條狀。
隨機控制流是虛假控制流的一種變體。隨機控制流透過克隆基本塊以及新增隨機跳轉(隨機跳轉到兩個功能相同的基本塊中的一個)來混淆控制流。隨即控制流的控制流圖與虛假控制流類似,都呈長條形。
2.3 計算混淆
指的是混淆程式的計算流程,或計算流程中使用的資料,使分析者難以分辨某一段程式碼所執行的具體計算。一般有指令替代、常量替代。
指令替代將正常的二元運算指令(如加、減、異或等)替換為等效而複雜的指令序列,以達到混淆計算過程的目的。經過指令替代,函式的控制流沒有發生變化,但運算過程變得難以分辨。
常量替代指將二元運算指令(如加、減、異或等)中使用的常數替換為等效而更復雜的表示式,以達到混淆計算過程或某些特殊常量的目的。例如將TEA加密使用的常量0x9e3779b 替換為 12167*16715+18858*32146-643678438。類似於指令替代,函式的控制流沒有發生變化,但是運算過程變得難以分辨。
2.4 虛擬機器混淆
指的是將一組指令集合(如一組x86指令)轉化為一組攻擊者未知的自定義指令集,並用與程式繫結的直譯器解釋執行。虛擬機器混淆代表:VMProtect。
虛擬機器混淆是目前最強力的混淆,但有效能損耗大、容易被防毒軟體報毒等缺點。
3. OLLVM支援的混淆
OLLVM是經典的程式碼混淆工具,在國內移動安全的使用非常廣泛。它提供了三種經典的程式碼混淆:
控制流平坦化
虛假控制流
指令替代
3. 混淆工具推薦
Ipa Guard是一款功能強大的ipa混淆工具,不需要ios app原始碼,直接對ipa檔案進行混淆加密。可對IOS ipa 檔案的程式碼,程式碼庫,資原始檔等進行混淆保護。 可以根據設定對函式名、變數名、類名等關鍵程式碼進行重新命名和混淆處理,降低程式碼的可讀性,增加ipa破解反編譯難度。可以對圖片,資源,配置等進行修改名稱,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5類app。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026554/viewspace-2996669/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Flutter 程式碼混淆 混淆Dart程式碼FlutterDart
- 學好風變程式設計,蒐集資料不再愁程式設計
- 【程式碼混淆】react-native 程式碼混淆React
- js程式碼混淆JS
- ios加固,ios程式碼混淆,ios程式碼混淆工具, iOS原始碼混淆使用說明詳解iOS原始碼
- Android程式碼混淆&元件化混淆方案Android元件化
- 鴻蒙程式碼配置混淆鴻蒙
- Android程式碼混淆Android
- iOS安全/程式碼混淆iOS
- Python程式碼混淆工具,Python原始碼保密、加密、混淆Python原始碼加密
- 程式碼混淆工具ipaguard:如何使用ipaguard保護和混淆iOS應用程式程式碼iOS
- 程式碼混淆與反混淆學習-第二彈
- powershell程式碼混淆繞過
- 前端程式碼安全與混淆前端
- iOS 初探程式碼混淆(OC)iOS
- 程式碼混淆的規則
- 聊聊如何進行程式碼混淆行程
- iOS應用加固--程式碼混淆iOS
- Android 程式碼混淆規則Android
- 教你5步搞定程式碼混淆
- Android Studio 程式碼混淆Android
- Android 專案程式碼混淆Android
- Python 程式碼混淆工具概述Python
- 程式碼安全之程式碼混淆及加固(Android)?Android
- SpringBoot程式碼混淆與反混淆加密工具詳解Spring Boot加密
- android 混淆規則作用,Android程式碼混淆詳解Android
- 逆向破解js程式碼加密,程式碼混淆不是難事JS加密
- AlloyTouch Button外掛-不再愁click延遲和點選態
- Python 的控制流程式碼混淆Python
- Spring Boot使用Allatori程式碼混淆Spring Boot
- 使用proguard混淆springboot程式碼Spring Boot
- Java程式碼混淆工具入門——Allatori~Java
- 使用模擬器混淆前端程式碼前端
- MSWord-用欄位程式碼混淆
- 對.net 程式進行原始碼混淆原始碼
- Android程式碼混淆的實踐Android
- ProGuard程式碼混淆技術詳解
- .NET 程式碼混淆工具-JIEJIE.NET