
Um desofuscador Dalvik baseado em padrões que usa execução limitada para melhorar a análise semântica
Um desofuscador Dalvik baseado em padrões que utiliza execução limitada para melhorar a análise semântica. Também, a inspiração para outro desofuscador Android: Simplify.
Antes

Depois

sha1: a68d5d2da7550d35f7dbefc21b7deebe3f4005f3
md5: 2dd2eeeda08ac8c15be8a9f2d01adbe8
Como você é um engenheiro reverso Android de elite, tenho certeza de que já tem Smali e Baksmali no seu PATH. Se por alguma razão estranha não estiverem instalados, isso deve ajudar, mas por favor examine cuidadosamente antes de executar:
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
Certifique-se de que adb está no seu PATH.
gem install dex-oracle
Ou, se preferir compilar a partir do código fonte:
git clone https://github.com/CalebFenton/dex-oracle.git
cd dex-oracle
gem install bundler
bundle install
Você deve ter um emulador em execução ou um dispositivo conectado para o Oracle funcionar. A versão mínima necessária do Android é 5.0!
O Oracle precisa executar métodos em um sistema Android ativo. Isso pode ser em um dispositivo ou em um emulador (preferido). Se for um dispositivo, certifique-se de que você não se importa em executar código potencialmente hostil nele.
Se quiser usar um emulador e já tiver o Android SDK instalado, você pode criar e iniciar imagens de emulador com:
android avd
Usage: dex-oracle [opts] <APK / DEX / Smali Directory>
-h, --help Exibe esta tela
-s ANDROID_SERIAL, ID do dispositivo para execução do driver, padrão=""
--specific-device
-t, --timeout N Timeout de execução de comando ADB em segundos, padrão="120"
-i, --include PATTERN Otimiza apenas métodos e classes que correspondem ao padrão, ex.: Ldune;->melange\(\)V
-e, --exclude PATTERN Exclui esses tipos da otimização; inclusões têm prioridade
--disable-plugins STRING[,STRING]*
Desabilita plugins, ex.: stringdecryptor,unreflector
--list-plugins Lista os plugins disponíveis
-v, --verbose Seja verboso
-V, --vverbose Seja muito verboso
Por exemplo, para desofuscar apenas métodos de uma classe chamada Lcom/android/system/admin/CCOIoll; dentro de um APK chamado obad.apk:
dex-oracle -i com/android/system/admin/CCOIoll obad.apk
O Oracle recebe como entrada aplicativos Android (APK), executáveis Dalvik (DEX) e arquivos Smali. Primeiro, se a entrada for um APK ou DEX, ele é desmontado em arquivos Smali. Em seguida, os arquivos Smali são passados para vários plugins que realizam análises e modificações. Os plugins procuram por padrões que podem ser transformados em algo mais fácil de ler. Para entender o que o código está fazendo, alguns métodos Dalvik são realmente executados e a saída é coletada. Dessa forma, algumas chamadas de método podem ser substituídas por constantes. Depois disso, todos os arquivos Smali são atualizados. Finalmente, se a entrada era um arquivo APK ou DEX, os arquivos Smali modificados são recompilados e um APK ou DEX atualizado é criado.
A execução de métodos é realizada pelo Driver. O APK, DEX ou Smali de entrada é combinado com o Driver em um único DEX usando dexmerge e enviado para um dispositivo ou emulador. Os plugins podem então usar o Driver, que utiliza reflexão Java para executar métodos do DEX de entrada. Os valores de retorno podem ser usados para melhorar a análise semântica além do mero reconhecimento de padrões. Isso é especialmente útil para muitos métodos de descriptografia de strings, que geralmente recebem uma string criptografada ou algum array de bytes. Uma limitação é que a execução é limitada a métodos estáticos.
Existem três plugins que acompanham o Oracle:
Se você encontrar um novo tipo de ofuscação, pode ser possível desofuscar com o Oracle. Analise o Smali e descubra se o código pode:
Se um desses dois for o caso, você deve tentar escrever seu próprio plugin. Existem quatro passos para construir seu próprio plugin:
Os plugins incluídos devem ser um bom guia para entender as etapas #3 e #4. O Driver é projetado para ajudar com a etapa #2.
Claro, você é sempre bem-vindo para compartilhar qualquer ofuscação que encontrar e alguém pode eventualmente resolvê-la.
Primeiro, certifique-se de que dx está no seu PATH. Isso faz parte do Android SDK, mas provavelmente não está no seu PATH a menos que você seja hardcore.
A pasta driver é um projeto Java gerenciado pelo Gradle. Importe-o no Eclipse, IntelliJ, etc. e faça as alterações que desejar. Para finalizar a atualização do driver, execute ./update_driver. Isso reconstruirá o driver e converterá o JAR de saída em um DEX.
Se houver um problema ao executar o código do driver no seu emulador ou dispositivo, abra o monitor (parte do Android SDK) e verifique se há alguma pista lá. Mesmo que o erro não faça sentido para você, ajudará se você postá-lo junto com o problema que criará.
Nem todas as plataformas Android funcionam bem com o dex-oracle. Algumas simplesmente travam ao tentar executar arquivos DEX arbitrários. Se você estiver tendo problemas com Segfaults ou travamentos do driver, tente usar Android 4.4.2 API level 19 com ARM.
É possível que um plugin veja um padrão que pensa ser ofuscação, mas na verdade é algum código que não deveria executar. Isso parece improvável porque os padrões de ofuscação são realmente incomuns, mas é possível. Se você estiver achando que um determinado plugin está causando problemas e você tem certeza de que o aplicativo não está protegido por aquele ofuscador específico, ou seja, o aplicativo não é protegido por DexGuard mas o plugin do DexGuard está tentando executar coisas, apenas desabilite-o.