限られた実行を使用して意味分析を改善するパターンベースのDalvik Deobfuscator。また、別のAndroid deobfuscatorのインスピレーション:Simplify。
前に
後
SHA1:A68D5D2DA7550D35F7DBEFC21B7DEEBEBE3F4005F3
MD5:2DD2EEEDA08AC8C15BE8A9F2D01ADBE8
あなたはエリートの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 : $PWDadbパスにあることを確認してください。
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アプリ(APK)、Dalvik実行可能ファイル(DEX)、およびSMALIファイルを入力します。まず、入力がAPKまたはDEXの場合、Smaliファイルに分解されます。次に、Smaliファイルは、分析と変更を実行するさまざまなプラグインに渡されます。プラグインは、読みやすいものに変換できるパターンを検索します。コードが何をしているのかを理解するために、いくつかのDalvikメソッドが実際に実行され、出力が収集されます。これにより、一部のメソッド呼び出しは定数に置き換えることができます。その後、すべてのSmaliファイルが更新されます。最後に、入力がAPKまたはDEXファイルである場合、変更されたSMALIファイルが再コンパイルされ、更新されたAPKまたはDEXが作成されます。
メソッド実行はドライバーによって実行されます。入力APK、Dex、またはSmaliは、DexMergeを使用してドライバーと単一のDexに組み合わされ、デバイスまたはエミュレータに押し込まれます。プラグインは、Java Reflectionを使用して入力DEXからメソッドを実行するドライバーを使用できます。返品値は、単なるパターン認識を超えてセマンティック分析を改善するために使用できます。これは、通常、暗号化された文字列またはバイト配列を採取する多くの文字列復号化方法に特に役立ちます。 1つの制限は、実行が静的な方法に限定されることです。
Oracleが付属する3つのプラグインがあります。
新しいタイプの難読化に遭遇した場合、Oracleで脱皮することが可能かもしれません。 Smaliを見て、コードが次のかどうかを把握します。
これら2つのいずれかが当てはまる場合は、独自のプラグインを試してみてください。独自のプラグインを構築するための4つのステップがあります。
付属のプラグインは、手順#3と#4を理解するための適切なガイドである必要があります。ドライバーは、ステップ#2を支援するように設計されています。
もちろん、あなたが出会った難読化を共有することはいつでも大歓迎であり、誰かが最終的にそれに到達するかもしれません。
まず、 dxあなたのパス上にあることを確認します。これはAndroid SDKの一部ですが、ハードコアでない限り、おそらくあなたの道にはいません。
ドライバーフォルダーは、Gradleが管理するJavaプロジェクトです。 Eclipse、Intellijなどにインポートし、好きな変更を加えます。ドライバーの更新を完了するには、run ./update_driver実行します。これにより、ドライバーが再構築され、出力ジャーをDEXに変換します。
エミュレータまたはデバイスでドライバーコードの実行に問題がある場合は、 monitor (Android SDKの一部)を開いて、そこにある手がかりを確認してください。エラーが意味をなさない場合でも、作成する問題と一緒に投稿すると役立ちます。
すべてのAndroidプラットフォームがDex-Oracleでうまく機能するわけではありません。それらのいくつかは、任意のDEXファイルを実行しようとしているときにただがらくた。 SegFaultsまたはDriver Crashに問題がある場合は、Android 4.4.2 APIレベル19をARMで使用してみてください。
プラグインは、難読化だと思うパターンを見る可能性がありますが、実際には実行されないコードです。難読化パターンが本当に珍しいので、これはありそうにないようですが、それは可能です。特定のプラグインが問題を引き起こしていることがわかり、アプリがその特定のObfuscatorによって保護されていないことを確認している場合、つまりアプリはDexGuardedではありませんが、DexGuardプラグインはものを実行しようとしています。