Mastronic
Messages postés94Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention13 juin 2012
-
9 avril 2007 à 13:15
goliath2
Messages postés3Date d'inscriptionlundi 24 novembre 2003StatutMembreDernière intervention25 novembre 2009
-
2 oct. 2009 à 01:29
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
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
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 17 juin 2007 à 01:11
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.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 8 juin 2007 à 16:04
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
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 8 juin 2007 à 14:49
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.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 1 juin 2007 à 23:48
cd deux commentaires plus haut... si tu appliques le programme que j'ai poste, bah tu verras que mon programme "lit" ton image
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 1 juin 2007 à 23:21
Heu, comment çà c'est cassé ? Je vois pas du tout de cassage moi. Peut être me faut il des lunettes.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 30 mai 2007 à 08:54
bon, moi je mets 4 car c'est pas expert et que c'est casse
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 30 mai 2007 à 08:52
<?php
function compare($a, $b){
$r=0;
for ($i=0;$i<strlen($a);$i++){
if ($a[$i]!=$b[$i]){
$r++;
}
}
return $r;
}
//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;
}
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...
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 17 avril 2007 à 17:53
Tu peux quand même m'expliquer pourquoi tu pretends avoir un lib qui casse mon captcha
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 17 avril 2007 à 17:36
desole, je n'ai plus le temps de jouer a ca, et surtout pas pour chaque source de ce genre...
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 15 avril 2007 à 16:36
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.
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 10 avril 2007 à 15:07
J'ai beau analyser ton code, je ne le comprends pas.
Peux-tu m'expliquer en gros ?
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 10 avril 2007 à 13:25
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;
}
}
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 10 avril 2007 à 12:57
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
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 10 avril 2007 à 00:23
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
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 9 avril 2007 à 23:35
Le mieux reste encore la question mathématique très simple comme "combien fait 2+2"
ça marche sur mon site.
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 9 avril 2007 à 22:42
Un captcha visuel texte c'est quand même 1 000 fois mieux :)
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 9 avril 2007 à 21:11
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.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 9 avril 2007 à 20:08
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...
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 9 avril 2007 à 19:29
Heu, y a une screen...
Au pire tu va sur mon site, y a le script en fonctionnement : http://surfmaths.free.fr/
iow4
Messages postés302Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention 2 novembre 20084 9 avril 2007 à 17:31
c'est dommage qu'il y est pas une petite screen.
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 9 avril 2007 à 15:29
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.
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 9 avril 2007 à 15:23
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.
SurfMaths
Messages postés12Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 1 octobre 2009 9 avril 2007 à 14:35
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
Mastronic
Messages postés94Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention13 juin 2012 9 avril 2007 à 13:15
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..
2 oct. 2009 à 01:29
Le code suivant marche bien :
Ce n'était pas une question de header.
1 oct. 2009 à 20:23
1 oct. 2009 à 10:37
1 oct. 2009 à 08:24
1 oct. 2009 à 02:13
L'affichage donne quelque chose d'illisible comme ceci :
‰PNG ??? IHDR?? ???@???5b=9?? ?IDATxœœwxEû>þÌì! PB‹t•Þ”ªÅWÅ.Š€"ÒA€7@é5Ò€7‘šÔ€HéœB gLöæÞÙð~Ÿ×o¯\¹öì™yÊý”yfvÚ»éPrr²RJDêׯïºnjjªëº 4‘äääúõ맀€(¥ÌIœzõ”R)))"âºnýúõÍGs‹¹^¯^œ””Óƒùª~ýú"¢”r]׎1çæDDÌ]"bF7íÍ¡”JNN‘ ˜\Ç@ÉÉÉfts£áÂœðuÐiøÂXfà éÜœ7hÐÀu]C¡éÄ|=žÀ@ÜØy¢1è1çõêÕ³„)1mšñuîÚ„šŒ¡s»aÓ\„ÍÐFŒ¬ôúõëCÚÅšÃ|eN˜?ÜnX㱘٠HÑØoÆÂG–0«ÏtÈT™P.ˆä‹AÌ3HXÔFDÐÆrVŸ û<ƒnœ?4Œžp8¬µ6Ý84VJ…Ãas¹n”b TC¢Õ9ÌT™\ŠÊŽÑZ‡Ãat¡hM·ž¹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
17 juin 2007 à 01:11
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.
8 juin 2007 à 16:04
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
8 juin 2007 à 14:49
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.
1 juin 2007 à 23:48
1 juin 2007 à 23:21
30 mai 2007 à 08:54
30 mai 2007 à 08:52
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...
17 avril 2007 à 17:53
17 avril 2007 à 17:36
15 avril 2007 à 16:36
Je sais que c'est fesable mais le but c'est de le rendre difficile.
10 avril 2007 à 15:07
Peux-tu m'expliquer en gros ?
10 avril 2007 à 13:25
<?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
10 avril 2007 à 12:57
C'est sur que c'est simple à cracker : question toujours identique etc
10 avril 2007 à 00:23
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
9 avril 2007 à 23:35
ça marche sur mon site.
9 avril 2007 à 22:42
9 avril 2007 à 21:11
Sinon coucou747 tu avais codé en quoi ton soft ? Est-il sous license Open Source ?
C'est intéressant.
9 avril 2007 à 20:08
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...
9 avril 2007 à 19:29
Au pire tu va sur mon site, y a le script en fonctionnement : http://surfmaths.free.fr/
9 avril 2007 à 17:31
9 avril 2007 à 15:29
Si non tous devrais marcher.
9 avril 2007 à 15:23
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.
9 avril 2007 à 14:35
9 avril 2007 à 13:15