2012-03-30 4 views
2

APK dexファイルを逆コンパイルしてさまざまなフックを挿入できるツールがいくつかあります。メソッドがフックされたかどうかを調べる方法(アプリケーションをクラッキングするためにレイヤーとして機能するサードパーティのメソッド)

たとえば、インストーラのパッケージ名を確認する場合は、関数PackageManager.getInstallerName()を呼び出す必要があります。

私が心配している限り、彼らはメソッドへのリフレクションを置き換えてから、実際のメソッドを呼び出すか、またはスプーフィングされた結果を送信します。

これは、メソッドをネイティブまたはリフレクションで呼び出す場合は重要ではないという大きな利点があります。

この場合、getInstallerName()は常にcom.google.android.feedbackを返します。

なフックのためのいくつかのソースコードはここで見つけることができます:http://androidcracking.blogspot.de/2011/03/original-smalihook-java-source.html

は、これらのフックを検出する方法はありますか?

答えて

0

元のapkと疑わしい海賊版バージョンであることがわかっているものに対してmd5の合計を実行し、2つを比較することができます。これは、疑わしい改ざんされたバージョンがに変更されたことを保証するだけですが、正確にどのように伝えません。

私は自分で試したことはありませんが、有望そうですが、thisのようなものです。理論的にはSmailhookなどのクラス名を検索でき、if彼らは存在する。これらのアイデアは、調査のための正しい方向を指摘する必要がありますが、すべての拠点を網羅しているわけではありません。

EDIT:あなたは、実行時にこのような何かを達成したい場合は(私は知らなかったあなたはthis--はあなたがの不審だったアプリの特定のコピーを意味考えてやりたいと思い、オフライン)Class.forName()メソッドのようなものを試してみるかもしれません。そのようなものや、他のクラスローダーメソッドの1つは、探している.dexファイル内のクラスを検索するのに役立ち、NoClassDefFoundError をキャッチしてすべてがうまくいったことを知ることができます。 の名前がの場合は、希望通りに処理することができます。プログラムを終了し、悪意のあるアプリのデータベースを持つWebサービスにヒットします。

+0

ありがとうございます回答。明らかに、APKをmd5sumすることは不可能です(合計を保存すると、合計が変更されます)、唯一の方法はclasses.dexをcrcすることです。また、dex2jarは実行時に使用するには高価になります。単にsmaliクラスのクラスをチェックする方法はありますか?また、私はより一般的な方法を必要とするだけでなく、この1つのツールです。 – Force

+0

ああ、実行時にこれをやりたかったことを理解していない:)それはかなり変わる。私は自分のレスポンスを編集します... – waxspin

+0

'Class.forName()'は良いアプローチですが、クラスはDEXに挿入されませんが、バイトコードを変更するだけです。つまり、追加の方法はありません。 – Force

関連する問題