【问题标题】:Reverse engineering Apps using Xposed使用 Xposed 逆向工程应用程序
【发布时间】:2021-04-11 18:46:48
【问题描述】:

所以我正在开发一个应该适合多个应用程序的 Xposed 模块,该模块的目的是为不同的应用程序自动创建一组模块,我需要知道的是,有没有办法知道某个应用程序在运行时调用的所有方法,比如如果我可以制作一个 Xposed 模块,它将所有被调用方法的名称保存在一个数据库中,这将是一个很大的帮助,或者如果你有任何关于Xposed模块的自动化请指出我的方向。最后,该应用程序的目的是向用户显示应用程序中每种方法的功耗,并显示哪些方法比其他方法使用更多的功率,这就是我需要自动化该过程的原因,这样我就可以为不同的应用程序创建多个模块,而无需经历所有其他应用的代码。

【问题讨论】:

    标签: android reverse-engineering xposed xposed-framework


    【解决方案1】:

    你想做的,理论上是可以的:

    例如,您可以在运行时加载应用程序的 dex 文件并检查每个类和方法并挂钩它们。然而,这将有几个明显的缺点:

    1. 在应用程序中挂钩许多功能时,执行速度会显着减慢。 即使在高端设备上,用户也不会接受这一点。这也会增加有关无响应应用程序的 Android 错误消息,因为您的 Xposed 模块会减慢它们的速度。

    2. 在我看来,更糟糕的问题是,速度变慢当然意味着 CPU 有更多的工作要做,因此最终你的 Xposed 模块会大大降低电池寿命。 因此,最终使用 Xposed 模块管理的数据的电池使用监控应用程序必须显示 Xposed 和您的模块消耗了超过 50% 的电池(只是一个原始估计,可能高达 80%)因为钩子方法很多。

    方法挂钩是一种技术,只有在您只执行一些不经常执行的方法时才会有效。

    或者,您可以在特殊的测试设备上使用它来评估某些东西(因此它不会在每天使用的常规设备上使用)。在这种环境下,电池使用量增加和应用程序变慢都不是什么大问题。

    【讨论】:

    • 这只是为了我正在进行的一项研究它不应该为日常用户发布,感谢您的回答,第二个问题实际上可能是一个问题,但如果只应用它会有所帮助钩子用于某些测试,然后一次只选择几种方法来钩子以获得更准确的结果?
    • @khaledsabri 如果您只为一个应用程序这样做并且只是为了测试,那么我建议使用 Frida 而不是 Xposed。由于在应用程序运行时动态更新 JavaScript 代码,而不是每次更新 Xposed 模块时都重新启动设备,因此开发速度要快得多。
    • 从 Xposed 过渡到 Frida 是否容易,因为 xposed 已经完成了很多工作
    • 所以我终于达到了我实际上正在尝试这样做的地步,逆向工程进展顺利,但关于性能问题在我开始注意到任何延迟之前我应该​​一次挂钩多少方法,因为有一个暴露的方法叫做 hookAllMethods,它挂钩一个类中的所有方法我正在考虑一次挂钩一个类的所有方法这会导致问题吗?
    • 这并不是你真正挂钩的方法数量,而是每秒调用多少挂钩方法。如果您挂钩一种每秒执行一千次的方法,您会注意到(也取决于所用手机的 CPU)。试试看。如果您收到有关应用程序没有响应的消息,您就知道这太过分了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2011-07-01
    • 2012-02-20
    • 2012-11-02
    • 2023-04-06
    • 2016-10-09
    相关资源
    最近更新 更多