Heim  >  Artikel  >  Backend-Entwicklung  >  Schritt-für-Schritt-Praktische Methode zur Wiederherstellung PHP-verschlüsselter Dateien

Schritt-für-Schritt-Praktische Methode zur Wiederherstellung PHP-verschlüsselter Dateien

藏色散人
藏色散人nach vorne
2021-03-05 13:49:113478Durchsuche

ps: Der Autor dient nur der technischen Kommunikation und hat keine böswilligen Absichten. Bitte missbrauchen Sie diese Technologie nicht.

Praktische Wiederherstellung von PHP-verschlüsselten Dateien

Lassen Sie uns zuerst über die Umgebung sprechen:

    Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-52-generic x86_64)
    PHP 5.5.9-1ubuntu4.19 (cli)

Praktischer Prozess

Ich habe ein verschlüsseltes Projekt und eine PHP-erweiterte dynamische Linkbibliothek (jinhou.so) zur Hand.

Der PHP-Code sieht wie folgt aus:

<?php /* xxxx技术有限公司版权所有: 2016-09-08 08:18:00 */
jhgo(&#39;uGpqefbDEBkqp4preQ2UaAp3RAUeJAZ5s4aERAQMkxbJTgEovHnQw6WxsA99sAhSacJCLGxZL4Q4u6zFyGveuDUoemktHGkMaB5D&#39;);
?>

Gemäß den oben analysierten bekannten Bedingungen:

1 Die Verschlüsselungsmethode ähnelt der Eval-Verschlüsselungsmethode.

2.jhgo enthält Ausführungscode und Entschlüsselungscode.

3.jinhou.so enthält die jhgo-Funktion.

Verwenden Sie zunächst VIM, um jinhou.so sehr grob zu öffnen, um festzustellen, ob wichtige Informationen vorhanden sind.

Schritt-für-Schritt-Praktische Methode zur Wiederherstellung PHP-verschlüsselter Dateien

Leider ist die Quelle der Lösung eindeutig angegeben. https://github.com/eixom/zoeeyguard

Nachdem wir uns den Code angesehen haben, stellt diese Erweiterung theoretisch zwei Methoden offen, eine zum Verschlüsseln von Dateien und eine zum Entschlüsseln von Dateien. Aber nur eine Methode wurde tatsächlich offengelegt, und eine davon wurde vom gerissenen Anbieter entfernt.

Natürlich haben wir den Quellcode bereits, daher kümmern wir uns nicht so sehr darum.

Ich habe versucht, es mit dem offiziellen Quellcode zu kompilieren und es dann zu dekodieren, und festgestellt, dass es immer noch nicht funktioniert.

Nachdem ich es sorgfältig studiert hatte, stellte ich fest, dass

Schritt-für-Schritt-Praktische Methode zur Wiederherstellung PHP-verschlüsselter Dateien

eine sehr magische Zeichenfolge enthielt: 82dsa7dsas32112389uy7aydh8h2h2i412 Ich fragte mich, ob es sein Verschlüsselungsschlüssel war. Nach erneutem Lesen des Codes stellte sich heraus, dass er wahr war. In der Datei https://github.com/eixom/zoeeyguard/blob/master/src/guard.h. 82dsa7dsas32112389uy7aydh8h2h2i412 心想是不是他的加密Key。再翻代码果真是。在 https://github.com/eixom/zoeeyguard/blob/master/src/guard.h 文件里面。
原来的是 28dsa7dsas12312389uy7aydh8h1h2i312Das Original ist 28dsa7dsas12312389uy7aydh8h1h2i312. Nachdem ich die Änderungen vorgenommen hatte, stellte ich fest, dass es immer noch nicht funktionierte.

Wie erwartet bin ich immer noch Too Young Too Simple.

Analyse aus der psychologischen Perspektive von Programmierern: Im Allgemeinen ändert niemand den Code, sondern im Grunde nur die Parameter. Gibt es weitere Parameter, die geändert wurden? Aber andere Parameter liegen im Array-Format vor, was Kopfschmerzen bereitet.

/*  private key */
#define PRIVATE_KEY "28dsa7dsas12312389uy7aydh8h1h2i312"
#define PRIVATE_KEY_LEN sizeof(PRIVATE_KEY)

/* order */
static const unsigned char OBFUSCATED_ORDER[] = {
      13,  6,  5,  7,  1, 15, 14, 20
    ,  9, 16, 19,  4, 18, 10,  2,  8
    , 12,  3, 11,  0, 17
};
#define ORDER_SIZE sizeof(OBFUSCATED_ORDER) / sizeof(* OBFUSCATED_ORDER)

/* alphabet for base64 */
static const unsigned char OBFUSCATED_ALPHABET[] = {
      's', '4', 'N', 'E', 'k', 'X', 'c', 'u'
    , 'J', '2', 'U', 'o', 'O', 'w', 'K', 'v'
    , 'h', 'H', 'C', '/', 'D', 'q', 'l', 'R'
    , 'B', 'r', '5', 'Z', 'S', 'Q', '6', 'W'
    , '3', 'L', 'j', '8', '1', 'z', '0', 'G'
    , 'n', 'e', 'y', 'b', 'I', 'd', 'i', 'P'
    , 'A', '9', '7', '+', 'm', 'V', 'M', 'Y'
    , 'F', 'g', 'f', 'p', 'a', 'T', 't', 'x'
};
#define ALPHABET_SIZE 64

Dies ist die Zeit, ein Killer-Tool herauszubringen: IDA Pro v6.8, ein Dekompilierungsartefakt. Die linke Seite ist die normale Version und die rechte Seite ist jinhou.so.

Schritt-für-Schritt-Praktische Methode zur Wiederherstellung PHP-verschlüsselter Dateien

Ändern Sie die Dateien in Guard.h basierend auf den Daten. Nach der Neukompilierung wurde es erfolgreich entschlüsselt.

<?php require_cache(APP_PATH.&#39;/Lib/Action/User/AddonAction.class.php&#39;);
?>

Zusammenfassung danach

1 Das Knacken dauerte nicht lange, vor allem dank der Tatsache, dass uns das Verschlüsselungsschema und der Verschlüsselungscode klar mitgeteilt wurden.
2. Die Hauptzeit besteht darin, die Verschlüsselungsparameter zu testen. Glücklicherweise ist die .so-Datei nicht gepackt.
3. Während des Cracking-Prozesses erfuhr ich auch von den Mängeln der PHP-Verschlüsselung.

【Empfohlenes Lernen: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSchritt-für-Schritt-Praktische Methode zur Wiederherstellung PHP-verschlüsselter Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen