2017-03-11 33 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()); 
相关问题