java访问正在运行的小程序的内部
这听起来可能是一个荒谬的问题,但我不得不问它,因为我有一个工作产品正在这样做
我有一个小程序在浏览器中运行。这个小程序不仅仅是任何小程序,而是CRM/ERP的一个相当复杂的软件包应用程序。一家供应商公司告诉我,他们可以在运行时用自己的类替换applet的主类,从而监控用户在applet中的行为。使用的术语是“背书”
我现在有点不知所措。你怎么能在一个小程序中观察并监听用户的点击和键盘事件,哪怕你能以某种方式侵入它?我可以告诉你,这是一个真实的故事,因为我看到了这家供应商公司的应用程序,它只是坐在后台,记录所有上下文信息(例如,用户填写了小程序中的哪个文本框,文本框的名称等等)
它们是在类加载级别的黑客(问这个问题我觉得很愚蠢),还是我在java中没有遇到过的其他东西,可以让你做这样的“都市传奇”的事情
# 1 楼答案
捕获Swing/AWT事件的解决方案可以在中找到 Want javax.swing hook that tells me WHICH component in the hierarchy is executing an action
覆盖从浏览器启动的小程序使用的Swing/AWT类很困难。 他们必须打破Java security manager的保护,并获得JRE认可的库文件夹的写入权限。 在这种情况下,如果没有最终用户的手动操作,Java认可的标准覆盖机制很难实现
# 2 楼答案
Java小程序使用如下HTML标记加载:
如您所见,“archive”属性支持多个。jar文件
您可以使用这种技术,通过将应用程序的Java类放在ApplicationP1中来加载自己版本的Java类。jar文件。它们将在存储在第二个应用程序中的类之前加载。罐子
显然,您需要进行一些逆向工程,以了解要覆盖或包装原始应用程序中的哪些类。然后,您必须创建与要覆盖的名称完全相同的新名称(包和类名)
另一种选择是开发方面,以捕获应用程序中的事件,并使用相同的多线程技术加载这些方面。HTML小程序标记的存档属性中的jar