2017-03-11 48 views
0

正如標題所說,我希望使用xposed記錄從應用程序中調用的所有方法,直到它停止。我只想記錄類名,方法名,不想勾選所有方法。 我嘗試了這段代碼,但沒有找到getMethod錯誤。在Xposed中記錄所有在應用程序中調用的方法

findAndHookMethod("java.lang.Class", lpparam.classLoader, "getMethod", String.class, Object.class, new XC_MethodHook() 

在此先感謝!

+0

掛鉤* *所有由一個應用程序調用的方法幾乎不可能。如果您要鉤住用於打印日誌的方法,該怎麼辦?如果你只想在應用中看到一個靜態的方法列表,你可以使用'apktool'來反編譯APK文件。 –

+0

我不想鉤住所有方法。我只想記錄從它開始直到我停止它的應用程序調用的方法。 – LieuLiau

回答

0

正如前面提到的,由於Xposed的開銷,Xposed不是這種情況。

最簡單的解決方案就是使用Google提供的dmtracedump。大多數x86 Android圖像和模擬器都帶有可調試標誌(ro.debuggable),因此您甚至可以將它用於閉源應用程序。

此外,已知其他工具(如Emma)也可與Android一起使用,但這些工具可能需要修改源代碼。

+0

是的,我知道這個traceview,但問題是我的stoptracing調用之前有時會關閉app force,因此沒有寫入跟蹤文件。 – LieuLiau

+0

這是你的應用程序還是一個封閉的源應用程序?如果你只想要的是所運行的方法/類的名稱,那麼隨着時間的推移可以檢索到Emma代碼覆蓋... – 4knahs

+0

這是一個封閉的源代碼應用程序。艾瑪可以用它嗎? – LieuLiau

1

沒有像你似乎在搜索的任何一種線路解決方案。

掛鉤所有方法將讓應用程序從它開始直到停止記錄哪些方法被調用(有點 - 見下文),但如果(由於某種原因)你不想鉤住所有方法,唯一的解決方案是我可以想到的是修改Java虛擬機本身(不是我推薦。)

是(在某種程度上)的作品

我所做的就是第一次使用apktool反編譯我的APK,並獲得名稱的解決方案所有類的所有方法。 然後,我使用xposed鉤入每個類的每個單獨的方法,並打印到dlog當前函數名稱。

爲什麼只有那種工作

Xposed具有每當它鉤住方法的開銷。對於一般使用xposed應用程序,它不是很多。但是,當你開始連接應用程序的每一種方法時,開銷很快會變得非常大 - 很多以至於上述方法適用於小應用程序,但對於任何大型應用程序,它很快會導致應用程序掛起然後崩潰。

還排序的,工程

FRIDA另一種方法是注入JavaScript來本地應用的方式。他們告訴你如何記錄所有的函數調用。在上面的鏈接中,他們將所有函數調用記錄在一段python代碼中,相同的代碼也適用於Android。

+0

謝謝您的回答:) – LieuLiau

0

有一種方法可以記錄所有Java方法。修改XposedBridge。

Xposed通過XposedBridge.java的方法 鉤Java方法 「handleHookedMethod(會員方法,INT originalMethodId,對象additionalInfoObj,的thisObject,對象[]參數)」

Log.v(TAG, "className " + method.getClass().getName() + ",methodName " + method.getName()); 
相關問題