【问题标题】:Replace new method dexlib2 failing替换新方法 dexlib2 失败
【发布时间】:2017-06-14 21:01:45
【问题描述】:

我正在使用 dexlib2 通过一个 jar 实用程序重写现有的 apk。我想用我自己的指令更改一条指令。它基本上是返回一些对象,我想用另一种返回不同对象的方法替换它。它可以替换方法,但是当我查看更新的 dex 时,我可以看到下一行 .local v1, manager:Lblah/KeyguardManager;

我要替换的代码

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

上面应该替换的代码:

Manager mgr=Manager.getInstance(this)

我已经使用 getInstructionRewriter 方法来替换它。它替换了方法,但我无法弄清楚如何替换 .local v1, manager:Lblah/KeyguardManager;使用 .local v1,经理:Lblah/Manager;

【问题讨论】:

  • 我真的不知道,但你可以查看这个项目,看看是否有类似的东西github.com/khaledblah/dex_tainting
  • 您的问题不清楚。你可以像你说的那样替换v1。可以肯定的是,您可以反编译其中包含Manager mgr=Manager.getInstance(this) 的代码,并查看它在smali 中的情况,然后将其复制到您的jar 类的那个文件中。如果不是您的问题,请添加您要更改的反编译 jar 文件的行(我的意思是它的 smali 代码而不是 java 代码)。

标签: java android dex smali


【解决方案1】:

您应该确保 Lblah/Manager 存在于您的 apk 中。 如果您只想在一个.smali 文件中进行此更改,而其他文件保持不变,那将很容易。您必须在此文件中对所有出现的KeyguardManager 进行罚款,并将他们进行的调用替换为Manager 类中的相应调用。然后重新打包你的apk 并测试它。

如果您在重新创建 apk 文件或安装新的 apk 后出现错误,则可能是您所做的更改不匹配,您必须找出问题所在。在这种情况下,您可以在此处发布错误,我们将看看我们能做什么! :)

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2020-07-12
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多