


Universelle Methode zur Wiederherstellung verschlüsselter PHP-Dateien
Im vorherigen Artikel „Praktische Wiederherstellung von PHP-verschlüsselten Dateien“ wurde erwähnt, dass ich die Mängel der PHP-Methode zum Verschlüsseln von Dateien entdeckt habe, also habe ich diesen Artikel geschrieben.
Hintergrundanalyse
Wie wir alle wissen, ist PHP eine Skriptsprache, und Skriptsprachen verwenden hauptsächlich Interpretation statt Kompilierung. Im Vergleich zu kompilierten Sprachen (C, C#, C) ist es daher nicht möglich, ExedLL direkt zu generieren. Daher kann die herkömmliche Verschlüsselungsmethode nicht verwendet werden.
Daher gibt es in PHP im Allgemeinen zwei Verschlüsselungsmethoden: Verschleierung und Verschlüsselung.
Verschleierung ist keine Verschlüsselung im engeren Sinne. Diese Art von Code ähnelt dem Code, der Pinyin-Abkürzungen zur Benennung von Variablen verwendet, sieht jedoch etwas aufwändiger aus. Dies würde den Rahmen unserer Diskussion sprengen.
Die Verschlüsselung erfolgt auf zwei Arten: zum einen mit der Erweiterung (Loader). Das andere ist keine Erweiterung.
Lassen Sie uns zunächst über die Verschlüsselungsmethode ohne Erweiterung sprechen. Diese Verschlüsselungsmethode ist sehr hirnlos, da ihr Entschlüsselungsprozess öffentlich ist und die Verwendung bekannter PHP-Funktionen erfordert. Der verschlüsselte Code sieht im Allgemeinen wie folgt aus:
<?phpeval(base64_decode("cGhwaW5mbygpOw=="));
Auch wenn es sehr kompliziert aussieht:
ist nur eine Variation des oben Gesagten. Dieses Entschlüsselungsformular ist sehr leicht zu knacken, wenn es offengelegt wird. Suchen Sie einfach nach eval und ändern Sie es in echo.
Die andere Erweiterungsmethode ist komplizierter. Die Funktion der Erweiterung besteht hier hauptsächlich darin, den Code zu entschlüsseln und auszuführen. Im Vergleich zur Nicht-Erweiterungsform verbirgt sie den Entschlüsselungs- und Ausführungscode in der Erweiterung, sodass das Knacken komplizierter ist.
Die Erweiterungen werden hier im Allgemeinen in zwei Typen unterteilt: 1. Diejenigen, die Entschlüsselungsausführungsfunktionen bereitstellen. 2. Überschreiben Sie zend_compile_file direkt, um die Funktion zum Parsen benutzerdefinierter PHP-Dateien zu implementieren.
Das erste und typischste Beispiel ist der in meinem letzten Artikel erwähnte Zoeeyguard, der hauptsächlich die Funktion zend_eval_string zum Ausführen von PHP-Code verwendet.
Zur zweiten Art von Vertretern gehören: Zend Guard und Song Ge’s PHP-Beast.
Man kann sagen, dass die beiden Crack-Ideen ähnlich sind. Sie können dem Ausprobieren der Ideen in meinem vorherigen Artikel Vorrang einräumen.
Was wäre natürlich, wenn ich das Problem in meinem vorherigen Artikel nicht gelöst hätte?
Zu diesem Zeitpunkt müssen Sie eine große Killerwaffe verwenden.
Sie werden feststellen, dass ich im vorherigen Artikel über die beiden Funktionen zend_compile_file und zend_eval_string gesprochen habe. Einige kluge PHPer haben bereits darüber nachgedacht, ja! Die Idee besteht immer noch darin, eval zu finden und in echo zu ändern.
Praxisbeispiele
Wir können nicht einfach reden, ohne etwas zu tun. Nehmen wir ein Beispiel:
Dieses Mal beginnen wir mit dem PHP-Beast von Brother Song. Der Code von Bruder Song ist sehr schön geschrieben. Da er wusste, dass die AES-DES-Entschlüsselung Zeit braucht, hat er einen Cache geschrieben.
1. Laden Sie das PHP-Quellcodepaket für Linux herunter (am besten wählen Sie eines zwischen 5.6 und 5.5. 7 wird nicht unterstützt. Übrigens: Die Änderungen in 7 sind ziemlich groß. Viele Dinge sind nicht kompatibel. Zend Guard ist auch 7 wird hier nicht unterstützt.)
2. Finden Sie die Funktion in der Datei Zendzend_lingual_scanner.c: zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC). Folgendes: Fügen Sie den Code vor (der Code ist schlecht geschrieben, beschweren Sie sich nicht):
ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) { zend_lex_state original_lex_state; zend_op_array *op_array = (zend_op_array *) emalloc(sizeof(zend_op_array)); zend_op_array *original_active_op_array = CG(active_op_array); zend_op_array *retval=NULL; int compiler_result; zend_bool compilation_successful=0; znode retval_znode; zend_bool original_in_compilation = CG(in_compilation); /** BEGIN **/ //加在这里的含义就是每次php编译php源码的时候都把这份源码打印一份 char *buf; size_t size; zend_stream_fixup(file_handle, &buf, &size); printf("\n#######\nFILE TYPE: %d FILE NAME: %s CONTENT: %s\n#######\n", (*file_handle).type, (*file_handle).filename, buf); /** END **/
Im PHP-Ordner ausführen:
//节省点时间 ./configure --disable-ipv6 --disable-all make make install
4 , PHP wurde erfolgreich installiert.
5. Wir schreiben zwei Testdateien: Die Funktion lautet: test.php führt sie aus, um before.php zu verschlüsseln und after.php zu generieren.
//test.php <?php $path = __DIR__ . '/before.php'; $newPath = __DIR__ . '/after.php'; $result = beast_encode_file($path, $newPath, 0, BEAST_ENCRYPT_TYPE_DES); var_dump($result);
//before.php <?php print 'http://wx-app.com.cn/' . PHP_EOL;
7. Führen Sie die folgende PHP-Datei test.php und dann php after.php aus.
Sehen Sie sich die Screenshots unten an:
Zusammenfassung
1. Es gibt kein Passwort, das nicht gebrochen werden kann. Wir können lediglich die Crackzeit verlängern. Wenn die Knackzeit größer ist als die Lebensspanne eines Menschen, dann ist diese Verschlüsselungsmethode durchaus erfolgreich.
2. So wie der Cracker bei verschlüsselten Programmen das Denken des Autors verstehen und erraten muss, muss der Autor auch die Methoden und Mittel des Crackers verstehen. Nur so können wir Programme schreiben, die schwieriger zu knacken sind.
3. Im Vergleich zur Verschlüsselung ist die Verschleierung meiner Meinung nach besser für die „Verschlüsselung“ des PHP-Quellcodes geeignet.
4. Wenn Sie Ihren PHP-Code verschlüsseln und veröffentlichen möchten, ist es am besten, die Gebühr zu erhöhen und den Quellcode direkt bereitzustellen.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
