我正在使用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 /经理;
答案 0 :(得分:0)
您应该确保apk中存在Lblah/Manager
。
如果您只想在一个.smali
文件中进行此更改并保留其他文件不变,那将很容易。您必须在此文件中完成KeyguardManager
的所有出现,并将其所做的调用替换为Manager
类中的相应调用。然后重新打包您的apk
并进行测试。
如果您在重新创建apk
文件或安装新的apk之后遇到错误,那么您可能会遇到一些不匹配的错误,您必须找出问题所在。在这种情况下,您可以在此处发布错误,我们将看到我们可以做些什么! :)