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

Deobfuscating von PHP- und JavaScript-Skripten

Zum Thema:


Eine der zuverlässigsten Methoden, um Skripte vor dem Lernen und Ändern zu schützen, ist heute die Verschleierung.

Verschleierung (lateinisch obfuscare, „shade, darken“) - Verschleierung des Programmcodes, dh Umwandlung des Quelltextes in eine Form, die die Funktionalität des Programms beibehält, aber die Analyse, das Verständnis der Betriebsalgorithmen und die Modifikation erschwert.

Im Gegensatz zur einzigartig 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-Obfuscatoren funktionieren 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, den Algorithmus auf einen Zustand zu "verfeinern", in dem 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 aufheben, erzwungene Werbung ausschneiden oder ähnliches.

Die erste Phase der Deobfuscation besteht in der Formatierung des Skripttexts, der Silbentrennung und der Ausrichtung des Codes mit einer praktischen "Leiter" zur Wahrnehmung. Dafür benutze ich zwei Tools. WaterProof Software hat ein kleines (weniger als 100 Kilobyte) kostenloses Programm zum Formatieren des PHP- Skriptcodes phpCodeBeautifier entwickelt . Zum Herunterladen von einem externen Standort ist eine kostenlose Registrierung erforderlich. Hier finden Sie einen Link zum direkten Herunterladen. Das Programm ist Konsole, Befehlszeilenparameter finden Sie in den Anweisungen aus dem Archiv. Für Windows-Fans gibt es eine GUI-Version, die zwar ä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 erhalten Sie ein schö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 Energie finden, um das Skript in eine vollwertige Anwendung umzuschreiben.

Beim Formatieren großer Skripte zeigt der Browser möglicherweise eine Meldung an, dass das Skript eingefroren ist, und bietet an, die Ausführung anzuhalten. Dies ist nicht erforderlich, nur die Verarbeitung dauert länger.

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

Wenn Variablennamen während der Verschleierung nicht ersetzt wurden, kann die Verschleierung 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 verfälscht sind, gehen wir zum zweiten Teil der Deobfuscation über. Hier gibt es leider keine fertigen Werkzeuge, na ja, oder zumindest habe ich sie nicht gesehen. Wenn jemand ein solches Tool kostenlos schreiben möchte, kann ich eine detaillierte technische Aufgabe bereitstellen. Wir müssen uns vorerst auf theoretische Berechnungen beschränken.

Seltsamerweise hört sich das an, 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 ist, dass wir verdorbene Namen extrahieren und sie durch bequemere zur 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 dabei nicht Service-Variablen wie die globalen Arrays $ _GET und $ _POST in PHP sowie reservierte Wörter in JavaScript. Sie müssen nicht bearbeitet werden. Um den Austausch effizienter zu gestalten, wird empfohlen, ihn nach dem Formatieren des Codes auszuführen.

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