2016-08-16 11 views
1

AndroidアプリケーションのapkからすべてのAPI呼び出しを抽出します。 apktoolを使ってapaliからsmaliコードファイルを入手しました。手動でいくつかのAPI呼び出しを見つけることができますが、私は自動化されたメソッドが必要です。例えば、私はこのコード行でgetNetworkInfoコールを見ることができます:私はsmaliコードでの経験がないandroid apkの.smaliファイルからすべてのAPI呼び出しを抽出する

invoke-virtual {p0, v0}, Landroid/net/ConnectivityManager;->getNetworkInfo(I)Landroid/net/NetworkInfo; 

とAndroidアプリケーションの分析と非常に少ないです。私は "getNetworkInfo"が1であることを知ったので、私は上記のAPI呼び出しを検出しました。もちろん、私がしたくないことは、すべての可能なAPI呼び出しのリストから始めて、smaliファイル内のそれぞれを1つずつ検索することです。

APIコールの別の兆候がありますか? invoke-virtualまたはinvoke-directは、常にAPI呼び出しを意味しますか?

+1

を検索することによって開始することができ、私はDEXファイルにアクセスするためにdexlib2を使用することをお勧めしますプログラム的に、smaliファイルを解析しようとするよりもむしろ。 – JesusFreke

答えて

1

invoke-virtualおよびinvoke-directはそれぞれ、仮想メソッド解決の有無にかかわらず、いくつかのオブジェクトのメソッドを呼び出すだけです。必ずしもAPIコールである必要はありません。独自のコードで定義したクラスのインスタンスを含め、あらゆる種類のオブジェクトでこれらの命令を使用できます。

この場合、android.net.ConnectivityManagerクラスのメソッドの呼び出しが見つかりました。あなたはより多くのAPI呼び出しを見つけたい場合は、あなたがinvoke-*例えばandroid.*下は何も含まれる場合があります特定のクラスを参照する命令、java.*javax.*など