Un Dalvik Deobfuscator basado en patrones que utiliza una ejecución limitada para mejorar el análisis semántico. Además, la inspiración para otro Android Deobfuscator: Simplify.
Antes
Después
SHA1: A68D5D2DA7550D35F7DBEFC21B7DEEBE3F4005F3
MD5: 2DD2EEEDA08AC8C15BE8A9F2D01ADBE8
Como eres un reversador de Android de élite, estoy seguro de que ya tienes smali y baksmali en tu camino. Si por alguna extraña razón aún no está instalada, esto debería comenzar, pero examínelo cuidadosamente antes de ejecutar:
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 Asegúrese de que adb esté en su camino.
gem install dex-oracleO, si prefiere construir desde la fuente:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle installDebe tener un emulador en ejecución o un dispositivo conectado para que Oracle funcione. ¡La versión de Android mínima requerida es 5.0!
Oracle necesita ejecutar métodos en un sistema Android en vivo. Esto puede estar en un dispositivo o un emulador (preferido). Si es un dispositivo, asegúrese de no le importa ejecutar un código potencialmente hostil en él .
Si desea usar un emulador y ya tiene instalado el SDK de Android, puede crear e iniciar imágenes del emulador con:
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
Por ejemplo, solo deobfuscar los métodos en una clase llamada Lcom/android/system/admin/CCOIoll; Dentro de un APK llamado obad.apk :
dex-oracle -i com/android/system/admin/CCOIoll obad.apkOracle toma Android Apps (APK), Dalvik Ejecutables (DEX) y los archivos SMALI como entradas. Primero, si la entrada es un APK o DEX, se desmonta en archivos SMALI. Luego, los archivos SMALI se pasan a varios complementos que realizan análisis y modificaciones. Los complementos buscan patrones que se puedan transformar en algo más fácil de leer. Para comprender qué está haciendo el código, algunos métodos Dalvik se ejecutan realmente y se recopila la salida. De esta manera, algunas llamadas de métodos pueden reemplazarse con constantes. Después de eso, todos los archivos SMALI se actualizan. Finalmente, si la entrada era un archivo APK o DEX, se recompensan los archivos SMALI modificados y se crea un APK o DEX actualizado.
El controlador realiza la ejecución del método. La entrada APK, DEX o SMALI se combina con el controlador en un solo DEX usando Dexmerge y se empuja en un dispositivo o emulador. Los complementos pueden usar el controlador que usa la reflexión de Java para ejecutar métodos de la entrada DEX. Los valores de retorno se pueden usar para mejorar el análisis semántico más allá del mero reconocimiento de patrones. Esto es especialmente útil para muchos métodos de descifrado de cadenas, que generalmente toman una cadena cifrada o alguna matriz de bytes. Una limitación es que la ejecución se limita a los métodos estáticos.
Hay tres complementos que vienen con Oracle:
Si se encuentra con un nuevo tipo de ofuscación, puede ser posible desobfuscar con Oracle. Mire el smali y descubra si el código puede ser:
Si cualquiera de estos dos es el caso, debe intentar escribir su propio complemento. Hay cuatro pasos para construir su propio complemento:
Los complementos incluidos deben ser una buena guía para la comprensión de los pasos #3 y #4. El controlador está diseñado para ayudar con el paso #2.
Por supuesto, siempre eres bienvenido a compartir cualquier ofuscación que encuentres y que alguien eventualmente pueda llegar a ella.
Primero, asegúrese de que dx esté en su camino. Esto es parte del SDK de Android, pero probablemente no esté en su camino a menos que esté duro.
La carpeta de controladores es un proyecto Java administrado por Gradle. Impórtelo en Eclipse, IntelliJ, etc. y realice cualquier cambio que desee. Para terminar de actualizar el controlador, ejecute ./update_driver . Esto reconstruirá el controlador y convertirá el jar de salida en un DEX.
Si hay un problema para ejecutar el código del controlador en su emulador o dispositivo, asegúrese de abrir monitor (parte del SDK de Android) y verificar si hay pistas allí. Incluso si el error no tiene sentido para usted, ayudará si lo publica junto con el problema que creará.
No todas las plataformas de Android funcionan bien con Dex-Oracle. Algunos de ellos simplemente se apresuran cuando intentan ejecutar archivos Dex arbitrarios. Si tiene problemas con SEGFaults o se bloquea el controlador, intente usar Android 4.4.2 API Nivel 19 con ARM.
Es posible que un complemento vea un patrón que cree que es la ofuscación, pero en realidad es algún código que no debería ejecutar. Esto parece poco probable porque los patrones de ofuscación son realmente inusuales, pero es posible. Si está encontrando que un complemento en particular está causando problemas y está seguro de que la aplicación no está protegida por ese ofuscador en particular, es decir, la aplicación no está holgazada, pero el complemento DexGuard está tratando de ejecutar cosas, simplemente desactívelo.