Java:方法挂钩和查找对象实例

扎布扎德

情况

嗨,我有2个问题。
情况是我正在编写WindowsJava API,API还提供了将代码注入到进程中然后操作目标的工具。我已经实现了injection-part,例如将一个jar注入另一个jar。此时,我的jar被调用(目标已经在运行时)并在完整的静态上下文中启动

目标与问题

从这里我有两个目标:

  1. 我想与目标对象进行交互,因此我需要引用对于许多对象,这已经成为可能,因为它们提供了对其实例的静态访问。例如,awt.Frames#getFrames()提供对所有创建的Frame对象的访问。但是,如果有可能访问堆上的任意对象那就太棒了。类似于“ Heap#getAllObjectInstances() ”。
  2. 给定一个对象实例,我想连接到该对象的任意功能例如,每当调用BufferStrategy#show()时,我都希望它首先调用另一个方法。

因此,我将问题总结如下:

  1. 如何从静态上下文中获取任意对象引用?
  2. 如何连接到任意函数?

评论

到目前为止,我所做的评论和想法:

  1. JDI(Java调试接口)经由提供了这样的方法的虚#allClasses() - >引用类型#实例(0) 但是JDI需要使用附加的调试参数启动目标JVM对我来说没有选择的可以深入到低层并使用内存工具分析堆,但是我希望有人知道更高级的方法对我来说,使用Windows API是我的一个选择,因为我熟悉JNA / JNI,但我不知道这样的工具。
  2. 最后的方法是将IAT挂钩与C代码一起使用,这是一种非常底层的方法,我想避免这种情况正如我可以假定此时具有对象引用一样,Reflection API是否提供了一种更改对象方​​法的方法?还是至少简单地提供了一个挂钩机制?

请注意,更改目标代码对我而言当然不是选择。而且它已经在运行时,因此ByteCode-Manipulation也可以作为一种选择。

设想

这可能派上用场:
目标是一个游戏,部署为jar。使用BufferStrategy使用Double-Buffer-Strategy进行渲染它使用BufferStrategy#show()显示图像我们将游戏中的jar注入游戏中,并希望在其上覆盖其他信息。为此,我们获得了对所使用的BufferStrategy的引用,并将其连接到show- method上。因此,每次调用它时都会调用drawOverlay-method,然后我们返回原始的show-method

脂蛋白

您需要的是JVMTI代理-一个使用JVM Tool Interface的本机库

可以使用Attach API将代理动态附加到正在运行的VM
请参阅VirtualMachine.loadAgentPath

  1. 要获取给定类的所有实例,请使用JVMTI IterateOverInstancesOfClass函数。
    有关详细信息,请参见相关问题

  2. 要拦截外部类的方法,您将需要JVMTI RetransformClasses API。通过使用Java级别的工具API也可以实现相同的目的,请参见Instrumentation.retransformClasses

有关JVMTI级方法拦截的示例,请参阅demo/jvmti/mtraceOracle JDK演示和示例软件包。

使用字节码操作库(例如Byte Buddy)将更容易进行Java级别的检测

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:方法挂钩和查找对象实例

来自分类Dev

使用ID和ActivatedRoute查找对象

来自分类Dev

Maya查找对象是否被实例化?

来自分类Dev

查找对象是否具有特定属性和真理的最快方法?

来自分类Dev

查找对象参考

来自分类Dev

Java查找对象列表中不包含的对象

来自分类Dev

使用前缀值和通配符查找对象

来自分类Dev

在ArrayList中查找对象索引的有效方法

来自分类Dev

查找对象是否具有特定方法

来自分类Dev

通过用户输入在ArrayList中查找对象-Java

来自分类Dev

如何在Java中查找对象的日期。

来自分类Dev

Java:如何在调试时查找对象地址?

来自分类Dev

在列表中查找对象

来自分类Dev

反向查找对象与数组

来自分类Dev

查找对象数组的索引

来自分类Dev

在列表中查找对象

来自分类Dev

使用HashMap查找对象

来自分类Dev

挂钩对象实例化

来自分类Dev

在对象数组内部查找对象

来自分类Dev

在复杂对象中查找对象

来自分类Dev

从Java中的嵌套对象列表中按ID查找对象

来自分类Dev

通过反射递归查找对象属性?

来自分类Dev

在iOS中从x,y查找对象

来自分类Dev

如何查找对象可以理解的消息?

来自分类Dev

从地图内的列表中查找对象

来自分类Dev

NSArray查找对象-最佳实践

来自分类Dev

通过realm.js查找对象

来自分类Dev

通过反射递归查找对象属性?

来自分类Dev

Spring @RequestBody不查找对象