Management Summary
Bei der CelSer Engine handelt es sich um einen Memory Editor – eine Software, die den virtuellen Speicher anderer Programme nach bestimmten Variablenspeicheradressen durchsucht. Sobald diese Adresse gefunden wurde, kann der Benutzer den Wert dieser Variable ändern. Die CelSer Engine durchsucht und manipuliert den virtuellen Speicher des Zielprogramms mit den Funktionen der WindowsAPI, wie beispielsweise VirtualQueryEx, NtQueryVirtualMemory, ReadProcessMemory und WriteVirtualMemory.
Neu hat der Benutzer die Möglichkeit, in einem Skript-Editor Skripte in C# zu schreiben, um bestimmte Tasks zu automatisieren. Hierzu sind verschiedene Funktionen implementiert, die der Benutzer im Skript-Editor benutzen kann, um die Speicheradressen zu manipulieren oder auszulesen.
Der Skript-Editor ist mit Syntax-Highlighting ausgestattet, um die Übersichtlichkeit und Fehlererkennung zu verbessern. Zudem bietet der Skript-Editor Auto-Completion für die von der CelSer Engine bereitgestellten Funktionen an. Die bereitgestellten Funktionen dienen dazu, den Benutzern das Schreiben der Skripte zu erleichtern.
Um Skripte organisieren zu können, ist eine Übersicht implementiert. In der Übersicht können einzelne Skripte erstellt, dupliziert, umbenannt, aktiviert oder deaktiviert und gelöscht werden. Skripte können zudem importiert und exportiert werden, um sie mit anderen Geräten oder Benutzern zu teilen. Die erstellten und importierten Skripte werden in einer lokalen SQLite-Datenbank gespeichert. Somit kann die CelSer Engine vorhandene Skripte automatisch anzeigen, wenn der Benutzer ein Programm anvisiert.
Für den Skript-Editor wird die AvalonEdit-Library verwendet. Diese bietet eine einfache Anpassung der Regeln für das Syntax-Highlighting und eine Auto-Completion. Um das Skript bzw. die Skriptlogik zur Laufzeit ausführen zu können, wird der Roslyn-Compiler verwendet. Eine Alternative diesbezüglich wurde angeschaut und evaluiert.
Ausgangslage
Die CelSer Engine ist ein Projekt, das aus einer Leidenschaft für das Reverse Engineering von Programmen entstanden ist. Sie ist mit der Programmiersprache C# und mit dem WPF-Framework implementiert und folgt dem MVVM-Pattern. Zudem nutzt die CelSer Engine eine Reihe von Windows-API Funktionen, wie beispielsweise VirtualQueryEx, NtQueryVirtualMemory, ReadProcessMemory und WriteVirtualMemory. Damit kann der virtuelle Speicher eines Zielprogramms gescannt werden, um dynamische Speicheradressen zu finden und deren Wert zu ändern. Zudem bietet sie einen, sich noch in einer Alpha-Phase befindenden, Pointerscanner. Mit dem Pointerscanner wird eine statische Speicheradresse gesucht, die auch nach einem Neustart des Zielprogramms auf die richtige Speicheradresse zeigt.
Problemstellung
Damit Benutzer Schritte in der CelSer Engine automatisieren können, braucht es eine Möglichkeit, Skripte zu schreiben, die auf gewisse Situationen reagieren. Dies könnte beispielsweise bei einem Shooter-Spiel das Nachladen der Waffe sein, wenn die Anzahl der Munitionen im Magazin weniger als 10 ist.
Ziel der Arbeit
Das Ziel dieser Arbeit ist die Entwicklung eines Scripting-Moduls, mit dem Benutzer Schritte in einem Zielprogramm einfach automatisieren können. Dabei wird die Benutzerfreundlichkeit besonders hervorgehoben, um sicherzustellen, dass auch Personen mit wenig Programmierkenntnissen einfache Skripte erstellen können. Dazu muss die CelSer Engine wie folgt erweitert werden.
• Einen Skript-Editor hinzufügen, um Skripte schreiben und bearbeiten zu können.
• Der Skript-Editor wird mit Syntax-Highlighting ausgestattet, um die Arbeit damit zu erleichtern.
• Der Benutzer soll Skripte importieren und exportieren können, um sie auf anderen Geräten oder mit anderen Benutzern zu teilen.
• Eine Übersicht mit den Skripten, die aktiviert und deaktiviert werden können, wird bereitgestellt.
• Die erstellten und importierten Skripte werden in einer lokalen Datenbank (SQLite) gespeichert, sodass sie automatisch geladen werden, sobald der Benutzer ein Programm auswählt.
• Skripte sind zu validieren. Wenn Skripte aktiviert werden, werden sie in der CelSer Engine validiert.
• In der Übersicht können Skripte für eine bessere Differenzierbarkeit benannt werden.
• Um den Benutzern das Schreiben von Skripten zu ermöglichen, werden eine Reihe von Funktionen bereitgestellt, wie beispielsweise eine Funktion, die eine Speicheradresse als Parameter akzeptiert und den Wert dieser Speicheradresse zurückgibt.
• Der Skript-Editor bietet Auto-Completion für die Funktionen, die von der CelSer Engine bereitgestellt werden.
• Es wäre wünschenswert, dass die Auto-Completion auch die reservierten Schlüsselwörter von C# berücksichtigt.
Wie geht es weiter?
Ich werde in Zukunft weiter an der CelSer Engine und an dem Scripting-Modul entwickeln und hoffe, dass ich, wie in dieser Arbeit, weiterhin vieles dazulernen kann. Dies ist die erste Version des Scripting-Moduls, aber sicherlich nicht die letzte. Mit dem Scripting-Modul wurden viele Voraussetzungen erfüllt, um weitere Aspekte zu automatisieren. In den kommenden Minor-Updates wird der Skript-Editor weiter verbessert und die vordefinierten Funktionen werden erweitert. Des Weiteren ist geplant, den Skript-Editor so zu verbessern, dass er beim Schliessen eine Warnung ausgibt, sofern Änderungen nicht gespeichert wurden. Es wäre auch hilfreich, den Status des Skripts in der Skript-Übersicht für den Benutzer anzuzeigen. Für die Major-Updates der CelSer Engine sind ein Packet Tracer und ein Binary-To-Assembly-Converter geplant. Der Packet Tracer dient dazu, die Pakete eines Zielprogramms zu analysieren. Dabei können Benutzer Skripte schreiben und auf gewisse Pakete reagieren oder sogar Pakete manipulieren. Der Binary-To-Assembly-Converter dient dazu, den Binärcode eines Zielprogramms in Assembler umzuschreiben, um die Vorgehensweise des Zielprogramms besser zu verstehen.