Méthode pratique étape par étape pour restaurer les fichiers cryptés PHP

藏色散人
Libérer: 2023-04-09 19:38:02
avant
3500 Les gens l'ont consulté

ps : L'auteur n'est qu'une communication technique et n'a aucune intention malveillante. Veuillez ne pas abuser de cette technologie.

Restauration pratique des fichiers cryptés PHP

Parlons d'abord de l'environnement :

    Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-52-generic x86_64)
    PHP 5.5.9-1ubuntu4.19 (cli)
Copier après la connexion

Démarche pratique

J'ai un projet chiffré et une bibliothèque de liens dynamiques étendue PHP (jinhou.so) sous la main.

Le code PHP ressemble à ce qui suit :

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

Selon les conditions connues analysées ci-dessus :

1. La méthode de cryptage est similaire à la méthode de cryptage eval.

2.jhgo contient le code d'exécution et le code de décryptage.

3.jinhou.so contient la fonction jhgo.

Tout d'abord, utilisez VIM pour ouvrir jinhou.so très grossièrement pour voir s'il y a des informations clés.

Méthode pratique étape par étape pour restaurer les fichiers cryptés PHP

Malheureusement, la source de la solution est clairement écrite. https://github.com/eixom/zoeeyguard

Après avoir examiné le code, théoriquement, cette extension expose deux méthodes, une pour chiffrer les fichiers et une pour déchiffrer les fichiers. Mais une seule méthode a été réellement exposée, et une autre a été supprimée par le fournisseur astucieux.

Bien sûr, nous avons déjà le code source, donc nous ne nous en soucions pas tellement.

Essayez de le compiler avec le code source officiel, puis décodez-le et constatez qu'il ne fonctionne toujours pas.

Après l'avoir étudié attentivement, j'ai découvert que

Méthode pratique étape par étape pour restaurer les fichiers cryptés PHP

contenait une chaîne très magique : 82dsa7dsas32112389uy7aydh8h2h2i412 Je me demandais si c'était sa clé de cryptage. Après avoir relu le code, il s'est avéré que c'était vrai. À l'intérieur du fichier https://github.com/eixom/zoeeyguard/blob/master/src/guard.h.
L'original est 28dsa7dsas12312389uy7aydh8h1h2i312. Après avoir effectué les modifications, j'ai constaté que cela ne fonctionnait toujours pas.

Comme prévu, je suis encore Trop Jeune, Trop Simple.

Analyse du point de vue psychologique des programmeurs : généralement, personne ne changera le code, il suffit de changer les paramètres. Y a-t-il d'autres paramètres qui ont été modifiés ? Mais d’autres paramètres sont sous forme de tableau, ce qui est un casse-tête.

/*  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
Copier après la connexion

À ce stade, vous devez utiliser un outil qui tue : IDA Pro v6.8, un artefact de décompilation. La gauche est la version normale et la droite est jinhou.so.

Méthode pratique étape par étape pour restaurer les fichiers cryptés PHP

Modifiez les fichiers dans guard.h en fonction des données. Après recompilation, il a été déchiffré avec succès.

<?php require_cache(APP_PATH.&#39;/Lib/Action/User/AddonAction.class.php&#39;);
?>
Copier après la connexion

Résumé après

1 Ce cracking n'a pas pris beaucoup de temps, principalement grâce au fait que le schéma de cryptage et le code de cryptage nous ont été clairement indiqués.
2. Le moment principal est de tester les paramètres de chiffrement. Heureusement, le fichier .so n'est pas compressé.
3. Au cours du processus de craquage, j'ai également découvert les failles du cryptage PHP.

[Apprentissage recommandé : Tutoriel vidéo PHP]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!