我一直在倒退一段時間,我從來沒有遇到過Smali字節碼的實時調試工具。但是,當您有一些複雜的目標時,在我們的工具集中進行靜態和動態分析是非常有用的。這就是我的做法,它可能會幫助你。
- 首先使用Jadx反編譯dex文件並將Smali轉換爲Java。這樣你就可以對應用程序的基本知識有一個大致的瞭解。
- 如果應用程序使用本地代碼,您還可以從APK中的/ lib文件夾中提取庫並分析它們,但由於您的問題不是關於本地代碼,因此我將跳過此主題。
- 現在我們假設您發現了一些使用密鑰加密數據的神祕加密函數,但密鑰是動態生成的,您只需查看代碼即可得到它,您需要掛鉤方法!
- Android上我最喜歡的工具是Xposed。它是一個你在你的設備上安裝的框架(通常需要root),它允許你創建一個模塊,當你的目標應用程序被加載並掛接其任何方法(即使是系統方法)時,它將被加載。
- 比方說,神祕的密碼功能:使用
String encrypt(String key, String data);
Xposed我們可以做以下傾倒的關鍵是:
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());
}
});
- 的關鍵將現在出現在你的設備logcat的。
您可以使用Xposed方法前後勾取,替換方法,避免方法調用,直接使用您的代碼調用方法等等!還有一個名爲Frida的工具,可以讓您在同一時間掛接Java代碼,但也可以使用本地代碼,使用起來很簡單,而且所有內容都通過自定義JavaScript API進行封裝。但是,我發現Xposed更穩定。
謝謝,xposed功能強大,但反向速度太慢。所以你的意思是,目前沒有工具可以即時反彙編Dalvik字節碼? –
順便說一句,我不得不說,查看反編譯的java代碼是大多數情況下最好的方法,但我只想在這裏找到一個最動態和「可靠」的方法 –
如果您能夠負擔IDA的專業版,一個將調試器附加到Android設備並調試Dalvik的模塊,但我不能說它是好的還是易於使用,因爲我從來沒有使用它。 – EquiFox