In Arbeit
Luminol, ein GLua-Deobfuskator
Ein C#-Tool, das verschleiertes Garry’s-Mod-Lua wieder in lesbaren Code verwandelt, zum Prüfen von Addons, bevor sie auf einen Server kommen.
- Rolle
- Entwurf und Umsetzung
- Stack
- C# 15, .NET 11, Loretta (Lua-Parser)
- Kontext
- Persönliches Security-Projekt
- Status
- In Arbeit
Das Problem
Verschleiertes Lua ist der übliche Ort, an dem sich Backdoors in Garry’s-Mod-Addons verstecken: versteckte Remote-Code-Ausführung, Payloads, die Adminrechte vergeben, Daten, die an fremde Server gesendet werden. Serverbetreiber installieren Addons, die sie nicht lesen können.
So funktioniert es
- Den Code mit Loretta in einen Syntaxbaum parsen; Loretta versteht die Erweiterungen, die Garry’s Mod zu Lua hinzufügt.
- In getrennten Pässen vereinfachen, jeder ein Syntaxbaum-Rewriter, den ich selbst schreibe: Konstanten und zusammengesetzte Strings zusammenfassen, die Decoder-Funktionen des Obfuskators inlinen, toten Code entfernen und bedeutungslosen Bezeichnern lesbare Namen geben.
- Nach jedem Pass die Ausgabe erneut parsen und neue Fehler melden, damit ein fehlerhafter Pass an dem Schritt auffällt, der ihn kaputt gemacht hat.
- Den bereinigten Code wieder ausgeben und dann auf verdächtiges Verhalten scannen, etwa das Ausführen von Code aus Strings, unerwartete HTTP-Anfragen oder das Ändern des Admin-Rangs eines Spielers.
- Optional, als allerletzten Schritt, ein KI-Modell um Vorschläge für lesbare Namen bitten. Der Quellcode wird als nicht vertrauenswürdige Eingabe behandelt: Kommentare werden entfernt, die Anfrage wird als maskierte Daten gesendet, es werden nur Namen zurückgenommen, und jeder zurückgegebene Name wird validiert, bevor er angewendet wird.
Screenshot folgt in Kürze
Verschleierte Eingabe neben der bereinigten Ausgabe.
assets/projects/glua-deobfuscator/before-after.webp (nebeneinander, gut lesbare Schriftgröße)
Screenshot folgt in Kürze
Die Terminal-Ausgabe der Sandbox: ein laufender Pass mit seinem Trace und dem hervorgehobenen Ergebnis.
assets/projects/glua-deobfuscator/pass-trace.webp (enger Zuschnitt auf das Terminal)
Wo es gerade steht
Jeden Pass prototypisiere ich in einer öffentlichen Sandbox, luminol-explore, und schreibe ihn dann sauber in Luminol neu. Die Sandbox enthält die Pass-Pipeline, einen Tracing-Rewriter, der jeden Schritt zeigt, und den ersten Pass, der String-Konkatenation zusammenfasst. Das Umbenennen kommt als Nächstes.
Das Ziel ist ein Kommandozeilen- und ein grafisches Werkzeug für Windows und Linux, mit dem man jeden Pass einzeln durchgehen und dabei Syntaxbaum und Code sich verändern sehen kann.
Umfang
Von Grund auf defensiv. Demonstrationen verwenden bekannte bösartige Samples und meine eigenen Testdateien, keine kommerziellen Addons.