PHP: Décrypter des fichiers encryptés par SourceCop

by Joris on juillet 22, 2010

php-logo

Ok, rien de bien nouveau puisque la nouvelle est déjà assez répandue. Je ne ferais que confirmer que cette technique fonctionne encore très bien puisque que pas mal d’applications (genre jqGrid) « protègent » encore leur source.

Je me suis inspiré de cet article pour écrire le miens sauf que je vais outre-passer les explications, je me contenterais seulement de vous montrer comment décrypter un fichier SourceCop rapidement.

Procédure

Bon alors très rapidement, si vos scripts sont protégés avec SourceCop, vous devriez avoir un dossier scopbin au milieux de vos fichiers PHP. Dedans le fichier 911006.php qui contient l’algorithme de décryptage.

Ce fichier a été lui-même compressé/crypté afin d’éviter au développeur débutant de le modifier trop aisément. Utilisez un outil « tidy-like » pour l’indenter correctement et en PHP, cet outil est PHP_Beautifier.

Une fois installé, on traite le fichier :

php_beautifier --output .911006.php -f 911006.php
mv -f .911006.php 911006.php

On obtient donc bien le fichier 911006.php correctement indenté.
Pour obtenir la source de vos fichiers encrypté, il suffira de modifier à peine la fonction y0666f0acdeed38d4cd9084ade1739498() comme ainsi :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function y0666f0acdeed38d4cd9084ade1739498($x897356954c2cd3d41b221e3f24f99bba, $x276e79316561733d64abdf00f8e8ae48) {
    $x0b43c25ccf2340e23492d4d3141479dc = '';
    $x71510c08e23d2083eda280afa650b045 = 0;
    $x16754c94f2e48aae0d6f34280507be58 = strlen($x897356954c2cd3d41b221e3f24f99bba);
    $x7a86c157ee9713c34fbd7a1ee40f0c5a = hexdec('&H' . substr($x276e79316561733d64abdf00f8e8ae48, 0, 2));
    for ($x1b90e1035d4d268e0d8b1377f3dc85a2 = 2;$x1b90e1035d4d268e0d8b1377f3dc85a2 < strlen($x276e79316561733d64abdf00f8e8ae48);$x1b90e1035d4d268e0d8b1377f3dc85a2+= 2) {
        $xe594cc261a3b25a9c99ec79da9c91ba5 = hexdec(trim(substr($x276e79316561733d64abdf00f8e8ae48, $x1b90e1035d4d268e0d8b1377f3dc85a2, 2)));
        $x71510c08e23d2083eda280afa650b045 = (($x71510c08e23d2083eda280afa650b045 < $x16754c94f2e48aae0d6f34280507be58) ? $x71510c08e23d2083eda280afa650b045 + 1 : 1);
        $xab6389e47b1edcf1a5267d9cfb513ce5 = $xe594cc261a3b25a9c99ec79da9c91ba5 ^ ord(substr($x897356954c2cd3d41b221e3f24f99bba, $x71510c08e23d2083eda280afa650b045 - 1, 1));
        if ($xab6389e47b1edcf1a5267d9cfb513ce5 <= $x7a86c157ee9713c34fbd7a1ee40f0c5a) $xab6389e47b1edcf1a5267d9cfb513ce5 = 255 + $xab6389e47b1edcf1a5267d9cfb513ce5 - $x7a86c157ee9713c34fbd7a1ee40f0c5a;
        else $xab6389e47b1edcf1a5267d9cfb513ce5 = $xab6389e47b1edcf1a5267d9cfb513ce5 - $x7a86c157ee9713c34fbd7a1ee40f0c5a;
        $x0b43c25ccf2340e23492d4d3141479dc = $x0b43c25ccf2340e23492d4d3141479dc . chr($xab6389e47b1edcf1a5267d9cfb513ce5);
        $x7a86c157ee9713c34fbd7a1ee40f0c5a = $xe594cc261a3b25a9c99ec79da9c91ba5;
    }
 
    // On ajoute ici un petit echo
    echo $x0b43c25ccf2340e23492d4d3141479dc;
    // Et on stop le programme
    exit;
 
    return $x0b43c25ccf2340e23492d4d3141479dc;
}
?>

Et après, banzaï, on récupère la source de tous nos fichiers comme des brutes :

php encrypte.php > .enctrypte.php
php_beautifier --output encrypte.php -f .encrypte.php

Et voilà, vous avez vos fichiers décryptés. Faites attention parce qu’il y a un ?> en trop au début de chaque fichier.
Par exemple, pour jqGrid, on trouve ce genre de code pour la première ligne :

?><?php (time() > 1280880000) ? exit('Script Expired') : ''; ?><?php class jqGrid {

Pas très malin…

8 comments

Alors je te dis Super Super Merci pour ton astuce,
comme tout le monde qui utilisait jqgrid après un mois d’utilisation, je me trouve bloqué devant « Script Expired ».

je te remercie infiniment

by Qooxdoo on 05/12/2010 at 21:30. #

Hello,

Merci pour ce post, je comprends pas l’étape:

php encrypte.php > .enctrypte.php
php_beautifier --output encrypte.php -f .encrypte.php

Ou tu arrives à décrypter les fichiers php…. est ce que tu peux développer un peu plus…

KM

by Khalid on 20/01/2011 at 15:53. #

Ba moi, je me suis fais mon ptit moteur qui deioncube, dezend( et meme deobfusce les variables) et bien d’autres encore ;)

Je pense qu’il y a des manières plus simple encore de décrypter ;)

Mais simpa l’article ;)

by Superbenoit on 10/04/2011 at 18:56. #

@Superbenoit

L’idéal serait de partager dans ce cas-là ;-)

by Joris on 14/04/2011 at 14:29. #

Bonjour à tous

Pareil que Khalid, je ne comprends pas la partie

php encrypte.php > .enctrypte.php
php_beautifier –output encrypte.php -f .encrypte.php

Surtout la première ligne, quel est ce fichier encrypte.php ?

Merci

by krakkos on 23/06/2011 at 15:19. #

@krakkos @Khalid

La première ligne permet d’exécuter le fichier PHP chiffré (le code source du fichier que nous souhaitons déchiffrer) en SAPI CLI, et étant donné que nous avons modifié la fonction de déchiffrage pour afficher le code déchiffré au lieu de le retourner afin qu’il soit évalué, on écrit le résultat (le code source déchiffré) dans le fichier .enctrypte.php.

On utilise ensuite PHP_Beautifier pour indenter correctement le code source afin qu’il soit lisible :)

by Joris on 23/06/2011 at 15:55. #

php encrypte.php > .enctrypte.php
php_beautifier –output encrypte.php -f .encrypte.php

y a une petite erreur avant non?

dans l etape 1 c est marqué :
php_beautifier –output .911006.php -f 911006.php
mv -f .911006.php 911006.php

ca serait pas plutot ?:
php_beautifier –output .911006.php -f 911006.php
mv -f .911006.php encrypte.php

un truc du genre?

by eliemaman on 19/12/2011 at 11:37. #

j ai reussi ce matin merci bcp.

by eliemaman on 20/12/2011 at 11:42. #

Leave your comment

Not published