This page has been robot translated, sorry for typos if any. Original content here.

Deobfuscating von PHP- und JavaScript-Skripten

Nach Thema:


Eine der zuverlässigsten Methoden zum Schutz von Skripten vor der Untersuchung und Modifikation ist die Verschleierung.

Obfuscation (aus dem lateinischen obfuscare, "shade, darken") - Verschränkung des Programmcodes, dh der Quelltext wird in eine Form gebracht, die die Funktionalität des Programms bewahrt, aber die Analyse, das Verständnis der Algorithmen und die Modifikation erschwert.

Im Gegensatz zu eindeutig umkehrbarer Verschlüsselung und Verpackung ist Verschleierung eine irreversible Aktion. Dies bedeutet, dass es nicht möglich ist, den Skriptcode in das ursprüngliche Formular wiederherzustellen. Ohne Ausnahme arbeiten PHP- und JavaScript-Obfuscatoren auf zwei Arten: Vom Quelltext werden Zeilenumbrüche und Nebenräume entfernt und die Namen von Klassen, Variablen und Funktionen werden durch einen bedeutungslosen Satz von Zeichen ersetzt. Diese Aktionen können unabhängig voneinander kombiniert und durchgeführt werden.

Wie ich bereits sagte, ist es mit Entschweifung unmöglich, den Code in seine ursprüngliche Form zu bringen. Es ist jedoch durchaus möglich, es auf einen solchen Zustand zu "verfeinern", dass Sie den Algorithmus leicht verstehen und die notwendigen Änderungen vornehmen können. Zum Beispiel können Sie nach der Deobfuskation den Schutz einiger PHP-Skripte brechen, die JavaScript-Bindung an die Domain entfernen, die obligatorische Werbung ausschneiden oder etwas Ähnliches.

Die erste Stufe der Deobfuskation ist die Formatierung des Texts des Skripts, die Silbentrennung, die Ausrichtung des Codes, der mit "Leiter" leicht zu lesen ist. Dafür benutze ich zwei Werkzeuge. Die Firma WaterProof Software hat ein kleines (weniger als 100 Kilobytes) kostenloses Programm zur Formatierung des PHP-Codes phpCodeBeautifier entwickelt . Für den Download von Offsite ist eine kostenlose Registrierung erforderlich. Hier finden Sie den direkten Link zum Download. Das Programm ist Konsole, die Kommandozeilenparameter können in den Anweisungen aus dem Archiv eingesehen werden. Für Fans der Fenster gibt es eine GUI-Version, obwohl die ältere, aber es ist durchaus möglich, eine Konsolendatei von der neuesten Version zu installieren.

Деобфускация скриптов PHP и JavaScript

Für die Formatierung von Skripten in JavaScript und HTML-Code gibt es einen wunderbaren Online-Dienst Beautify Javascript . Fügen Sie einfach den Text des Skripts in das Formular ein, klicken Sie auf die Schaltfläche "Verschönern" und Sie erhalten ein wunderschön formatiertes Skript. Zur Vereinfachung habe ich diese Seite leicht in eine stationäre exe-Datei geändert und kompiliert. Vielleicht werde ich eines Tages die Zeit und Energie finden, das Skript in eine vollwertige Anwendung umzuwandeln.

Wenn Sie große Skripts formatieren, kann der Browser eine Meldung anzeigen, dass das Skript eingefroren ist, und Sie werden aufgefordert, das Skript zu beenden. Sie müssen dies nicht tun, es dauert mehr Zeit zu verarbeiten.

Деобфускация скриптов PHP и JavaScript

Wenn die Verschleierung die Namen von Variablen nicht ersetzt, kann die Deobfuskation nach der Formatierung des Codes als abgeschlossen betrachtet werden. In jedem Fall ist das Skript schon viel lesbarer und verständlicher

Wenn die Namen von Variablen und Funktionen beschädigt sind, gehen Sie zum zweiten Teil der Deobfuskation. Hier gibt es leider keine fertigen Werkzeuge, oder zumindest habe ich sie nicht getroffen. Wenn jemand das Schreiben eines solchen Tools kostenlos aufnehmen möchte, kann ich eine detaillierte technische Aufgabe stellen. Es ist zwar auf theoretische Berechnungen zu beschränken.

Seltsam, wie es sich anhört, aber für Enttäuschung werden wir dieselben Prinzipien anwenden wie für Verschleierung. Aus allen Skripten werden die Namen aller Variablen extrahiert und durch andere ersetzt. Der einzige Unterschied besteht darin, dass wir die verwöhnten Namen extrahieren und durch bequemere ersetzen. Zum Beispiel wird $ kOObgZ4tf2LEaSmFfc555 (Obfusc) oder $ IIIIIIIIIIIl (PHP LockIt!) Durch $ var_3 ersetzt . Für ein einzelnes Skript können Sie dies in einem normalen Notizblock mit einem globalen Ersatz tun. Bei mehreren Skripten müssen Sie zunächst alle Variablennamen aus allen Skripten extrahieren und erst dann einen globalen Ersatz ausführen. Vergessen Sie nicht die Utility-Variablen wie die globalen Arrays $ _GET und $ _POST in PHP sowie reservierte Wörter in JavaScript. Sie müssen nicht verarbeitet werden. Damit der Austausch qualitativ besser ausgeführt werden kann, empfiehlt es sich, den Code nach der Formatierung auszuführen.

Dieser Artikel beschreibt nur die allgemeinen Prinzipien der Deobfuskation, für jeden Fall wird es notwendig sein, einen individuellen Ansatz zu denken und anzuwenden. Normalerweise ist es jedoch nicht notwendig, vollständig zu bereinigen, um einen Algorithmus auszuführen, der eine einzelne Funktion knackt oder analysiert.