begin process at 2012 05 27 21:48:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > IMAGE ANTI-SPAM AGRÉABLE À LIRE ET À REGARDER

IMAGE ANTI-SPAM AGRÉABLE À LIRE ET À REGARDER


 Information sur la source

Note :
7 / 10 - par 2 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :antispam, mot, aléatoire, filtre, antirobot Niveau :Expert Date de création :09/04/2007 Vu / téléchargé :9 425 / 583

Auteur : SurfMaths

Ecrire un message privé
Site perso
Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce code génère un mot de passe qu'il affiche sous forme d'image. Ceci permet d'éviter les robots qui viennent 'pourrir' la vie des webmaster.
En fait la perticularité de celui ci c'est qu'il est vraiment pas moche à regarder et qu'il est très paramétrable donc difficile aux robots de le lire.

Source

  • <?php
  • /*
  • Générateur de mot aléatoire
  • Créé par : Alexandre ISOARD (http://surfmaths.free.fr/)
  • Avant de l'utiliser vous devez faire la partie de sauvegarde du mot (ceci permet de choisir votre mode de stockage SQL ou Session)
  • Elle est a la fin du fichier.
  • Sans cela le code fonctionne quand même mais ne servira à rien sauf à afficher une jolie image.
  • */
  • // ---- Valeurs par défaut ----
  • $autoriser=1; // Autorise l'envoi des paramètre. Utilise les paramètres par défaut si 0
  • $longueur=6; // Nombre de caractères par défaut du mot aléatoire
  • $mot=""; // Mot par défaut (laisser vide pour ne pas en mêtre)
  • $bruit=100; // Force du bruit par défaut en pourcentage (ne pas mettre trop fort)
  • $amplitude=2; // Amplitude des torsions latérales par défaut en pixels (ne pas mettre trop fort)
  • $degrade=1; // Activation ou non du fond en dégradé par défaut
  • $largeur=48; // Largeur en pixels par défaut attribuée à chaque caractère
  • $hauteur=64; // Hauteur en pixels par défaut de l'image
  • $caracteres="ABCEHILMNOPSTUWXYZ"; // Liste des caractères authorisés pour le mot aléatoire (éviter ceux qui se ressemblent)
  • $taille=28; // Taille de la police utilisée par défaut
  • $police=dirname($_SERVER["SCRIPT_FILENAME"])."/verdanab.ttf"; // Police de caractères TrueType utilisée par défaut
  • // ---- Réception et traitement des données ----
  • if($autoriser) { // Autorisation de réception des données ?
  • if(isset($_REQUEST["mot"])) $mot=$_REQUEST["mot"];
  • else if(isset($_REQUEST["longueur"])) $longueur=$_REQUEST["longueur"]; // Si non, vérifier la présence du paramètre de longueur du mot
  • if(isset($_REQUEST["bruit"])) $bruit=$_REQUEST["bruit"]; // Vérifier la présence du paramètre de la force du bruit (ne pas mêtre de chiffre trop grand)
  • if(isset($_REQUEST["amplitude"])) $amplitude=$_REQUEST["amplitude"]; // Amplitude des torsions latérales par défaut en pixels (ne pas mettre trop fort)
  • if(isset($_REQUEST["degrade"])) $degrade=$_REQUEST["degrade"]; // Vérifie si l'on a spécifié si l'on souhaitait le fond en dégradé ou en bruit
  • if(isset($_REQUEST["largeur"])) $largeur=$_REQUEST["largeur"]; // Vérifier la présence du paramètre de la largeur de caractère
  • if(isset($_REQUEST["hauteur"])) $hauteur=$_REQUEST["hauteur"]; // Vérifier la présence du paramètre de la hauteur de l'image
  • if(isset($_REQUEST["taille"])) $taille=$_REQUEST["taille"]; // Vérifier la présence du paramètre de la taille des lettres
  • }
  • if($mot=="") for($i=0;$i<$longueur;$i++) $mot.=$caracteres{mt_rand(0,strlen($caracteres)-1)}; // Génération aléatoire du mot si il est vide
  • else $longueur=strlen($mot); // Mesure la longueur du mot
  • // ---- Image de base ----
  • $image=imagecreatetruecolor($largeur*$longueur,$hauteur); // Crée l'image de base
  • $decalage=mt_rand(0,128); // Valeur aléatoire pour décaler les couleurs et ainsi avoir des couleurs foncées ou claires
  • $a1=($decalage+mt_rand(0,64))%256; // Valeur aléatoire destinée aux composantes rouges
  • $a2=($decalage+mt_rand(0,64))%256; // Valeur aléatoire destinée aux composantes vertes
  • $a3=($decalage+mt_rand(0,64))%256; // Valeur aléatoire destinée aux composantes bleues
  • // ---- Génération du fond ----
  • for($y=0;$y<$hauteur;$y++) { // Création du fond ligne par ligne
  • if($degrade) { // Création d'un dégradé
  • $decalage=floor(64*$y/$hauteur); // Variable d'avancement du dégradé
  • $r=($a1+$decalage)%256; // Définition de la composante rouge
  • $v=($a2+$decalage)%256; // Définition de la composante verte
  • $b=($a3+$decalage)%256; // Définition de la composante bleue
  • } else { // Création d'un fond hachuré
  • $r=($a1+mt_rand(0,64))%256; // Définition de la composante rouge
  • $v=($a2+mt_rand(0,64))%256; // Définition de la composante verte
  • $b=($a3+mt_rand(0,64))%256; // Définition de la composante bleue
  • }
  • $cc=imagecolorexact($image,$r,$v,$b); if($cc==-1) $cc=imagecolorallocate($image,$r,$v,$b); // Assigne les couleurs de la palette sans doublons
  • imageline($image,0,$y,$largeur*$longueur,$y,$cc); // Déssine la ligne de la couleur générée
  • }
  • // ---- Génération des caractères ----
  • $e=$largeur/2; // Calcul de l'écart nécessaire entre chaque caractère
  • for($i=0;$i<$longueur;$i++) { // Déssine les caractères un par un
  • $r=($a1+128+mt_rand(0,64))%256; // Définition de la composante rouge
  • $v=($a2+128+mt_rand(0,64))%256; // Définition de la composante verte
  • $b=($a3+128+mt_rand(0,64))%256; // Définition de la composante bleue
  • $a=mt_rand(-15,15); // Angle aléatoire de déviation des caractères
  • $cc=imagecolorexact($image,$r,$v,$b); if($cc==-1) $cc=imagecolorallocate($image,$r,$v,$b); // Assigne une couleur dans la palette sans doublons
  • $tl=imagettfbbox($taille,$a,$police,$mot{$i}); // Encadrement des dimenssions de la lettre
  • $ll=max($tl[0]-$tl[4],$tl[2]-$tl[6])/2; // Calcule la largeur maximale de la lettre
  • $hl=max($tl[1]-$tl[5],$tl[3]-$tl[7])/2; // Calcule la hauteur maximale de la lettre
  • $cxl=($tl[0]+$tl[2]+$tl[4]+$tl[6])/4; // Décalage du centre de la lettre suivant X par rapport à son origine
  • $cyl=($tl[1]+$tl[3]+$tl[5]+$tl[7])/4; // Décalage du centre de la lettre suivant X par rapport à son origine
  • $ah=$e-$ll; // Amplitude Horizontale du décalage aléatoire
  • $av=$hauteur/2-$hl; // Amplitude Verticale du décalage aléatoire
  • imagettftext($image,$taille,$a,floor($e*(1+2*$i)-$cxl+mt_rand(-$ah,$ah)),floor($hauteur/2-$cyl+mt_rand(-$av,$av)),$cc,$police,$mot{$i}); // Ecrit le caractère
  • }
  • // ---- Image filtrée ----
  • $image2=imagecreatetruecolor($largeur*$longueur,$hauteur); // Crée l'image filtrée
  • $d=mt_rand(-1,1); // Initialise une nouvelle valeur aléatoire pour l'ondulation
  • // Applique un filtre personnalisé très efficace
  • for($y=0;$y<$hauteur;$y++) for($x=0;$x<$largeur*$longueur;$x++) imagesetpixel($image2,$x,$y,imagecolorat($image,(floor($largeur*$longueur+$x+mt_rand(-$bruit,$bruit)/60+$amplitude*sin((2*$y/$taille+$d)*pi())))%($largeur*$longueur),(floor($hauteur+$y+mt_rand(-$bruit,$bruit)/60))%$hauteur));
  • // ---- Ma marque (NE PAS ENLEVER NI MODIFIER) ----
  • $b=imagecolorexact($image,255,255,255);
  • $n=imagecolorexact($image,0,0,0);
  • imagestring($image2,1,$largeur*$longueur-85,$hauteur-9,"surfmaths.free.fr",$b);
  • imagestring($image2,1,$largeur*$longueur-87,$hauteur-9,"surfmaths.free.fr",$b);
  • imagestring($image2,1,$largeur*$longueur-86,$hauteur-8,"surfmaths.free.fr",$b);
  • imagestring($image2,1,$largeur*$longueur-86,$hauteur-10,"surfmaths.free.fr",$b);
  • imagestring($image2,1,$largeur*$longueur-86,$hauteur-9,"surfmaths.free.fr",$n);
  • // ---- Sauvegarde du mot ----
  • /*
  • Cette partie n'est pas faite. Je vous conseille de sauvegarder la variable $mot dans une session
  • afin de pouvoir la réutiliser sans que l'utilisateur n'en connaisse le contenu ce qui permet de
  • détecter si la lecture de l'image à été faite par un robot.
  • */
  • // ---- Affichage du résultat ----
  • header("Content-type: image/png"); // Entête spécifiant le type de l'image
  • imagepng($image2); // Affiche le résultat
  • imagedestroy($image); // Supprime l'image originale
  • imagedestroy($image2); // Supprime l'image finale
  • ?>
<?php
/*
  Générateur de mot aléatoire
  Créé par : Alexandre ISOARD (http://surfmaths.free.fr/)

  Avant de l'utiliser vous devez faire la partie de sauvegarde du mot (ceci permet de choisir votre mode de stockage SQL ou Session)
    Elle est a la fin du fichier.
    Sans cela le code fonctionne quand même mais ne servira à rien sauf à afficher une jolie image.
*/

// ---- Valeurs par défaut ----
$autoriser=1;		// Autorise l'envoi des paramètre. Utilise les paramètres par défaut si 0
$longueur=6;		// Nombre de caractères par défaut du mot aléatoire
$mot="";		// Mot par défaut (laisser vide pour ne pas en mêtre)
$bruit=100;		// Force du bruit par défaut en pourcentage (ne pas mettre trop fort)
$amplitude=2;		// Amplitude des torsions latérales par défaut en pixels (ne pas mettre trop fort)
$degrade=1;		// Activation ou non du fond en dégradé par défaut
$largeur=48;		// Largeur en pixels par défaut attribuée à chaque caractère
$hauteur=64;		// Hauteur en pixels par défaut de l'image
$caracteres="ABCEHILMNOPSTUWXYZ";	// Liste des caractères authorisés pour le mot aléatoire (éviter ceux qui se ressemblent)
$taille=28;		// Taille de la police utilisée par défaut
$police=dirname($_SERVER["SCRIPT_FILENAME"])."/verdanab.ttf";	// Police de caractères TrueType utilisée par défaut

// ---- Réception et traitement des données ----
if($autoriser) {	// Autorisation de réception des données ?
  if(isset($_REQUEST["mot"])) $mot=$_REQUEST["mot"];
  else if(isset($_REQUEST["longueur"])) $longueur=$_REQUEST["longueur"];	// Si non, vérifier la présence du paramètre de longueur du mot
  if(isset($_REQUEST["bruit"])) $bruit=$_REQUEST["bruit"];					// Vérifier la présence du paramètre de la force du bruit (ne pas mêtre de chiffre trop grand)
  if(isset($_REQUEST["amplitude"])) $amplitude=$_REQUEST["amplitude"];		// Amplitude des torsions latérales par défaut en pixels (ne pas mettre trop fort)
  if(isset($_REQUEST["degrade"])) $degrade=$_REQUEST["degrade"];			// Vérifie si l'on a spécifié si l'on souhaitait le fond en dégradé ou en bruit
  if(isset($_REQUEST["largeur"])) $largeur=$_REQUEST["largeur"];			// Vérifier la présence du paramètre de la largeur de caractère
  if(isset($_REQUEST["hauteur"])) $hauteur=$_REQUEST["hauteur"];			// Vérifier la présence du paramètre de la hauteur de l'image
  if(isset($_REQUEST["taille"])) $taille=$_REQUEST["taille"];				// Vérifier la présence du paramètre de la taille des lettres
}
if($mot=="") for($i=0;$i<$longueur;$i++) $mot.=$caracteres{mt_rand(0,strlen($caracteres)-1)};	// Génération aléatoire du mot si il est vide
else $longueur=strlen($mot);	// Mesure la longueur du mot

// ---- Image de base ----
$image=imagecreatetruecolor($largeur*$longueur,$hauteur);		// Crée l'image de base

$decalage=mt_rand(0,128);		// Valeur aléatoire pour décaler les couleurs et ainsi avoir des couleurs foncées ou claires
$a1=($decalage+mt_rand(0,64))%256;	// Valeur aléatoire destinée aux composantes rouges
$a2=($decalage+mt_rand(0,64))%256;	// Valeur aléatoire destinée aux composantes vertes
$a3=($decalage+mt_rand(0,64))%256;	// Valeur aléatoire destinée aux composantes bleues

// ---- Génération du fond ----
for($y=0;$y<$hauteur;$y++) {		// Création du fond ligne par ligne
  if($degrade) {			// Création d'un dégradé
    $decalage=floor(64*$y/$hauteur);	// Variable d'avancement du dégradé
    $r=($a1+$decalage)%256;		// Définition de la composante rouge
    $v=($a2+$decalage)%256;		// Définition de la composante verte
    $b=($a3+$decalage)%256;		// Définition de la composante bleue
  } else {				// Création d'un fond hachuré
    $r=($a1+mt_rand(0,64))%256;		// Définition de la composante rouge
    $v=($a2+mt_rand(0,64))%256;		// Définition de la composante verte
    $b=($a3+mt_rand(0,64))%256;		// Définition de la composante bleue
  }
  $cc=imagecolorexact($image,$r,$v,$b); if($cc==-1) $cc=imagecolorallocate($image,$r,$v,$b);	// Assigne les couleurs de la palette sans doublons
  imageline($image,0,$y,$largeur*$longueur,$y,$cc);	// Déssine la ligne de la couleur générée
}

// ---- Génération des caractères ----
$e=$largeur/2;	// Calcul de l'écart nécessaire entre chaque caractère
for($i=0;$i<$longueur;$i++) {	// Déssine les caractères un par un
  $r=($a1+128+mt_rand(0,64))%256;	// Définition de la composante rouge
  $v=($a2+128+mt_rand(0,64))%256;	// Définition de la composante verte
  $b=($a3+128+mt_rand(0,64))%256;	// Définition de la composante bleue
  $a=mt_rand(-15,15);			// Angle aléatoire de déviation des caractères
  $cc=imagecolorexact($image,$r,$v,$b); if($cc==-1) $cc=imagecolorallocate($image,$r,$v,$b);	// Assigne une couleur dans la palette sans doublons
  $tl=imagettfbbox($taille,$a,$police,$mot{$i});	// Encadrement des dimenssions de la lettre
  $ll=max($tl[0]-$tl[4],$tl[2]-$tl[6])/2;		// Calcule la largeur maximale de la lettre
  $hl=max($tl[1]-$tl[5],$tl[3]-$tl[7])/2;		// Calcule la hauteur maximale de la lettre
  $cxl=($tl[0]+$tl[2]+$tl[4]+$tl[6])/4;			// Décalage du centre de la lettre suivant X par rapport à son origine
  $cyl=($tl[1]+$tl[3]+$tl[5]+$tl[7])/4;			// Décalage du centre de la lettre suivant X par rapport à son origine
  $ah=$e-$ll;						// Amplitude Horizontale du décalage aléatoire
  $av=$hauteur/2-$hl;					// Amplitude Verticale du décalage aléatoire
  imagettftext($image,$taille,$a,floor($e*(1+2*$i)-$cxl+mt_rand(-$ah,$ah)),floor($hauteur/2-$cyl+mt_rand(-$av,$av)),$cc,$police,$mot{$i}); // Ecrit le caractère
}

// ---- Image filtrée ----
$image2=imagecreatetruecolor($largeur*$longueur,$hauteur);	// Crée l'image filtrée
$d=mt_rand(-1,1);					// Initialise une nouvelle valeur aléatoire pour l'ondulation
// Applique un filtre personnalisé très efficace
for($y=0;$y<$hauteur;$y++) for($x=0;$x<$largeur*$longueur;$x++) imagesetpixel($image2,$x,$y,imagecolorat($image,(floor($largeur*$longueur+$x+mt_rand(-$bruit,$bruit)/60+$amplitude*sin((2*$y/$taille+$d)*pi())))%($largeur*$longueur),(floor($hauteur+$y+mt_rand(-$bruit,$bruit)/60))%$hauteur));

// ---- Ma marque (NE PAS ENLEVER NI MODIFIER) ----
$b=imagecolorexact($image,255,255,255);
$n=imagecolorexact($image,0,0,0);
imagestring($image2,1,$largeur*$longueur-85,$hauteur-9,"surfmaths.free.fr",$b);
imagestring($image2,1,$largeur*$longueur-87,$hauteur-9,"surfmaths.free.fr",$b);
imagestring($image2,1,$largeur*$longueur-86,$hauteur-8,"surfmaths.free.fr",$b);
imagestring($image2,1,$largeur*$longueur-86,$hauteur-10,"surfmaths.free.fr",$b);
imagestring($image2,1,$largeur*$longueur-86,$hauteur-9,"surfmaths.free.fr",$n);

// ---- Sauvegarde du mot ----
/*
Cette partie n'est pas faite. Je vous conseille de sauvegarder la variable $mot dans une session
afin de pouvoir la réutiliser sans que l'utilisateur n'en connaisse le contenu ce qui permet de
détecter si la lecture de l'image à été faite par un robot.
*/

// ---- Affichage du résultat ----
header("Content-type: image/png");	// Entête spécifiant le type de l'image
imagepng($image2);			// Affiche le résultat
imagedestroy($image);			// Supprime l'image originale
imagedestroy($image2);			// Supprime l'image finale
?>

 Conclusion

Pour avoir la dernière version de se code source je vous conseille de faire un tour sur mon site dans la section téléchargements : http://surfmaths.free.fr/

J'ai mis autant de commentaires que possibles, si vous ne comprenez pas, demandez moi, j'essaierai de vous expliquer.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • mot.phpTélécharger ce fichier [Réservé aux membres club]Voir ce fichier6 896 octets
  • verdana.ttfTélécharger ce fichier [Réservé aux membres club]171 792 octets
  • verdanab.ttfTélécharger ce fichier [Réservé aux membres club]137 616 octets

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture CAMEMBERT BD par dardelphi
Source avec une capture AMÉLIORATION : CAMEMBERT par asphator
GESTION DE COULEUR par manuche
Source avec Zip NAVIGATOR (+CSSDETECTOR) par xXVoxPopuliXx
COMMENT, AVEC GD, DESSINER UN RECTANGLE TRANSPARENT PLEIN AV... par Rainbow

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CAPTCHA VISUELLE par kankrelune
Source avec Zip CAPTCHA NON VISUELLE par kankrelune
Source avec Zip Source avec une capture CAPTCHA CALCUL / CARACTÈRE À LA XIÈME POSITION D'UNE CHAÎNE. par WanaDien
Source avec Zip Source avec une capture CAPTCHA ( ANTI-SPAM, ANTI-ROBOT ) par WanaDien
Source avec Zip FONCTION QUI GÉNÉRE UN MOT DE PASSE ALÉATOIRE par italiasky

Commentaires et avis

Commentaire de Mastronic le 09/04/2007 13:15:09

Bonjour, belle realisation, avec le TTF.. j'ai fais la meme chose.. mais comment implementer dans le forum de phpbb par example.. j'ai regarder le code.. et c pas evident..

Commentaire de SurfMaths le 09/04/2007 14:35:06

Si tu veut je me renseigne sur le sujet et j'essaie de l'implémenter dans les forums phpbb. La plus part du temps on stocke le mot dans une session mais il se peut qu'ils le fassent par l'intermédiaire de la base de donnée MySQL

Commentaire de SurfMaths le 09/04/2007 15:23:00

Leur code source est compliqué puisqu'ils n'utilisent pas la librairie GD mais la modification se fait facilement.
En fait (dans phpBB 2.2) il faut remplacer dans le fichier 'phpBB2/includes/usercp_confirm.php' a partir de la ligne 69 jusqu'à la fin par ce code source.
Après tu change $mot=""; par $mot=$code;
Et enfin tu place la police TTF que tu veut utiliser dirrectement dans le dossier phpBB2 (ou du moins le dossier racine du forum)
J'ai testé, çà marche nikel.

Commentaire de SurfMaths le 09/04/2007 15:29:37

J'ai oublié de préciser que pour des questions de sécurité il vaut mieu que tu mette la variable $autoriser=0; pour éviter que les robots aient acces aux paramètres.
Si non tous devrais marcher.

Commentaire de iow4 le 09/04/2007 17:31:05

c'est dommage qu'il y est pas une petite screen.

Commentaire de SurfMaths le 09/04/2007 19:29:03

Heu, y a une screen...
Au pire tu va sur mon site, y a le script en fonctionnement : http://surfmaths.free.fr/

Commentaire de coucou747 le 09/04/2007 20:08:36 administrateur CS

chaque fois que je vois ca, ca me donne vraiment envie de faire la partie du bot qui passe la securite :) je l'ai faite pour le site d'anthomicro :)

la, tu peux separer chaque lettre facilement, j'ai pas le temp de coder un truc pour te montrer que c'est attaquable, mais si tu separes les lettres facilement, alors ton script est disons limite...

Commentaire de iow4 le 09/04/2007 21:11:00

Oui par la technique de reconnaissance des characteres après apprentissage, le bot doit avoir une grande base de connaissance.

Sinon coucou747 tu avais codé en quoi ton soft ? Est-il sous license Open Source ?

C'est intéressant.

Commentaire de webdeb le 09/04/2007 22:42:28

Un captcha visuel texte c'est quand même 1 000 fois mieux :)

Commentaire de iow4 le 09/04/2007 23:35:10

Le mieux reste encore la question mathématique très simple comme "combien fait 2+2"
ça marche sur mon site.

Commentaire de coucou747 le 10/04/2007 00:23:31 administrateur CS

iow4, pour un bot cible, je dirais que ... ta protexion est ineficace (mais alors totalement)
Mon script, il cassait specifiquement les images generes par le script d'antho :) c'est en php, le captcha d'antho a change, donc je vous montre le code
http://www.phpcs.com/code.aspx?ID=42153

Commentaire de iow4 le 10/04/2007 12:57:04

Pour le moment aucun y est arrivé et je ne pense pas que quelqu'un créerais un bot spécialement pour mon site :d
C'est sur que c'est simple à cracker : question toujours identique etc

Commentaire de coucou747 le 10/04/2007 13:25:49 administrateur CS

iow4 :

<?php
function newreq($req, &$session, $host='www.vulgarisation-informatique.com', $port=80, $re=true){
$sock=fsockopen($host, $port) or die('no connection');
fputs($sock, $req);
$result='';
if ($re){
while ($a=fgets($sock)){
$result.=$a;
}
if (false!==($a=strpos($result, 'Set-Cookie'))){
$a=substr($result, $a+strlen('set-Cookie: '));
$a=substr($a, 0, strpos($a, ';'));
$session.='
Cookie: '.$a;
}
return $result;
}
}


function post($host, $page, $post){
$session='';
$result=newreq('POST '.$page.' HTTP/1.1'."\r\n".
'Host: '.$host."\r\n".
'Content-Type: application/x-www-form-urlencoded'."\r\n".
'Content-Length: '.strlen($post)."\r\n\r\n".
$post."\r\n\r\n"
, $session, $host, 80, false);
return $result;
}

?>

voila la lib qui casse ton site en 2 minutes

Commentaire de iow4 le 10/04/2007 15:07:45

J'ai beau analyser ton code, je ne le comprends pas.
Peux-tu m'expliquer en gros ?

Commentaire de SurfMaths le 15/04/2007 16:36:43

Moi je dit que si tu arrive à casser cette image je te félicite mais le hic pour toi ca sera que les paramètres peuvent êtres changés facilement. Evidement que l'on peut facilement séparer les lettres mais elles sont déformées, tournées décalées et brouillées. Donc bonne chance.

Je sais que c'est fesable mais le but c'est de le rendre difficile.

Commentaire de coucou747 le 17/04/2007 17:36:22 administrateur CS

desole, je n'ai plus le temps de jouer a ca, et surtout pas pour chaque source de ce genre...

Commentaire de iow4 le 17/04/2007 17:53:11

Tu peux quand même m'expliquer pourquoi tu pretends avoir un lib qui casse mon captcha

Commentaire de coucou747 le 30/05/2007 08:52:22 administrateur CS

<?php

function compare($a, $b){
$r=0;
for ($i=0;$i<strlen($a);$i++){
if ($a[$i]!=$b[$i]){
$r++;
}
}
return $r;
}

function is_text($a){
global $c1r, $c1v, $c1b;
$r = $a / 65536;
$v = ( $a / 256 ) % 256;
$b = $a % 256;
return ! ( abs($r-$c1r)<64 && abs($v-$c1v)<64 && abs($b-$c1b)<64 );
}

$img=imageCreateFrompng('4.png')
or die('erreur');
$w = ImageColorAllocate ($img, 255, 255, 255);
$bl = ImageColorAllocate ($img, 0, 0, 0);
$x=imagesX($img);
$y=imagesy($img);

$a = imagecolorat($img, 0, 0);
$c1r = $a / 65536;
$c1v = ( $a / 256 ) % 256;
$c1b = $a % 256;

//just pour y voir plus clair
for ($i=0;$i<$x;$i++){
for ($j=0;$j<$y;$j++){
$a = imagecolorat($img, $i, $j);
if (!is_text($a)) imageSetpixel($img, $i, $j, $w);
else  imageSetpixel($img, $i, $j, $bl);
}
}


$chars=array();
$sl=false;
for ($i=0;$i<$x;$i++){
$freecol=true;
for ($j=0;$j<$y;$j++){
if (imagecolorat($img, $i, $j)==$bl){
$freecol=false;
break;
}
}
if ($freecol){
if ($sl!==false){
if ($sl!=$i-1)
$chars[]=array('startX'=>$sl, 'endX'=>$i, 'startY'=>0, 'endY'=>$y-1);
$sl=false;
}
}else if ($sl===false){
$sl=$i;
}
}
foreach ($chars as $a=>$b){
$j=0;
$freeline=true;
while($freeline){
for ($i=$b['startX'];$i<$b['endX'];$i++){
if (imagecolorat($img, $i, $j)==$bl){
$freeline=false;
break;
}
}
$j++;
}
$chars[$a]['startY']=$j;
$j=$y-1;
$freeline=true;
while($freeline){
for ($i=$b['startX'];$i<$b['endX'];$i++){
if (imagecolorat($img, $i, $j)==$bl){
$freeline=false;
break;
}
}
$j--;
}
$chars[$a]['endY']=$j;
}

$npts=array('X'=>6, 'Y'=>8);

$tab=array(
array('H'=>'00000000,00001111,11111000,00001100,00011111,00110000,'),
array('Z'=>'00000000,01000000,01011111,01111111,11000001,00000001,00000001,'),
array('A'=>'00000001,00001111,00111110,01110010,01111110,00000111,'),
array('T'=>'10000000,11100000,11111111,01111001,11000000,01000000,'),
array('Y'=>'00000000,11111000,01011100,00011111,00110000,00000000,'),
array('M'=>'00000000,01111110,11111000,00001100,00011001,00111111,'),
array('N'=>'00000100,00111111,01110000,00111110,00001111,01110011,'),
array('S'=>'00010000,01111001,01101001,11011001,01001101,01000111,'),
array('Y'=>'01000000,11000000,01111101,00011111,00111000,00110000,'),
array('S'=>'00100001,00111111,11111001,11001001,01001101,01101111,'),
array('E'=>'01100000,01110000,01011111,01011011,01000001,00011001,'),
array('U'=>'00101000,11111111,00000111,00000000,00111011,00100110,00000000,'),
array('2'=>'00100000,01000000,01000011,01111111,11100101,00000011,'),
array('I'=>'00000000,01000000,11100001,01110111,01111111,10010011,00000011,'),
array('C'=>'00000100,00001111,01111001,11100001,01000001,01100001,'),
array('I'=>'01000000,11000000,01100001,01111101,01011111,11001001,00000001,'),
array('B'=>'00001000,00011110,11111011,01101001,11011111,01110111,'),
array('U'=>'00100000,11111000,00011111,00000001,11111011,10011111,00000000,'),
array('P'=>'01000000,11111010,11111111,11101100,01111100,00111000,'),
array('S'=>'00000000,00100011,01111001,11011001,01001111,00100110,00000100,'),
array('M'=>'01000000,01111111,01111100,00001100,11111000,11111111,'),
array('P'=>'00000000,01111111,11110100,01100100,11111000,00110000,')

);

foreach ($chars as $a=>$b){
$chars[$a]['pts']='';
for ($i=$b['startX'];$i<$b['endX']; $i+=($b['endX']-$b['startX'])/$npts['X']){
for ($j=$b['startY'];$j<$b['endY']; $j+=($b['endY']-$b['startY'])/$npts['Y']){
if (imagecolorat($img, $i, $j)==$bl){
$chars[$a]['pts'].='1';
}else{
$chars[$a]['pts'].='0';
}
}
$chars[$a]['pts'].=',';
}
$min=100000;
foreach ($tab as $e){
list($c, $d)=each($e);
$d=compare($d, $chars[$a]['pts']);
if ($d<$min){
$min=$d;
$l=$c;
}
}
echo $l;
//echo '\''.$chars[$a]['pts'].'\', '."\n";
}

header('Content-type:image/jpeg');
imagejpeg($img);
?>


voila pourquoi....
sur ce, ici, l'alphabet est restreint, et je dois avouer qu'il est 9h, et que ca fait 5h que je suis dessus... (mais j'ai pris mon temps), avec une plus grosse base de donnee, on aurait plus d'empryntes de lettres... si on prennait aussi des 1 ou des 0 pour deux points qui se joignent, ca pourrait donner un truc plus fiable, mais bon... j'ai montre ce que j'avais a montrer...

Commentaire de coucou747 le 30/05/2007 08:54:00 administrateur CS

bon, moi je mets 4 car c'est pas expert et que c'est casse

Commentaire de SurfMaths le 01/06/2007 23:21:19

Heu, comment çà c'est cassé ? Je vois pas du tout de cassage moi. Peut être me faut il des lunettes.

Commentaire de coucou747 le 01/06/2007 23:48:28 administrateur CS

cd deux commentaires plus haut... si tu appliques le programme que j'ai poste, bah tu verras que mon programme "lit" ton image

Commentaire de SurfMaths le 08/06/2007 14:49:04

Effectivement, ton script arrive a lire correctement mon image 1 fois sur 20.
C'est un faible rendement mais bien suffisant pour nuire.
Je n'ai pas compris comment il fonctionne mais il a apparement des difficultés avec les rotations.
Le plus simple pour éviter ton script serais donc d'augmenter l'amplitude de la rotation de lettres.

Commentaire de coucou747 le 08/06/2007 16:04:05 administrateur CS

prende une police plus fine aussi...

mon tableau $tab=array(...
est bien trop court pour lire ton image a chaque fois, il est chiant a remplire, les parties commentees le prermettent, mais bon... j'ai montre ce que je voulais montrer, ca me suffit

Commentaire de SurfMaths le 17/06/2007 01:11:17

Oui, je comprend mieu maintenant la méthode.
En fait on filtre l'image pour ne faire resortir que les détails importants. Puis on crée une base de donnée contenant tous les caractères qui ont été trouvés avec leurs images. Il faut donc faire apprendre au système tous les caractères puis une fois cet apprentissage effectué il se débrouille tout seul. Le but du filtre est d'enlever le maximum d'aléatoire tout en conservant le caractère intacte. Donc ce qu'il faut c'est mettre tellement d'aléatoire dans l'image qu'il sera difficile de faire un tel filtre sans perdre l'information.
Déjà, mon système de couleur doit être amélioré pour qu'il soit plus difficile de séparer les caractères du fond de l'image. Ensuite je donne plus d'amplitude aux rotations des lettres et le maximum pour les translations. Une police plus manuscrite et plus fine serais aussi la bienvenue. Une déformation plus poussée finaliserais le travail.
Enfin bon, pour le moment je n'ai pas le temps de m'y atteler. Mais la prochaine fois ce sera bien plus efficace.
Merci de ta participation.

Commentaire de goliath2 le 01/10/2009 02:13:24

J'ai repris le même code, mais je n'arrive pas à le faire marcher.

L'affichage donne quelque chose d'illisible comme ceci :

?PNG  ??? IHDR?? ???@???5b=9?? ?IDATx½½wxEû>þÌì! PBy¢1è1çõêÕ³")1m¨ñuîÚ"¨¼¡s»aÓ\"ÍÐF¼¬ôúõëCÚŨÃ|eN~?ÜnXã±~Ù H
ÑØoÆÂG-0«ÏtÈTTP.^äTT\¦Ê´ÑZ?Ãat¡h­M·¸¹C'?x¨

Que ce passe - t - il ?

J'ai bien mis le fichier .ttf au même endroit que mon script...

Mon code est le suivant :

<? include  "mot.inc.php"; ?>

Je n'ai rien touché au code...

Merci pour votre aide.

David
David

Commentaire de coucou747 le 01/10/2009 08:24:44 administrateur CS

il te manque un header

Commentaire de SurfMaths le 01/10/2009 10:37:09

Non, c'est surtout qu'en fait il te faut faire : <img src="mot.inc.php" />

Commentaire de coucou747 le 01/10/2009 20:23:53 administrateur CS

... ou qu'il faut mettre un header sur ton image...

Commentaire de goliath2 le 02/10/2009 01:29:17

Merci SurfMaths, c'est bien çà.

Le code suivant marche bien : <img src="mot.inc.php" />

Ce n'était pas une question de header.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Mettre une valeur aléatoire à chaque ligne d'une colonne [ par creastic ] Bonjour, J'ai créé une table dans phpMyAdmin où j'ai trois colonne texte : nom, prénom, mot de passe J'ai importé quelques centaine de nom et prénom, Bot Twitter [ par Senny26 ] Salut à tous ! Bon, vous allez certainement me prendre pour un fou, mais vous êtes (presque) mon seul recours. Apres une semaine de recherches infruc Arrays association aléatoire et non identique [ par ricozone3d ] Bonjour, je cherche à faire associer 2 arrays (contenant chacun les mêmes valeurs mais ordonnées de façon différente) afin de créer des paires uniques Mur d'image aléatoire [ par seyvapul ] Bonjour à tous. Je souhaite faire sur ma page de garde, un mur d'images (Tableau 3l 5c, les miniatures font 95x95) qui changent de manière aléatoires Sécurité des mots de passe [ par Jiho64 ] Bonjour, Je projette d'écrire un sujet sur la sécurité des sites web en général et je souhaiterai avoir quelques précisions sur les mots de passe, a utiliser un login et mot de passe pour accéder à ma page d'accueille [ par msi079 ] [b]salut .je tente d'utiliser un code que j'ai eu sur le net . mais j'arrive pas à l'adapter à mon cas . j'ai un fichier index.php et victime.php l'ut Problème pour créer fichier CSV en PHP à partir d'un tableau et d'une base de données [ par Vedo67 ] Bonjour à tous, j'aurais besoin d'un petit coup de main sur un problème j'essaie de créer un fichier csv à partir d'un tableau que j'affiche sur une p accès page membre [ par stephelle ] Bonjour, un petit problème. Ma page d'accès tourne en rond en me disant "mauvais login ou mot de passe" alors que je suis bien enregistrer dans ma bas Procédure stockée: Nom de table=Mot Clef [ par suxxa ] Bonjour, Je suis actuellement sur un petit dev web et après avoir quasiment terminé la partie php, je viens de me rendre compte que ma table nommée " [BAR]Trouver des missions web rémunérées [ par zattara ] Bonjour à tous, Ca fait plus de cinq ans que je trouve des missions web sur codeur, progonline (avant), 404works, mot-a-mot etc etc. Je perdais bcp d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,014 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales