S'enregistrer | Rechercher | FAQ | Liste des Membres | Groupes d'utilisateurs | Connexion

  Nom d'utilisateur:    Mot de passe:       

Aller à la page 1, 2  Suivante  

Poster un nouveau sujet   Répondre au sujet Page 1 sur 2
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
MessagePosté le: Mar Aoû 03, 2010 3:21 pm    Sujet du message: Obfuscation php Répondre en citant

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:
Code:

<?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:
Code:

<?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:
Code:

<?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:
Code:

<?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
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Mar Aoû 03, 2010 5:36 pm    Sujet du message: Répondre en citant

Manu404
Modérateur


 
Inscrit le: 26 Fév 2008
Messages: 2219
Localisation: ::1:



Sympa comme petite classe. J'attend de voire comment elle vas tourner.
Juste un petit conseil, rapidshare n'est pour moi pas le meilleur outil pour faire tourner ce genre de projet. De plus tu n'as qu'une source a publier. J'ai pensé a cela : http://hackbbs.pastebin.org/445876
Ca Ă©vitera au moin d'attendre et rend la source accessible Ă  tous.
N'hésite pas a éditer si tu trouve mon initiative trop "cavalière"
Voir le profil de l'utilisateur Envoyer un message privés Envoyer un e-mail Visiter le site web de l'utilisateur Messagerie InstantanĂ©e MSN Messenger
MessagePosté le: Mar Aoû 03, 2010 8:19 pm    Sujet du message: Répondre en citant

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?
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Mer Aoû 04, 2010 8:32 pm    Sujet du message: Répondre en citant

THE-DEATH
Modérateur


 
Inscrit le: 23 Juil 2008
Messages: 971
Localisation: 127.0.0.1



turtle si t'es modo sur dbbs alors je crois que c'est normal, au dernieres news ya pas de recup pour les modos faut voir avec manu directement. Sinon alors je sais pas...
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur
MessagePosté le: Mer Aoû 04, 2010 11:37 pm    Sujet du message: Répondre en citant

Sliim
Site Admin


 
Inscrit le: 16 Mai 2008
Messages: 1177



Sympa ton petit projet tortue Smile.

Néanmoins j'ai une 'tite question, mais d'où tu sors une idée pareille ? toi qui te bats pour le partage tu veux obfusquer tes codes ??? (à prendre sur le ton de l'humour Smile).

je regarderais le code quand j'aurais un peu de temps, ça a l'air intéressant d'analyser la façon dont tu procèdes :p.

++
Sliim
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Messagerie InstantanĂ©e
MessagePosté le: Jeu Aoû 05, 2010 8:21 am    Sujet du message: Répondre en citant

TorTukiTu
Site Admin


 
Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message



Hello Sliim,

J'ai supprimé ma réponse, c'est plus prudent, j'ignore qui lira ce post.

La tortue.


Dernière édition par TorTukiTu le Jeu Aoû 12, 2010 1:15 pm; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Jeu Aoû 05, 2010 2:56 pm    Sujet du message: Répondre en citant

TorTukiTu
Site Admin


 
Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message



Je poursuis mon travail, la classe est maintenant capable de générer un arbre des dépendances afin d'obfusquer dans l'ordre optimal les différents fichiers.

Demain, je gérerai le cas des dépendances situés en dehors de l'espace de travail (et qui ne doivent donc pas être obfusqués!). [FAIT]

N'hésitez pas à me signaler vos remarques ou les éventuels bugs que vous avez pu détecter.

La tortue.
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Jeu Aoû 05, 2010 10:48 pm    Sujet du message: Répondre en citant

Sliim
Site Admin


 
Inscrit le: 16 Mai 2008
Messages: 1177



TorTukiTu a écrit:
Hello Sliim,

[Edit Sliim] Tortu tu as zappé d'edit mon quote Smile. C'est maintenant fait. [/Edit]

La tortue.


Haha, ok ok, je comprend mieux :p.

En tout cas t'as l'air plutôt réactif sur ce projet, faut que je look ça Smile.

++
Sliim


Dernière édition par Sliim le Mar Jan 25, 2011 7:32 pm; édité 2 fois
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Messagerie InstantanĂ©e
MessagePosté le: Mar Aoû 17, 2010 3:15 pm    Sujet du message: Répondre en citant

TorTukiTu
Site Admin


 
Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message



Bonjour Ă  tous,

J'ai mi une démo en ligne de ma classe d'obfuscation.

Vous pouvez l'utiliser pour obfusquer rapidement vos sources sans avoir a télécharger la classe.

http://www.openbio.fr/tools/

La tortue.
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Mar Jan 25, 2011 1:26 pm    Sujet du message: Répondre en citant

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 :

Code:
<?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...
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Mar Jan 25, 2011 6:01 pm    Sujet du message: Répondre en citant

TorTukiTu
Site Admin


 
Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message



L'intérêt de l'outil que j'ai développé est qu'il gère les dépendances.

Autrement dit, si tu obfusques un fichier qui fait appel à des variables se trouvant dans un autre fichier non obfusqué, ces variables seront conservées, et ton fichier obfusqué restera compatible. Le script que tu proposes ne fait pas ça.

Ensuite, à toi de voir en fonction de tes besoins. Pour ce qui est de la classe ci-dessus, je ne me rappelle plus de quelle version il s'agit. Il se peut qu'elle soit buguée.
Tiens moi au courant, du bon fonctionnement (ou des bugs!) de la classe, si ça marche mal, j'irai rechercher la version qui va bien dans mes archives.

La tortue du 974.
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Mer Jan 26, 2011 4:45 pm    Sujet du message: Répondre en citant

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 ?
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Mer Jan 26, 2011 5:25 pm    Sujet du message: Répondre en citant

TorTukiTu
Site Admin


 
Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message



Plus besoin de la classe une fois obfusqué. Ca ne change en rien le fonctionnement du code, ça ne fait que ralentir la compréhention du code pour un être humain.

Si tu veux t'assurer que ta source ne parte pas dans la nature ou ne soit jamais (ou pas) réversé, n'utilise surtout pas ces classes. il te faut un outil d'obfuscation qui travaille au niveau de l'interpréteur php, pas directement au niveau du code.

Typiquement, ce genrs d'outil (ioncube par exemple) ne laisse dans les fichiers source d'origine qu'une version chiffrée du code. Le déchiffrement se fait à la volée. Ce qui implique l'ajout d'une librarie à l'interpréteur PHP.

La tortue du 974.


Dernière édition par TorTukiTu le Mer Jan 26, 2011 5:36 pm; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
MessagePosté le: Mer Jan 26, 2011 5:31 pm    Sujet du message: Répondre en citant

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.
Voir le profil de l'utilisateur Envoyer un message privés
MessagePosté le: Mer Jan 26, 2011 5:43 pm    Sujet du message: Répondre en citant

TorTukiTu
Site Admin


 
Inscrit le: 07 Fév 2008
Messages: 1960
Localisation: Devant son pc durant la redaction de ce message



Je viens de lire la fonction que tu as posté. C'est vraiment bidon, en gros, il ne fait que mettre ton code en base_64. N'importe qui peux réaliser les opérations inverses et retrouver la source originale. Dans le cas de la classe que j'ai crée, c'est impossible. Le code est totalement réécris d'une autre façon.
Voir le profil de l'utilisateur Envoyer un message privés Visiter le site web de l'utilisateur Compte AIM MSN Messenger Numéro ICQ
Poster un nouveau sujet   Répondre au sujet Page 1 sur 2

Aller à la page 1, 2  Suivante  


 
Sauter vers:  
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



110251 Attacks blocked