我有一个使用android.opengl.GLSurfaceView
类的闭源Android程序。
我需要注入一些Java代码(已完成注入),用我自己的android.opengl.GLSurfaceView
类(挂钩)替换所有GLSurfaceView
相关处理,而不更改原始代码(没有源代码,不允许反汇编) )。
基本上,它是一种关于Win32 C编程的API挂钩,但是在Java / Android中。
答案 0 :(得分:1)
你不能这样做,而你不能这样做的原因是它会严重违反安全性。例如,如果有一种机制来执行此操作,您将能够覆盖阻止下载的Java应用程序从您的计算机上安装恶意软件的类。
您可以通过修改安装的字节码来实现此目的,以便GLSurfaceView执行不同的操作,或者通过修改应用程序的字节码使其调用替代类而不是GLSurfaceView。
答案 1 :(得分:0)
如果要注入代码的类不是最终类,则可以扩展类并重新实现所需的方法(同样,仅当方法不是最终方法时)
答案 2 :(得分:0)
您将无法使用Java反射执行此操作。
最好的办法是使用字节码重写机制来修改闭源程序的字节码。如果您使用的是“真正的Java”,我建议使用BCEL。你需要处理Davlik代码,我不知道Davlik是否有BCEL模拟。
这假设您可以以允许您在不违反安全规则的情况下修改它们的形式访问此闭源应用程序的字节码。例如,如果应用程序已签名,则更改字节码将使签名无效。
在不违反逆向工程限制的情况下这样做会带来另一个困难。
听起来你需要放弃这个想法。