llvm是編譯器的框架系統,ollvm(obfuscator-llvm):混淆jni檔案的一種工具
ollvm原始碼 :
控制流平坦化
平坦化是來重組原始**執行流程,把原本易於閱讀的**流程重組成乙個switch case形式的執行流程,所以被混淆的函式具有異常的控制流。
指令替換
使用功能上等效但更複雜的指令序列替換標準二元運算子(+ , – , & , | 和 ^)
虛假控制流程
這個模式主要巢狀幾層判斷邏輯,乙個簡單的運算都會在外麵包幾層if-else。
ollvm反混淆
反混淆需要解決以下幾個問題:
確定分發控制塊
觀察白色的塊,其實特徵非常明顯,非常短(只有幾條指令),僅僅只有暫存器的操作,而沒有記憶體操作,最後都是cmp+跳轉等等,這個不同廠商的混淆有細微的差別,但多數都特徵非常明顯,可以直接靜態分析出來,在反混淆程式設計上,為了隔離這種差別引起的複雜性,可以用多型隔離掉就可以了。確定所有控制塊後,直接用0清除這些塊裡面所有指令,免得干擾ida分析,因為修復成功後,所有真實塊都不會經過這些控制塊了。
確定真實邏輯塊的前後關係
單從靜態分析去確定真實塊的關係非常浪費時間,這裡可以採取兩種方法
ida動態除錯,使用trace斷點記錄目標函式執行路徑
模擬執行目標函式,並記錄執行路徑
ollvm crackme演算法分析
ollvm後的演算法還原案例分享
ollvm控制流混淆學習、逆向過程
基於unicorn 的arm64 ollvm反混淆
android ollvm反混淆實戰
安卓應用程式混淆
應用程式混淆 防止程式被反編譯。步驟 1.將專案下的 project.properties 檔案的 proguard.config tools proguard proguard android.txt proguard project.txt 行取消注釋。並修改為 proguard.config ...
安卓混淆配置檔案說明
混淆檔案的位置 proguard android.txt 預設的混淆檔案 sdk目錄 tools proguard proguard rules.pro 讓我們自行新增混淆規則檔案 相應module的目錄下 proguardfiles getdefaultproguardfile proguard ...
安卓retrofit2混淆後出現介面失敗
背景 安卓專案需要啟用混淆,但是混淆後,發現無法進行登陸,經過反覆對比,確認是混淆導致的。通過debug,發現呼叫網路介面失敗,不過找不到問題原因,日誌和debug都沒有發現什麼線索。幸運的是,在網上搜尋到了一片類似的文章 android使用retrofit2混淆後出現解析失敗的原因 最終順利解決。...