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

Deobfuscating PHP- und JavaScript-Skripte

Zum Thema:


Eine der zuverlässigsten Möglichkeiten, Skripte heute vor Lernen und Änderungen zu schützen, ist die Verschleierung.

Verschleierung (aus dem Lateinischen obfuscare, „schattieren, verdunkeln“) - Verschleierung 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 Operationsalgorithmen und die Änderung erschwert.

Im Gegensatz zur eindeutig reversiblen Verschlüsselung und Verpackung ist die Verschleierung eine irreversible Aktion. Dies bedeutet, dass es nicht möglich ist, den Skriptcode in seiner ursprünglichen Form wiederherzustellen. Alle PHP- und JavaScript-Verschleierer arbeiten ausnahmslos auf zwei Arten: Zeilenumbrüche und unbedeutende Leerzeichen werden aus dem Quelltext entfernt und die Namen von Klassen, Variablen und Funktionen werden durch einen bedeutungslosen Zeichensatz ersetzt. Diese Aktionen können kombiniert oder unabhängig voneinander ausgeführt werden.

Wie ich bereits sagte, ist es während der Deobfuscation unmöglich, den Code wieder in seine ursprüngliche Form zu bringen. Es ist jedoch durchaus möglich, es in einen solchen Zustand zu „veredeln“, wenn es möglich ist, den Algorithmus leicht zu verstehen und die erforderlichen Änderungen vorzunehmen. Beispielsweise können Sie nach der Deobfuscation den Schutz einiger PHP-Skripte aufheben, die Bindung von JavaScript an die Domain entfernen, erzwungene Werbung ausschneiden oder ähnliches.

Die erste Stufe der Deobfuscation ist die Formatierung des Skripttextes, die Silbentrennung und die Ausrichtung des Codes mit einer praktischen "Leiter" zur Wahrnehmung. Dafür benutze ich zwei Werkzeuge. WaterProof Software hat ein kleines (weniger als 100 Kilobyte) kostenloses Programm zum Formatieren des PHP- Skriptcodes von phpCodeBeautifier entwickelt . Um es von einem externen Standort herunterzuladen, ist eine kostenlose Registrierung erforderlich. Hier finden Sie einen direkten Download-Link. Das Programm ist eine Konsole. Befehlszeilenparameter finden Sie in den Anweisungen aus dem Archiv. Für Windows-Liebhaber gibt es eine GUI-Version, obwohl diese älter ist. Sie können jedoch eine Konsolendatei der neuesten Version anhängen.

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

Es gibt einen großartigen Online- Beautify-Javascript- Dienst zum Formatieren von JavaScript-Skripten und HTML-Code. Fügen Sie einfach den Skripttext in das Formular ein, klicken Sie auf die Schaltfläche "Verschönern" und Sie erhalten ein wunderschön formatiertes Skript. Der Einfachheit halber habe ich diese Seite leicht modifiziert und zu einer stationären Exe-Datei zusammengestellt. Vielleicht finde ich eines Tages die Zeit und Energie, um das Skript in eine vollwertige Anwendung umzuschreiben.

Beim Formatieren großer Skripte zeigt der Browser möglicherweise die Meldung an, dass das Skript eingefroren ist, und bietet an, die Ausführung zu stoppen. Dies ist nicht erforderlich, nur die Verarbeitung nimmt mehr Zeit in Anspruch.

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

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

Wenn die Namen von Variablen und Funktionen verdorben sind, gehen wir zum zweiten Teil der Deobfuscation über. Hier gibt es leider keine vorgefertigten Werkzeuge, oder zumindest habe ich sie nicht gesehen. Wenn jemand ein solches Tool kostenlos schreiben möchte, kann ich eine detaillierte technische Aufgabe bereitstellen. Im Moment müssen wir uns auf theoretische Berechnungen beschränken.

Seltsamerweise klingt dies, aber für die Deobfuscation verwenden wir dieselben Prinzipien wie für die Verschleierung. Die Namen aller Variablen werden aus allen Skripten extrahiert und durch andere ersetzt. Der einzige Unterschied besteht darin, dass wir verdorbene Namen extrahieren und durch bequemere Namen für die Wahrnehmung ersetzen. Zum Beispiel $ kOObgZ4tf2LEaSmFfc555 (Obfusc) oder $ IIIIIIIIIIIIIIl (PHP LockIt!) Ersetzt durch $ var_3 . Bei einem einzelnen Skript kann dies in einem normalen Notizblock 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 gleichzeitig nicht Servicevariablen wie die globalen Arrays $ _GET und $ _POST in PHP sowie reservierte Wörter in JavaScript. Sie müssen nicht verarbeitet werden. Um den Austausch effizienter zu gestalten, wird empfohlen, ihn nach dem Formatieren des Codes durchzuführen.

Dieser Artikel beschreibt nur die allgemeinen Prinzipien der Deobfuscation. In jedem Fall ist es notwendig, einen individuellen Ansatz zu überdenken und anzuwenden. Normalerweise ist jedoch keine vollständige Deobfuscation erforderlich, um einen Algorithmus einer bestimmten Funktion zu hacken oder zu analysieren.