基於模式的DALVIK DEOBFUSCATOR,它使用有限的執行來改善語義分析。另外,另一個Android DeobFuscator的靈感:簡化。
前
後
SHA1:A68D5D2DA7550D35F7DBEFC21B7DEEBE3F4005F3
MD5:2DD2EEDA08AC8C15BE8A9F2D01ADBE8
由於您是精英Android Reverser,因此我確定您的道路上已經有Smali和Baksmali。如果出於某種奇怪的原因尚未安裝,這應該可以讓您開始,但是請在運行之前仔細檢查它:
mkdir ~ /bin || cd ~ /bin
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali-2.2.5.jar && mv smali- * .jar smali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.2.5.jar && mv baksmali- * .jar baksmali.jar
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/smali
curl --location -O https://bitbucket.org/JesusFreke/smali/downloads/baksmali
chmod +x ./smali ./baksmali
export PATH= $PATH : $PWD確保adb在您的道路上。
gem install dex-oracle或者,如果您願意從來源構建:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install您必須具有運行的模擬器或插入設備才能使Oracle工作。所需的最低Android版本為5.0!
Oracle需要在實時Android系統上執行方法。這可以在設備或模擬器上(首選)。如果是設備,請確保您不介意在其上運行潛在的敵對代碼。
如果您想使用仿真器,並且已經安裝了Android SDK,則可以使用以下方式創建並啟動模擬器圖像。
android avd Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help Display this screen
-s ANDROID_SERIAL, Device ID for driver execution, default=""
--specific-device
-t, --timeout N ADB command execution timeout in seconds, default="120"
-i, --include PATTERN Only optimize methods and classes matching the pattern, e.g. Ldune;->melange()V
-e, --exclude PATTERN Exclude these types from optimization; including overrides
--disable-plugins STRING[,STRING]*
Disable plugins, e.g. stringdecryptor,unreflector
--list-plugins List available plugins
-v, --verbose Be verbose
-V, --vverbose Be very verbose
例如,僅在稱為Lcom/android/system/admin/CCOIoll;在一個名為obad.apk的apk內部:
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle將Android Apps(APK),Dalvik可執行文件(DEX)和Smali文件作為輸入。首先,如果輸入是APK或DEX,則將其分解為Smali文件。然後,Smali文件傳遞給執行分析和修改的各種插件。插件搜索可以將其轉換為更容易閱讀的模式。為了了解代碼在做什麼,實際執行了一些Dalvik方法並收集了輸出。這樣,可以將某些方法調用替換為常數。之後,所有SMALI文件均已更新。最後,如果輸入是APK或DEX文件,則重新編譯修改後的SMALI文件,並創建更新的APK或DEX。
方法執行由驅動程序執行。輸入APK,DEX或SMALI與驅動程序結合使用Dexmerge,並將其推入設備或模擬器上。然後,插件可以使用使用Java反射的驅動程序從輸入DEX執行方法。返回值可用於改善僅僅模式識別的語義分析。這對於許多字符串解密方法特別有用,該方法通常採用加密的字符串或某些字節數組。一個限制是執行僅限於靜態方法。
有三個帶有Oracle的插件:
如果您遇到一種新型的混淆,則可能會與Oracle脫落。查看smali並找出代碼是否可以是:
如果這兩種情況中的任何一個,您應該嘗試編寫自己的插件。構建自己的插件有四個步驟:
隨附的插件應該是了解步驟3和4的好指南。駕駛員旨在幫助第2步。
當然,您總是歡迎您分享您遇到的任何混淆,並最終可能會遇到。
首先,確保dx在您的路上。這是Android SDK的一部分,但是除非您是鐵桿,否則它可能不在您的道路上。
驅動程序文件夾是由Gradle管理的Java項目。將其導入Eclipse,Intellij等,並進行您喜歡的任何更改。要完成更新驅動程序,請運行./update_driver 。這將重建驅動程序並將輸出罐轉換為DEX。
如果在模擬器或設備上執行驅動程序代碼存在問題,請確保打開monitor (Android SDK的一部分)並檢查那裡的任何線索。即使錯誤對您沒有意義,如果您將其與您創建的問題一起發布,也將有所幫助。
並非所有的Android平台都可以與Dex-Oracle合作。當嘗試執行任意DEX文件時,其中一些只是廢話。如果您在Segfaults或驅動程序崩潰方面遇到麻煩,請嘗試使用Android 4.4.2 API級19級使用ARM。
插件可能會看到它認為是混淆的模式,但實際上是某些代碼不應該執行的代碼。這似乎不太可能,因為混淆模式確實很不尋常,但這是可能的。如果您發現特定的插件會引起問題,並且確定該應用程序不會受到該特定的offuscator的保護,那麼該應用程序不會被刪除,但是DexGuard插件正在嘗試執行內容,只需將其禁用即可。