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

Deobfuscation von PHP- und JavaScript-Skripten

Nach Thema:


Die Verschleierung ist eine der zuverlässigsten Methoden, um Skripte vor dem Studium und der Änderung zu schützen.

Verschleierung (aus dem Lateinischen. Obfuscare, "shade, dim") - Verschränkung des Programmcodes, dh der Quelltext wird in eine Form gebracht, die die Funktionalität des Programms beibehält, aber die Analyse, das Verständnis der Arbeits- und Änderungsalgorithmen erschwert.

Im Gegensatz zur eindeutig reversiblen Verschlüsselung und Verpackung ist die Verschleierung eine irreversible Aktion. Dies bedeutet, dass das Wiederherstellen des Skriptcodes in seiner ursprünglichen Form nicht möglich ist. Ausnahmslos funktionieren PHP- und JavaScript-Obfuscatoren auf zwei Arten: Zeilenumbrüche und unbedeutende Leerzeichen werden aus dem Quelltext entfernt, und die Namen von Klassen, Variablen und Funktionen werden durch bedeutungslose Zeichen ersetzt. Diese Aktionen können kombiniert und unabhängig voneinander ausgeführt werden.

Wie ich bereits sagte, ist es beim Deobfuscieren 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 der Deobfuscation möglich, den Schutz einiger PHP-Skripte aufzuheben, die Bindung von JavaScript an die Domain zu entfernen, eine erzwungene Werbung oder ähnliches auszuschneiden.

Die erste Stufe der Entschlüsselung besteht in der Formatierung des Skripttextes, der Silbentrennung und der Ausrichtung des Codes mit einer leicht lesbaren „Leiter“. Dafür benutze ich zwei Tools. WaterProof Software hat ein kleines (weniger als 100 Kilobyte) kostenloses Programm zum Formatieren von PHP-Code phpCodeBeautifier entwickelt . Für den Download von ofsayt ist eine kostenlose Registrierung erforderlich, damit hier bequem ein direkter Link zum Download zur Verfügung steht. Das Programm ist eine Konsole, Befehlszeilenparameter finden Sie in den Anweisungen aus dem Archiv. Für Fensterliebhaber gibt es eine GUI-Version, obwohl es die ältere ist, aber es ist durchaus möglich, eine Konsolendatei von der neuesten Version an diese anzuhängen.

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

Für die Formatierung von Skripten in JavaScript und HTML-Code gibt es einen wunderbaren Onlinedienst Beautify Javascript . Fügen Sie einfach den Skripttext in das Formular ein, klicken Sie auf die Schaltfläche "Verschönern" und erhalten Sie ein wunderschön formatiertes Skript. Der Einfachheit halber habe ich diese Seite leicht modifiziert und in eine stationäre exe-Datei kompiliert. Vielleicht werde ich eines Tages die Zeit und Mühe finden, das Skript in einer vollständigen Anwendung umzuschreiben.

Beim Formatieren von umfangreichen Skripten zeigt der Browser möglicherweise eine Meldung an, dass das Skript eingefroren ist, und bietet an, die Ausführung anzuhalten. Sie müssen dies nicht tun, die Verarbeitung dauert nur länger.

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

Wenn die Variablennamen während der Verschleierung nicht ersetzt wurden, kann die Verschleierung 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 fertigen Werkzeuge, oder zumindest habe ich sie nicht getroffen. Wenn jemand spenden möchte, um ein solches Tool zu schreiben, kann ich eine detaillierte technische Aufgabe bereitstellen. Dabei ist es notwendig, sich auf theoretische Berechnungen zu beschränken.

So seltsam es klingen mag, aber für die Deobfuscation verwenden wir dieselben Prinzipien wie für die Obfuscation. Die Namen aller Variablen werden aus allen Skripten extrahiert und durch andere ersetzt. Der einzige Unterschied besteht darin, dass wir die beschädigten Namen abrufen und durch bequemere zur Wahrnehmung ersetzen. Beispiel: $ kOObgZ4tf2LEaSmFfc555 (Obfusc) oder $ IIIIIIIIIIIl (PHP LockIt!) Ersetzen Sie durch $ var_3 . Bei einem einzelnen Skript kann dies in einem normalen Notizbuch mit globaler Ersetzung erfolgen, bei mehreren Skripten müssen Sie zuerst alle Variablennamen aus allen Skripten extrahieren und erst dann eine globale Ersetzung durchführen. Vergessen Sie dabei nicht die Servicevariablen des Typs der globalen Arrays $ _GET und $ _POST in PHP sowie reservierte Wörter in JavaScript. Sie müssen nicht bearbeitet werden. Um die durchgeführten besser zu ersetzen, wird empfohlen, dies nach dem Formatieren des Codes zu tun.

Dieser Artikel beschreibt nur die allgemeinen Prinzipien der Deobfuscation. In jedem Fall ist es notwendig, einen individuellen Ansatz zu überdenken und anzuwenden. In der Regel ist jedoch keine vollständige Deobfuskation erforderlich, um einen Hack- oder Parsing-Algorithmus für eine separate Funktion auszuführen.