2016-08-16 168 views
1

我想從Android應用程序的apk中提取所有API調用。我已經使用apktool從apk獲取smali代碼文件。手動我可以發現一些API調用,但我需要一種自動方法。例如,我可以看到getNetworkInfo呼叫在這行代碼:從android中的.smali文件中提取所有API調用apk

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

我有smali代碼沒有經驗,很少有Android應用程序分析;我只發現了上面的API調用,因爲我碰巧知道「getNetworkInfo」是一個。但是,當然,我不想做的事情是從所有可能的API調用列表開始,並在smali文件中逐一搜索它們中的每一個。

是否有API調用的另一個跡象? invoke-virtualinvoke-direct將總是意味着一個API調用?

+1

我會建議使用dexlib2訪問DEX文件以編程方式,而不是試圖解析smali文件。 – JesusFreke

回答

1

invoke-virtualinvoke-direct分別只是調用某個對象的方法,而不用虛擬方法解析。這不一定是一個API調用;您可以將這些說明用於任何類型的對象,包括您在自己的代碼中定義的類的實例。

在這種情況下,您找到了android.net.ConnectivityManager類中方法的調用。如果你想找到更多的API調用,您可以通過搜索invoke-*指令引用某些類,例如可能包括android.*下任何東西,java.*javax.*等開始

相關問題