2016-04-06 10 views
3

Das klingt vielleicht nach einer lächerlichen Frage, aber ich muss es fragen, weil ich ein funktionierendes Produkt habe, das das tut.Auf die Interna eines laufenden Applets zugreifen

Ich habe ein Applet in einem Browser ausgeführt. Dieses Applet ist nicht irgendein Applet, sondern eine ziemlich komplexe Paketanwendung für CRM/ERP. Ich wurde von einer Herstellerfirma informiert, dass sie in der Lage sind, zu überwachen, was ein Benutzer innerhalb des Applets tut, indem er die Hauptklasse des Applets zur Laufzeit vor dem Start durch ihre eigene ersetzt. Der verwendete Begriff war "befürworten".

Ich bin jetzt ein bisschen ahnungslos. Wie können Sie in ein Applet schauen und auf Benutzerklicks und Tastaturereignisse lauschen, selbst wenn Sie sich irgendwie hineinhacken könnten? Ich kann Ihnen sagen, dass dies eine wahre Geschichte ist, weil ich die Anwendung dieses Anbieters gesehen habe und sie nur im Hintergrund sitzt und alle kontextuellen Informationen aufzeichnet (z. B. Benutzer füllte die Textbox im Applet, den Namen der Textbox und etc).

Sind sie irgendwelche Hacks auf Classloading-Ebene (ich fühle mich dumm, das zu fragen), oder etwas anderes, das ich nicht in Java gefunden habe, das dich etwas 'urban legendär' so machen lässt?

+0

Ich habe ein bisschen Forschung zu diesem Thema. Es sieht so aus, als könnte man seine eigene Implementierung für standardisierte Bibliotheken schreiben und sie in den empfohlenen Lib-Ordner für die JRE setzen, um Standard-JDK-Bibliotheken wie jax-ws, jaxp usw. zu überschreiben. Nun, im Kontext meiner Frage kann ich nicht verstehen, wie eine der standardisierten Bibliotheken verwendet werden kann, um zu beobachten, was in einem Applet vor sich geht. Nehmen wir zum Beispiel an, ich würde meine eigenen jax-ws schreiben, um alle Netzwerknachrichten zu protokollieren. Dies wird mir nicht helfen, da das ERP Verschlüsselung und ein benutzerdefiniertes Protokoll über HTTP und nicht SOAP verwendet. – Jay

+0

Was ist, wenn sie nur die Swing-Bibliothek ersetzen? – tak3shi

+1

im jre? ok, du meinst wie benutze java code base, schreibe ihren eigenen code, kompiliere und ersetze den jre? - Ich denke, das ist ein langer Schuss. Plausibel, aber angesichts der Größe dieser Aufgabe glaube ich nicht, dass sie es so machen. – Jay

Antwort

0

Die Lösung für die Erfassung Schwingen/AWT Ereignis kann in Want javax.swing hook that tells me WHICH component in the hierarchy is executing an action

findet es schwierig ist, durch Applet Schwingen/AWT-Klasse zum Überschreiben, die von Browser zu starten. Sie müssen den Schutz des Java-Sicherheits-Managers brechen und die Schreibberechtigung für den JRE-unterstützten Bibliotheksordner erhalten. Für diesen Fall ist es schwierig, den Java-Standard-Override-Mechanismus zu implementieren, ohne den Endbenutzer manuell zu bedienen.

+0

Sie installieren eine ActiveX-Komponente/Anwendersoftware auf dem Endbenutzercomputer mit Benutzerberechtigung, bevor Applet gestartet wird.Nun, selbst wenn sie eine Benutzerberechtigung haben, um etwas zu tun, wie werden sie den von Java unterstützten Standard-Override-Mechanismus implementieren? Welche API werden sie für Applets überschreiben? Die Auswahl ist auch begrenzt - Sie können nur Apis wie JAXB, JAX-WS usw. machen. – Jay

1

Java-Applets sind eine HTML-Tags wie folgt loaded mit:

<applet archive="ApplicationSP1.jar,Application.jar" code="Main.class" name="myApp" width="800" height="600"></applet> 

Wie Sie sehen können, das "Archiv" Attribut unterstützt mehrere .jar-Dateien.

Sie können diese Technik verwenden, um Ihre eigenen Versionen der Java-Klassen der Anwendung zu laden, indem Sie sie in die Datei ApplicationSP1.jar einfügen. Sie werden vor den in der zweiten Application.jar gespeicherten Klassen geladen.

Offensichtlich müssten Sie einige Reverse Engineering durchführen, um zu verstehen, welche Klassen aus der ursprünglichen Anwendung überschrieben oder umbrochen werden. Dann müssen Sie neue erstellen, die genau benannt werden (das gleiche Paket und der gleiche Klassenname) wie diejenigen, die Sie überschreiben möchten.

Andere Option wäre die Entwicklung von Aspekten, um Ereignisse in der Anwendung zu erfassen und diese Aspekte mit der gleichen Technik von mehreren .jar im Archivattribut des HTML-Applet-Tags zu laden.

+0

ok, das ist wahrscheinlich etwas, das es wert ist, erforscht zu werden. – Jay