PHP: Décrypter des fichiers encryptés par SourceCop
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 :
<?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 :
?> 1280880000) ? exit('Script Expired') : ''; ?>
Pas très malin...