2017-03-05 9 views
0

x86でアプリケーションをリバースエンジニアリングすると、デバッグ中にx86アセンブリコードを取得できます。 EIP/RIPが指すオペコードをx86アセンブリに逆アセンブルします。しかし、アンドロイドのアプリケーションでは、デバッグを有効にするために、いつも何らかのソースが必要です。私の質問は、APKの逆アセンブリを行う代わりに、リアルタイムでデバッグするプログラムのjava/smaliコードを取得できますか?言い換えれば、デバッガは、x86上でできることと同じように、その場でコードを「逆アセンブル」できますか?アンドロイドアプリケーションのデバッグ中に逆アセンブルコードを取得する方法は?

私は、APKの逆アセンブルされたコードを使用すると、プログラムの静的な逆アセンブリコードしか取得できないため、なぜメソッドがフックされているのでしょうか?

答えて

0

私はしばらく逆転していました。私はSmaliバイトコード用のライブデバッグツールに遭遇したことはありません。しかし、いくつかの複雑なターゲットがある場合は、ツールセットに静的分析と動的分析の両方を持たせることは本当に便利です。これは私がそれを行う方法です、それはあなたを助けるかもしれません。

  1. Jadxを使用して開始し、dexファイルを逆コンパイルし、SmaliをJavaに変換します。このようにして、アプリケーションの基礎を一般的に理解することができます。
  2. アプリでネイティブコードを使用する場合は、APKの/ libフォルダからlibsを抽出して解析することもできますが、ネイティブコードに関する質問ではないので、この件をスキップします。
  3. ここでは、キーを使ってデータを暗号化する不思議な暗号化関数を見つけたとしましょうが、キーは動的に生成され、コードを見るだけでは取得できず、メソッドをフックする必要があります。
  4. Android用のお気に入りツールはXposedです。これは、あなたのデバイスにインストールするフレームワークです(通常はrootが必要です)。そして、ターゲットアプリケーションが読み込まれたときにロードされ、そのメソッドのいずれかをフックする(システムメソッドでさえも)モジュールを作成することができます。
  5. のは、神秘的な暗号化機能があるとしましょう:キーは、今お使いのデバイスに表示されます
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { 
if (!lpparam.packageName.equals("com.target.app")) { 
     return; 
    } 

findAndHookMethod("com.target.app.CryptoClass", lpparam.classLoader, "encrypt", String.class, String.class, new XC_MethodHook() { 
     @Override 
     protected void beforeHookedMethod(MethodHookParam param) throws Throwable { 
      Log.i("TargetApp_Hook", "Secret Key: " + param.args[0].toString()); 
     } 
    }); 
<オール開始=「6」>: String encrypt(String key, String data);我々はキーをダンプするには、以下の操作を行うことができXposedを使用しますlogcat。

Xposedを使用すると、前後のメソッドをフックしたり、メソッドを置き換えたり、メソッド呼び出しを回避したり、コードを直接使用してメソッドを呼び出すことができます。 Fridaという名前のツールもあります。これにより、Javaコードだけでなくネイティブコードも同時にフックできるようになります。使いやすく、すべてがカスタムJavascript APIでラップされています。しかし、私はXposedがより安定していることを発見しました。

+0

ありがとう、xposedは強力ですが、逆に遅すぎます。つまり、現在、Dalvikバイトコードをその場で分解できるツールはありません。 –

+0

ところで、逆コンパイルされたJavaコードを調べるのは、ほとんどの場合に最適な方法ですが、ここで最もダイナミックで信頼性の高い方法を探したいだけです。 –

+0

IDAのプロ版を買う余裕があればデバッガをアンドロイドデバイスに接続してDalvikをデバッグするモジュールですが、使い慣れていないので使いやすいかどうかはわかりません。 – EquiFox

関連する問題