 |
|
Page 1 sur 2
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Posté le: Mar Aoû 03, 2010 3:21 pm Sujet du message: Obfuscation php |
|
|
TorTukiTu
Site Admin

Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message |
Bien le bonjour.
Voici une petite classe sans prétention que je viens d'écrire vous permettant d'obfusquer partiellement une source php. c'est un code assez intéressant, car contenant énormément de regex et d'appels à des fonction récursives.
Je mettrai la classe Ă jour au fur et Ă mesure.
Voici un script avant:
 |
 |
<?php
include "myClass.php";
include "../../../../config.php";
function voici_Une_Chaine_Compliquee($chaine){
return $chaine;
}
$encodedStr="turlichon";
include "../../config.php";
mysql_connect($database_host, $database_username, $database_password);
mysql_select_db($database_name);
$str[0]='"'.$encodedStr.'"';
$str[2]+=2;
$user_id=35;
voici_Une_Chaine_Compliquee("/\"/");
$sql="SELECT * FROM users WHERE userid='$user_id'";
$instance=new classTest1();
$instance->tralala();
echo $turlututu;
/**
* Voici une superbe page bien commentee
*/
echo "VAR=".$var."ENDVAR";
$turlututu="caca";
//include "../../../config.php";
// Une variable
$une_variable=0;
$une_variable2=1;
# Un commentaire
$name=$_GET['une_variable_test1'];
$name34=$name;
$name34;
echo "NOTRE VARIABLE TEST=".$name;
echo "Bienvenue sur mon super site!";
echo "VAR THAT HAS NOT TO BE CHANGED:".$database_host."<br>";
?>
<div>
PAGE A OBFUSQUER
<img src="une belle image de tortue">
</div>
<?
echo "Voici la page a obfusquer. Il s'agit de la suite de nombre de 1 a 10";
for($i=0; $i<10;$i++){
echo "Votre nombre est:$i \n";
}
?>
|
Et après obfuscation:
 |
 |
<?php include"\x6d\x79\x43\x6c\x61\x73\x73\x2e\x70\x68\x70";include"\x2e\x2e\x2f\x2e\x2e\x2f\x2e\x2e\x2f\x2e\x2e\x2f\x63\x6f\x6e\x66\x69\x67\x2e\x70\x68\x70";function voici_Une_Chaine_Compliquee($rexqzdhgsp){ return $rexqzdhgsp;} $jrjpluwuey="\x74\x75\x72\x6c\x69\x63\x68\x6f\x6e";include"\x2e\x2e\x2f\x2e\x2e\x2f\x63\x6f\x6e\x66\x69\x67\x2e\x70\x68\x70";mysql_connect($database_host,$database_username,$database_password);mysql_select_db($database_name);$tfuyxmzdws[0]="\x22".$jrjpluwuey."\x22";$tfuyxmzdws[2]+=(-25 +91 - 64);$bkomqbmwzz=(-33 +86 - 18);voici_Une_Chaine_Compliquee("\x2f\x5c\x22\x2f");$pmvliljjsh="\x53\x45\x4c\x45\x43\x54\x20\x2a\x20\x46\x52\x4f\x4d\x20\x75\x73\x65\x72\x73\x20\x57\x48\x45\x52\x45\x20\x75\x73\x65\x72\x69\x64\x3d\x27$bkomqbmwzz\x27";$ibedyjspxp=new classTest1();$ibedyjspxp->tralala();echo $riwhqmxurr;echo"\x56\x41\x52\x3d".$utkriegwwz."\x45\x4e\x44\x56\x41\x52";$riwhqmxurr="\x63\x61\x63\x61";$pciuepeqei=(48 +17 - 65);$kejonlydkb=(40 +49 - 88);$qlodrizgsb=$_GET["\x75\x6e\x65\x5f\x76\x61\x72\x69\x61\x62\x6c\x65\x5f\x74\x65\x73\x74\x31"];$cmboyljdxg=$qlodrizgsb;$cmboyljdxg;echo"\x4e\x4f\x54\x52\x45\x20\x56\x41\x52\x49\x41\x42\x4c\x45\x20\x54\x45\x53\x54\x3d".$qlodrizgsb;echo"\x42\x69\x65\x6e\x76\x65\x6e\x75\x65\x20\x73\x75\x72\x20\x6d\x6f\x6e\x20\x73\x75\x70\x65\x72\x20\x73\x69\x74\x65\x21";echo"\x56\x41\x52\x20\x54\x48\x41\x54\x20\x48\x41\x53\x20\x4e\x4f\x54\x20\x54\x4f\x20\x42\x45\x20\x43\x48\x41\x4e\x47\x45\x44\x3a".$database_host."\x3c\x62\x72\x3e";?>
<div>
PAGE A OBFUSQUER
<img src="une belle image de tortue">
</div>
<? echo"\x56\x6f\x69\x63\x69\x20\x6c\x61\x20\x70\x61\x67\x65\x20\x61\x20\x6f\x62\x66\x75\x73\x71\x75\x65\x72\x2e\x20\x49\x6c\x20\x73\x27\x61\x67\x69\x74\x20\x64\x65\x20\x6c\x61\x20\x73\x75\x69\x74\x65\x20\x64\x65\x20\x6e\x6f\x6d\x62\x72\x65\x20\x64\x65\x20\x31\x20\x61\x20\x31\x30";for($wralhlsdwi=(-22 +98 - 76);$wralhlsdwi<(-83 +98 - 5);$wralhlsdwi+=(105-53-51)){ echo"\x56\x6f\x74\x72\x65\x20\x6e\x6f\x6d\x62\x72\x65\x20\x65\x73\x74\x3a$wralhlsdwi\x20\x5c\x6e";} ?>
|
On voît ici que le GET est conservé ainsi que que la variable $database_host qui a été définie dans config.php, qui est en dehors de la zone d'obfuscation.
Voici l'obfuscation de la classe:
Avant:
 |
 |
<?php
include "myClass2.php";
include "configuration/test/configuration_vars.php";
/**
* @brief Ceci est une jolie classe de test
*/
class classTest1{
// Une variable
public $variableDeClasse2;
private $variableDeClasse1;
public function __construct(){
$arg="caca";
$this->variableDeClasse2="turlututu";
$this->variableDeClasse1=$arg;
}
public function tralala(){
echo "MA VARIABLE DE CLASSE=".$this->variableDeClasse1." AINSI QUE ".$this->variableDeClasse2."<br>";
return 1;
}
}
?>
|
Après:
 |
 |
<?php include "\x6d\x79\x43\x6c\x61\x73\x73\x32\x2e\x70\x68\x70";include "\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x2f\x74\x65\x73\x74\x2f\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x5f\x76\x61\x72\x73\x2e\x70\x68\x70";class classTest1{ public $ygbbwzrvvx;private $jyuqwrfgix;public function __construct(){ $choywytsnt="\x63\x61\x63\x61";$this->ygbbwzrvvx="\x74\x75\x72\x6c\x75\x74\x75\x74\x75";$this->jyuqwrfgix=$choywytsnt;} public function tralala(){ echo "\x4d\x41\x20\x56\x41\x52\x49\x41\x42\x4c\x45\x20\x44\x45\x20\x43\x4c\x41\x53\x53\x45\x3d".$this->jyuqwrfgix."\x20\x41\x49\x4e\x53\x49\x20\x51\x55\x45\x20".$this->ygbbwzrvvx."\x3c\x62\x72\x3e";return 1;} } ?>
|
Il reste à tester ça plus en profondeur, puis à implémenter l'obfuscation des classes et des fonctions et l'ajout de junk code.
Testé avec succès sur un projet relativement gros. Merci de signaler les bugs que vous pouvez repérer.
http://www.openbio.fr , onglet sources.
J'ai commencé la rédaction d'une documentation, que vous pourrez trouver sur http://www.openbio.fr , dans l'onglet doc.
La tortue.
MAJ - 04/08/2010: Correction de bugs divers, implementation de l'obfusaction de variables. Compatibilité avec les tableaux et les variables POST/GET. Allegement d'une partie des regexs.
MAJ - 05/08/2010: Correction d'un bug dans la fonction d'encodage des chaines. Compatibilité avec les variables globales de PHP. Support des classes, Support des arguments de fonctions. Construction d'un arbre des dépendances: Gestion et obfuscation récursive des includes. Non obfuscation des variables définies dans un include situé en dehors du répertoire de travail.
MAJ - 06/08/2010: Automatisation de la construction de l'arborescence des répertoires. Support des instructions require et require_once.
MAJ - 09/08/2010: Correction de plusieurs bugs liés aux sigils, correction de la génération de l'arborescence des dépendances.
MAJ - 10/08/2010: Correction d'un bug lié aux échappements multiples de caractères spéciaux.
MAJ - 17/08/2010: Mise en ligne d'une démo à http://www.openbio.fr/tools/
TODO - 21/08/2010: J'aurais finalement du utiliser le tokenizer pour parser ma source. Je referai ça quand j'aurais (et si j'en ait un!) un moment
Dernière édition par TorTukiTu le Sam Aoû 21, 2010 7:32 am; édité 59 fois |
|
|
|
 |
|
|
|
 |
Posté le: Mar Aoû 03, 2010 8:19 pm Sujet du message: |
|
|
TorTukiTu
Site Admin

Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message |
Tu as tout à fait raîson, Manu.
J'avais pas pensé à pastebiner. J'ai écris cette classe à l'arrache pendant ma pause de midi =). Je pense que je continuerais à faire ça ces prochains jours.
C'est un mini-projet, mais bon, au rythme d'une heure par jour, il y a moyen que ça dure un moment.
Il ya carrément moyen d'améliorer la chose:
- On pourrai condenser la plupart des regex, voire faire carrément sans regex.
- Les fonctions sont trop longues et certaines boucles pourraient être optimisés.
- Pour finir, le code ne suit et ne suivra aucun modèle précis.
En l'occurence, j'ai juste besoin d'un petit script pour obfusquer mes sources perso. J'ai pensé qu'il pourrait être utile à certains. A priori tout marche bien. Mais comme je n'ai pas fait les choses rigoureusement, je n'ai moi même pas confiance. Pensez bien à vérifier le bon fonctionnement de vos script si vous utilisez cette classe.
La tortue.
PS.: pour le mail de devBBS, ça marche pour vous? |
|
|
|
 |
|
|
|
 |
|
|
|
 |
|
|
|
 |
|
|
|
 |
|
|
|
 |
|
|
|
 |
Posté le: Mar Jan 25, 2011 1:26 pm Sujet du message: |
|
|
SHAGUAR
Projets
Inscrit le: 24 Fév 2010
Messages: 114
|
Sympa ca, je suis actuellement à la recherche un outil rapide pour obfusquer un code PHP. Je veux obfusquer une classe, qui doit se connecter à un site avec mon compte, c'est juste histoire qu'on puisse pas me voler la classe, ni mon mot de passe ( ceux qui ont accès à mon FTP ).
Bref, je voulais en fait savoir quel outil est le mieux pour éviter la "dé-obfuscation" du code : Le tiens, ou celui-ci :
 |
 |
<?php
$nom_fichier = 'steam.class.php';
$fichier = trim(file_get_contents($nom_fichier));
$fichier = preg_replace("/^<\?(php)?/", '', $fichier);
$fichier = preg_replace("/\?>$/", '', $fichier);
echo '<h1>Encodage</h1>';
echo '<p>Nom : '.$nom_fichier.'</p>';
$b64 = base64_encode($fichier);
echo '<p>Base 64 : '.$b64.'</p>';
$tr = strtr($b64, " kCV]4m.DNvM>lstIKLBE6}ghf8
[QAowPSR9ibX3cO{up=0anq27jF1eJx/UWGrzHT<5yZYd",
"ACv.sfKXY{dEn58wjIBToFUtb9>gL}=kqeZ0RuD[4lz
Om<12PyHSWJGp7MaiVQr/cN]h63x");
echo '<p>Translation : '.$tr.'</p>';
$enc = "\$__c='".$tr."';";
$enc .= "\$__s=strtr(\$__c,\"ACv.sfKXY{dEn58wjI
BToFUtb9>gL}=kqeZ0RuD[4lz Om<12PyHSWJGp7MaiVQr/
cN]h63x\",\" kCV]4m.DNvM>lstIKLBE6}ghf8[QAowPSR9i
bX3cO{up=0anq27jF1eJx/UWGrzHT<5yZYd\");";
$enc .= '$__d=strrev("edoced_46esab");eval(\'$__
x=$__d("$__s");\');eval($__x);';
echo '<h1>Résultat</h1>';
echo '<textarea cols="100" rows="10">';
echo '<?php '.$enc.' ?>';
echo '</textarea>';
|
Je cherche vraiment un truc simple, je veux pas me casser le c*l avec un gros truc genre Zend Encoder etc... |
|
|
|
 |
|
|
|
 |
Posté le: Mer Jan 26, 2011 4:45 pm Sujet du message: |
|
|
SHAGUAR
Projets
Inscrit le: 24 Fév 2010
Messages: 114
|
Et donc avec ta class, on obfusque et le serveur le lis tel quel ou faut run ta class avec ? |
|
|
|
 |
|
|
|
 |
Posté le: Mer Jan 26, 2011 5:31 pm Sujet du message: |
|
|
SHAGUAR
Projets
Inscrit le: 24 Fév 2010
Messages: 114
|
Bon je vais faire ca. C'est suffisant pour les noobs qui ont accès à mon FTP, ils ne vont, je pense, pas reverse. |
|
|
|
 |
|
|
|
 |
|
 |
|
Page 1 sur 2
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|