Oracle:安卓反混淆工具

jopen 8年前發布 | 9K 次閱讀 安卓開發

Oracle:基于Dalvik 反混淆的一種模式,它使用了有限執行來提高語義分析。此外,這個靈感激發了另一個安卓反混淆工具: Simplify

之前:

之后:

比特幣:133bmAUshC5VxntCcusWJdT8Sq3BFsaGce

安裝:

步驟一. 安裝Smali / Baksmali

我確定如果你是安卓逆向精英,那你的路徑中肯定已經有smali和baksmali了。

步驟二. 安裝安卓 SDK / ADB

確保你的路徑中有adb。

步驟三. 安裝Gem

gem install dex-oracle

或者,你也可以選擇使用這種方式獲得源:

git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install

步驟四. 連接設備或者模擬器

你必須有一個模擬器運行或者一個接入Oracle能夠工作的設備。

Oracle需要在一個live的安卓系統上執行方法。你可以選擇真正的安卓設備,也可以選擇模擬器(推薦)。如果你選擇了真正的安卓設備,確保你不介意在上面運行潛在的惡意代碼。

如果你更喜歡使用模擬器,并且已經安裝了Android SDK,你可以創建并啟動模擬器,如圖:

android avd

用法

Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
    -h, --help                       顯示屏幕
    -s ANDROID_SERIAL,               執行驅動的設備ID, default=""

        --specific-device
    -t, --timeout N                  ADB 命令執行超時, default="120"
    -i, --include PATTERN            僅僅是優化方法和類匹配模式, e.g. Ldune;->melange\(\)V
    -e, --exclude PATTERN            從優化中排除這些類型,包括重寫
        --disable-plugins STRING[,STRING]*
                                     禁用插件, e.g. stringdecryptor,unreflector
        --list-plugins               列出可用插件
    -v, --verbose                    詳細內容
    -V, --vverbose                   非常詳細的內容

舉個例子,對于在一個類里面的唯一的deobfuscate方法調用Lcom/android/system/admin/CCOIoll,而不是一個APK調用obad.apk;

dex-oracle -i com/android/system/admin/CCOIoll obad.apk

如何運行

Oracle把Android app(APK), Dalvik可執行文件(DEX)和Smali文件作為輸入源。第一,如果輸入源是一個APK或者DEX,它會被分解成很多個Smali文件。然后,這個Smali文件會被傳遞給很多執行粉絲和修改的插件。插件搜索能夠被轉化為更易讀的模式。為了了解代碼做了什么工作,一些Dalvik方法真的被執行了,然后我們收集了輸出。這樣,一些方法調用可以被替換為常量。之后,所有的Smali文件都被更新了。最后,如果輸入是一個APK或者一個DEX文件,被修改的Smali文件會被重新編譯,一個已更新的APK或者DEX就被創建了。

方法執行是被 驅動 執行的。輸入APK, DEX或者Smali都被和驅動混合進了一個使用dexmerge的DEX,然后被壓入了一個安卓設備或者安卓模擬器。無論插件是否請求,Oracle之后都會發送方法執行信息到驅動。驅動程序在自己的DEX使用Oracle提供的參數使用Java反射來執行方法,結果返回任何輸出或異常。這種方法對于很多字符串解密方法都非常有用,通常情況下,使用加密字符串或者一些one limitation都是執行是限制的靜態方法。

攻擊

1. 創建自己的插件

這里有三個帶有Oracle的 插件

Undexguard – 刪除某些特定類型的Dexguard混淆

Unreflector – 刪除某些Java反射

String Decryptor - 簡單的能夠刪除一些常見加密字符串的插件

如果你遇到一類新的混淆,它可能會用Oracle反混淆。查看Smali并找出是否代碼可以這樣:

1. 重新排列

2. 執行一些靜態方法理解

以上任何一種情況,你都應該嘗試并寫出你自己的插件。下面的四個步驟教你如何創建自己的插件:

1. 確定Smali模式
2. 搞清楚如何簡化模式
3. 搞清楚如何與驅動交互并調用方法
4. 搞清楚如何直接應用修改

這里包含的插件應該是理解步驟3、4的很好的指導。驅動被設計幫助步驟2 。

當然,我們非常歡迎你分享任何你遇到的混淆。

更新驅動程序

首先,確保DX在你的路徑上。這是Android SDK的一部分,但是它可能不在你的路徑上,除非你是硬核。

驅動程序文件夾是一個由Gradle管理的Java項目。將它導入Eclipse,IntelliJ等,然后進行修改。為了完成驅動的更新,運行./update_driver。這將重建驅動并轉換輸入JAR進入一個DEX。

更多信息

TetCon 2016 Android反混淆演示

*原文鏈接: github ,FireFrank編譯,轉載請注明來自FreeBuf黑客與極客(FreeBuf.COM)

來自: http://www.freebuf.com/tools/92545.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!