
Основанный на паттернах деобфускатор Dalvik, использующий ограниченное выполнение для улучшения семантического анализа.
Далвик-деобфускатор на основе шаблонов, использующий ограниченное выполнение для улучшения семантического анализа. Также вдохновение для другого Android-деобфускатора: Simplify.
До

После

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
Поскольку вы элитный реверс-инженер Android, я уверен, что у вас уже есть Smali и Baksmali в PATH. Если по какой-то странной причине они еще не установлены, это должно помочь вам начать, но перед запуском внимательно изучите инструкцию:
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 находится в PATH.
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; внутри APK-файла с именем obad.apk:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
Oracle принимает на вход приложения Android (APK), исполняемые файлы Dalvik (DEX) и файлы Smali. Сначала, если на вход подаётся APK или DEX, он дизассемблируется в файлы Smali. Затем файлы Smali передаются различным плагинам, которые выполняют анализ и модификации. Плагины ищут шаблоны, которые можно преобразовать в более читаемый вид. Чтобы понять, что делает код, некоторые методы Dalvik фактически выполняются, и их результат собирается. Таким образом, некоторые вызовы методов можно заменить константами. После этого все файлы Smali обновляются. Наконец, если на входе был APK или DEX-файл, изменённые файлы Smali перекомпилируются, и создаётся обновлённый APK или DEX.
Выполнение методов осуществляется с помощью Driver. Входной APK, DEX или Smali объединяется с Driver в единый DEX с помощью dexmerge и отправляется на устройство или эмулятор. Затем плагины могут использовать Driver, который использует Java-рефлексию для выполнения методов из входного DEX. Возвращаемые значения можно использовать для улучшения семантического анализа, выходящего за рамки простого распознавания шаблонов. Это особенно полезно для многих методов дешифрования строк, которые обычно принимают зашифрованную строку или массив байтов. Одно ограничение: выполнение ограничено статическими методами.
Есть три плагина, которые поставляются с Oracle:
Если вы столкнулись с новым типом обфускации, возможно, её можно деобфусцировать с помощью Oracle. Посмотрите на Smali и определите, можно ли код:
Если применимо хотя бы одно из этих условий, попробуйте написать собственный плагин. Есть четыре шага для создания плагина:
Включённые плагины должны послужить хорошим руководством для понимания шагов #3 и #4. Driver разработан, чтобы помочь с шагом #2.
Конечно, вы всегда можете поделиться обфускациями, с которыми столкнулись, и кто-нибудь, возможно, в итоге займётся ими.
Сначала убедитесь, что dx находится в PATH. Это часть Android SDK, но, вероятно, его нет в PATH, если вы не хардкорщик.
Папка driver — это Java-проект, управляемый Gradle. Импортируйте его в Eclipse, IntelliJ и т.д. и вносите любые нужные изменения. Чтобы завершить обновление driver, выполните ./update_driver. Это пересоберёт driver и преобразует выходной JAR в DEX.
Если при выполнении кода driver на эмуляторе или устройстве возникла проблема, обязательно откройте monitor (часть Android SDK) и проверьте наличие подсказок. Даже если ошибка вам не понятна, будет полезно опубликовать её вместе с проблемой, которую вы создадите.
Не все платформы Android хорошо работают с dex-oracle. Некоторые из них просто сбоят при попытке выполнить произвольные DEX-файлы. Если у вас проблемы с segfault или сбоями driver, попробуйте использовать Android 4.4.2 API level 19 с ARM.
Возможно, что плагин видит шаблон, который он считает обфускацией, но на самом деле это код, который не следует выполнять. Это кажется маловероятным, потому что шаблоны обфускации действительно необычны, но возможно. Если вы обнаружили, что конкретный плагин вызывает проблемы, и вы уверены, что приложение не защищено этим конкретным обфускатором, т.е. приложение не защищено DexGuard, но плагин DexGuard пытается что-то выполнять, просто отключите его.