APKTOOL、Smali などのツール、および Eclipse や NetBeans などの IDE を使用して APK をブラック ボックス テストする方法を考え出そうとしています。必要なものはほとんど揃っています。デコンパイル/デバッグ インストゥルメント/再コンパイル/署名/アラインし、デバイス上で実行できます。
私が抱えている問題は、デバッガーが接続された後にブレークポイントを設定することです (ブレークポイントは Smali コードで設定されます)。ブレークポイントが Dalvik に送信されていないか、Dalvik がブレークポイントを尊重していないようです。いずれにせよ、プログラムがブレークポイントに遭遇したときに、デバッガーはスナップしません。いくつかの調査では、必要になる可能性があることが示されていますDebug.waitForDebugger
。(http://stackoverflow.com/questions/3107587/android-with-jdb-confusion-using-waitfordebugger)。
が次のハードルであると仮定すると、ローカル スタックを調整した後、waitForDebugger
Smali 構文を使用して挿入できます。invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
私の質問は、どこに呼び出しを挿入するのwaitForDebugger
ですか? MainActivity
静的コンストラクター ( clinit
)、インスタンス コンストラクター ( init
) onCreate
、または他の場所で(マニフェストから)を選択する必要がありますか? Eclipse、NetBeans などの IDE は、デバッグ ビルドでこれをどのように行うのですか?