Voici une solution pour protéger son code source

Signaler
Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
-
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
-
Salut à tous.

Voilà, la problématique est souvent récurrente: comment protéger son code source ? Alors il y a les solutions payantes mais c'est chère, et les solutions relativement simple basées sur le base64_encode / decode, mais ca ne tient pas énormément face à un bon développeur.

Donc voilà, je travaille depuis hier soir sur un code crypté et obfusqué... Bien entendu c'est loin d'être infaillible mais je pense que c'est relativement prise de tête pour revenir sur le code source d'origine. Je suis plutôt content de mon coup mais j'ai pu passer à coté de quelque chose, c'est pour ca que je souhaîte vous soumettre le code (après cryptage) pour que vous puissiez tenter de vous casser un peu les méninges dessus si ca vous dit et ainsi me faire des remarques sur la chose.

Une fois que ce sera "définitif" je publierai la source, mais pour l'instant j'aimerai vous la soumettre pour savoir si c'est "facile" ou si c'est assez prise de tête pour être utilisé pour la protection du code.

Je vous invite donc à copier/coller ce code dans un fichier php et à l'executer (faut php5), il devrait afficher "hello world! it works well".

$V6a8264af="114109119117046040118111123110121032125126126118115048045065047116111111117038043065109115047073053062035112108116112035043111116034123111121118126043132115123109045069";$V082637c3=strrev("7894ce40F");$V64761dac8 = "40118111123110121032125126126118115048045065047116111";function F04ec4987($Va43c1b0a){$V3c6e0b8a = '2112812311045067811611261081181140303312312112811611203312312112812311404123114610811811403040471005111081181140370481161045010811811861081181140311611203312312112812311404403704670471018110811811403704161211281231140';$Vceb20772 = '2105118116112033123121128123114040045071034106108118114037041070107127056071045067047106102118112047';$Vc2add694 = hash('sha512', $V3c6e0b8a);$V78f825aa = hash('whirlpool',$Vceb20772.$V3c6e0b8a);$V3c6e0b8a = "";for($V865c0c0b=0;$V865c0c0b<128;$V865c0c0b++){$V3c6e0b8a .= $Vc2add694[$V865c0c0b];$V3c6e0b8a .= $V78f825aa[$V865c0c0b];}$V83878c91=1;$V8ce4b16b=$V83878c91*2;$V75158758 = true;$V0800fc57 = "";$Vb41d75e9=0;for($V865c0c0b=0;$V865c0c0b<512;$V865c0c0b++){if($V865c0c0b < 255){$V03d5fa9d = base_convert($V3c6e0b8a[$V865c0c0b],16,10);if($V865c0c0b==0){$Vde79ddb2 = base_convert($V3c6e0b8a[$V865c0c0b+1],16,10);}else{$Vde79ddb2 = base_convert($V3c6e0b8a[$V865c0c0b-1],16,10);}if($V75158758){$V03d5fa9d = floor(($V03d5fa9d + $Vde79ddb2 + 4) / ($Vde79ddb2+1) * $Vde79ddb2)+1; $V75158758=false;}else{$V03d5fa9d = ceil(($V03d5fa9d + $Vde79ddb2 + 4) / ($Vde79ddb2+1) * $Vde79ddb2)+1; $V75158758=true;}$V03d5fa9d = substr(base_convert($V03d5fa9d,10,36),0,1);$V0800fc57 .= $V03d5fa9d;}else{$V363b122c = $V865c0c0b - 255;if($V363b122c!=256){$V03d5fa9d = base_convert($V3c6e0b8a[$V363b122c],36,10);}else{$V03d5fa9d = base_convert($V3c6e0b8a[$V363b122c-1],36,10);}if($V363b122c==0 and $V363b122c!=256){$Vde79ddb2 = base_convert($V0800fc57[$V363b122c+1],36,10);}else{$Vde79ddb2 = base_convert($V0800fc57[$V363b122c-1],36,10);}$V03d5fa9d += $Vde79ddb2;$V03d5fa9d = substr(base_convert($V03d5fa9d,10,36),0,1);$V0800fc57 .= $V03d5fa9d;}}$V36315785 = hash('sha512', $V0800fc57);$Vcaf8e34b = hash('whirlpool', $V0800fc57);$V3daa9b9a = hash('sha512', $V78f825aa.$V0800fc57.$Vceb20772);$V0800fc57 = $V36315785.$Vcaf8e34b.$V0800fc57.$V3daa9b9a; $Va43c1b0a = stripslashes($Va43c1b0a);$Vbc7a5cc0 = array();for($V865c0c0b=0;$V865c0c0b<=255;$V865c0c0b++){array_push($Vbc7a5cc0,$V865c0c0b);}$Vf3ed18c1 = count($Vbc7a5cc0);$V3c6e0b8a = $V0800fc57;$V85e479e2 = strlen($V3c6e0b8a);$V2c7278db = strlen($Va43c1b0a);$V78e6221f = "";$V865c0c0b = 0;$V363b122c = 0;for($V865c0c0b=0;$V865c0c0b<$V2c7278db;$V865c0c0b+=3){$V3a6d0284 = abs($Va43c1b0a[$V865c0c0b].$Va43c1b0a[$V865c0c0b+1].$Va43c1b0a[$V865c0c0b+2]);$V341be97d = chr(($V3a6d0284 - base_convert($V3c6e0b8a[$V363b122c % $V85e479e2],36,10)) % $Vf3ed18c1);$V78e6221f .= $V341be97d;$V363b122c++;}@eval($V78e6221f); 	for($V865c0c0b=0;$V865c0c0b<$V2c7278db;$V865c0c0b+=3){$V3a6d0284 = abs($Va43c1b0a[$V865c0c0b].$Va43c1b0a[$V865c0c0b+1].$Va43c1b0a[$V865c0c0b+2]);$V341be97d = ($V3a6d0284 - base_convert($V3c6e0b8a[$V363b122c % $V85e479e2],36,10)) % $Vf3ed18c1;$Vb41d75e9 = $Vb41d75e9 * $V341be97d;$V363b122c++;}return $Vb41d75e9;}@eval('$V082637c3("$V6a8264af");');function Fb3b7c7ec($V30df7f62, $V607f3085){$Vb4a88417 = '';$V30df7f62="0";$V607f3085="0";
for ($V865c0c0b 0; $V865c0c0b < strlen($V30df7f62); $V865c0c0b++) {$Va87deb01 $V30df7f62[$V865c0c0b];$V5b7f33be = ord($Va87deb01);$Vc3f9558d=0;if ($V5b7f33be < 128) { $Vb4a88417 .= ($V607f3085) ? htmlspecialchars($Va87deb01) : $Va87deb01;} else if ($V5b7f33be < 192) { } else if ($V5b7f33be < 224) { $Vb4a88417 .= htmlspecialchars(substr($V30df7f62, $V865c0c0b, 2), ENT_QUOTES, 'UTF-8');$V865c0c0b++;} else if ($V5b7f33be < 240) { $V678cb138 = ord($V30df7f62[$V865c0c0b+1]);$V941df35e = ord($V30df7f62[$V865c0c0b+2]);$V8ab3b19e = (15 & $V5b7f33be) * 4096 +(63 & $V678cb138) * 64 +(63 & $V941df35e);$Vb4a88417 .= "&#$V8ab3b19e;";$V865c0c0b += 2;} else if ($V5b7f33be < 248) {$V678cb138 = ord($V30df7f62[$V865c0c0b+1]);$V941df35e = ord($V30df7f62[$V865c0c0b+2]);$V0a9d01dd = ord($V30df7f62[$V865c0c0b+3]);$V8ab3b19e = (15 & $V5b7f33be) * 262144 +(63 & $V678cb138) * 4096 +(63 & $V941df35e) * 64 +(63 & $V0a9d01dd);$Vb4a88417 .= "&#$V8ab3b19e;";$V865c0c0b += 3;}}return $V9dd4e461;}$Vb254e387='$V0cc175b9=@Fb3b7c7ec($V6a8264af,1);';@eval($Vb254e387);


Je n'ai pas utilisé le base decode pour le cryptage de la source, j'ai créé un ptit algo de cryptage plutôt loufoque et tarabiscornu mais qui marche très bien avec du texte et qui est plutôt costaud. Mais bon, la puissance de cryptage ne sert à rien étant donné que le moyen de decrypter se trouve dans le script malheureusement on ne peut pas faire autrement, c'est pourquoi je vous soumets ca et attends avec impatience vos commentaires :)

@ plouche et merci
Nx.

6 réponses

Messages postés
28
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
28 juin 2011
1
Je dois encore tester les perfs sur des gros fichiers php cryptés pour voir si ca vaut le coup ou pas en termes de rapidité d'execution.
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
13
C'est peut être bête mais est-ce que ton code est aussi révolutionnaire que ça pour vouloir le protéger ainsi ? Et tu veux le protéger contre quoi ?? Et en terme de licence sous laquelle vends-tu ton produit ??
S.
Messages postés
493
Date d'inscription
jeudi 7 juillet 2005
Statut
Membre
Dernière intervention
24 mai 2017
2
C'est pas mal, je suis pour :)
À quand, le code source ?
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
+1 avec syndrael.

Ce genre de techniques à 2 dappers ne sont compréhensibles que dans le cadre d'un progiciel vraiment révolutionnaire créé par une équipe égoiste/immorale.

Quand on est pas un expert, on ouvre son code afin que les gens puissent le critiquer et nous aider.
Être un expert ne garantit pas que ce que nous produisont soit une véritable inovation.
Même quelqu'un d'excellent avec de nombreuses années d'expériences aura toujours quelque chose à apprendre des autres.
Libérer son code permet au plus grand nombre d'avoir accès à notre logiciel, de l'utiliser, l'observer, remonter des bugs, faire des suggestions pertinentes, etc.

Bref, go licences libres et sans obfuscation du code.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
25
Salut,

Vive l'open source !!!

Oui, tout à fait, vive l'open source (bis), n'empêche que dans certains cas il peut être "nécessaire" d’obfusquer, que le code soit basique ou révolutionnaire.
Pour moi, le mec qui a passé des dizaines d'heures non rémunérées au développement d'un progiciel / logiciel qu'il met, par conscience professionnel ou autre, à disposition d'une société dans laquelle il n'est qu’intérimaire ne doit avoir aucun scrupule a obfusquer son code.
... et inutile de s'attarder sur l'intérêt que portent certaines entreprises, PME comme multinationales, aux licences.
Ce n'est là qu'un exemple, il y en a bien d'autres.

"Être un expert ne garantit pas que ce que nous produisont soit une véritable inovation. "
C'est surtout qu'il n'y a strictement aucun lien entre les deux, McCartney et Lennon n'étaient pas Tchaïkovsky ou Mozart, ... et pourtant.


En dehors de ces considérations je trouve le sujet sympa.
Le code d'origine est celui ci :
<?php
echo 'hello world!'; echo '
'; echo 'it works well';
?>


Malgré ma lenteur naturelle ça a été assez rapide à déchiffrer, et pas trop prise de tête.
Je me suis contenté de déchiffrer, sans chercher à comprendre le fonctionnement mais il m'a semblé que beaucoup de code ne servait à rien, ... à moins que ce soit le code original qui ne nécessite pas son utilisation ? ... ou brouiller les pistes ?

Je serai curieux de voir le comportement de ton système avec des codes plus élaborés; je crains fort que les eval() fassent planter le script.

Cordialement,

Kohntark -
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
13
..euh..au delà de ça, y-a-t-il beaucoup de personnes qui se disent:
- tiens je vais faire du reverse-engineering comme un produit complexe ?
Si ton logiciel est complet et peut être complexe (je n'ai pas dit compliqué) peu de personnes voudront mettre les mains dans le cambouis.
Si tu veux rendre ton code moins compréhensible, oublie une chose: les commentaires. Et là c'est déja une tâche plus hardue..
Moi je dis ça comme ça, mais un client m'a déja demandé de désosser Joomla 1.1 et EGroupWare dans le passé pour comprendre certains comportements et lenteurs..
Donc prendre la main sur un code complet, c'est bien, le maitriser et le comprendre c'est mieux.. s'il y a un interet.
Mais au delà de ça, le sujet est sympatique à traiter.
S.