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

Deobfuscation von PHP- und JavaScript-Skripten

Nach Thema:


Verschleierung ist eine der zuverlässigsten Methoden, um Skripts vor Lernen und Modifizieren zu schützen.

Verschleierung (von lateinisch obfuscare, "shadet, dim") - Verschränkung des Programmcodes, dh der Quelltext wird in eine Form gebracht, in der die Funktionalität des Programms erhalten bleibt, jedoch die Analyse, das Verständnis der Algorithmen und die Modifikation kompliziert werden.

Im Gegensatz zur eindeutig reversiblen Verschlüsselung und Verpackung ist die Verschleierung eine irreversible Maßnahme. Das bedeutet, dass der Skriptcode nicht in seiner ursprünglichen Form wiederhergestellt werden kann. Ausnahmslos funktionieren PHP- und JavaScript-Verschleierer auf zwei Arten: Zeilenumbrüche und unbedeutende Leerzeichen werden aus dem Quelltext entfernt, und die Namen von Klassen, Variablen und Funktionen werden durch eine bedeutungslose Menge von Zeichen ersetzt. Diese Aktionen können sowohl kombiniert als auch unabhängig voneinander ausgeführt werden.

Wie bereits gesagt, ist es bei Deobfuscation unmöglich, den Code in seine ursprüngliche Form zu bringen. Es ist jedoch durchaus möglich, ihn in einen solchen Zustand zu „adeln“, wenn man den Algorithmus leicht verstehen und die notwendigen Änderungen vornehmen kann. Zum Beispiel ist es nach Deobfuscation möglich, den Schutz einiger PHP-Skripts zu brechen, die Bindung von JavaScript an die Domäne zu entfernen, erzwungene Werbung auszuschließen oder etwas anderes.

Die erste Stufe der De-Verschleierung besteht in der Formatierung des Skripttextes, der Silbentrennung und der Ausrichtung des Codes mit einem leicht lesbaren "Ladder". Dafür verwende ich zwei Werkzeuge. Die Firma WaterProof Software hat ein kleines (weniger als 100 Kilobyte) kostenloses Programm zum Formatieren von PHP- Skriptcode phpCodeBeautifier entwickelt . Zum Herunterladen von ofsayt ist eine kostenlose Registrierung erforderlich, so dass hier ein direkter Link zum Download enthalten ist. Das Programm ist eine Konsole, Befehlszeilenparameter finden Sie in den Anweisungen aus dem Archiv. Für Fensterliebhaber gibt es eine GUI-Version, obwohl die ältere Version es ist, aber es ist durchaus möglich, eine Konsolendatei aus der neuesten Version anzuhängen.

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

Für das Formatieren von Skripten in JavaScript und HTML-Code gibt es einen wunderbaren Online-Service, Beautify Javascript . Fügen Sie einfach den Skripttext in das Formular ein, klicken Sie auf die Schaltfläche "Verschönern", und Sie erhalten ein schön formatiertes Skript. Der Einfachheit halber habe ich diese Seite leicht modifiziert und zu einer stationären Exe-Datei zusammengestellt. Vielleicht werde ich eines Tages die Zeit und Mühe finden, das Skript in einer vollständigen Anwendung neu zu schreiben.

Beim Formatieren umfangreicher Skripts zeigt der Browser möglicherweise eine Meldung an, dass das Skript eingefroren ist, und bietet an, die Ausführung zu stoppen. Sie müssen dies nicht tun, es dauert nur mehr Zeit für die Verarbeitung.

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

Wenn die Namen der Variablen während der Verschleierung nicht ersetzt wurden, kann die Deobfuscation nach dem Formatieren des Codes als abgeschlossen betrachtet werden. In jedem Fall wird das Skript viel lesbarer und verständlicher.

Wenn die Namen von Variablen und Funktionen beschädigt sind, fahren Sie mit dem zweiten Teil der Deobfuscation fort. Leider gibt es hier keine vorgefertigten Werkzeuge oder zumindest habe ich sie nicht getroffen. Wenn jemand spenden möchte, um ein solches Werkzeug zu schreiben, kann ich eine detaillierte technische Aufgabe stellen. Es ist zwar auf theoretische Berechnungen beschränkt.

So seltsam es klingen mag, aber für die Deobfuskation verwenden wir die gleichen Prinzipien wie für die Verschleierung. Die Namen aller Variablen werden aus allen Skripts extrahiert und durch andere ersetzt. Der einzige Unterschied besteht darin, dass wir die beschädigten Namen abrufen und für die Wahrnehmung durch günstigere ersetzen. Beispiel: $ kOObgZ4tf2LEaSmFfc555 (Obfusc) oder $ IIIIIIIIIIIl (PHP LockIt!) Ersetzen mit $ var_3 . Für ein einzelnes Skript kann dies in einem regulären Notizbuch mit globalem Ersatz ausgeführt werden. Bei mehreren Skripts müssen Sie zunächst alle Variablennamen aus allen Skripts extrahieren und erst dann einen globalen Ersatz durchführen. Vergessen Sie dabei nicht, Dienstvariablen vom Typ der globalen Arrays $ _GET und $ _POST in PHP sowie reservierte Wörter in JavaScript zu verwenden. Sie müssen nicht verarbeitet werden. Um das Ergebnis besser zu ersetzen, wird empfohlen, es nach dem Formatieren des Codes auszuführen.

Dieser Artikel beschreibt nur die allgemeinen Grundsätze der Deobfuskation, da in jedem Fall ein individueller Ansatz durchdacht und angewendet werden muss. In der Regel ist jedoch keine vollständige Deobfuskation erforderlich, um einen Hack- oder Analyse-Algorithmus einer separaten Funktion auszuführen.