欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

中文点选验证码之自动识别

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

某次测试中遇到了汉字点选的验证码,看着很简单,尝试了一下发现有两种简单的识别方法,终于有空给重新整理一下,分享出来。
0×01  验证码的获取
首先获取验证码。由于网站比较特殊,就不以他们的为例,自己生成验证码吧。这个不是重点,这里直接贴代码了。
function createImage($word    ,$imagePath,$type    , $imageName){
   $fontPath = 'msyh.ttc'    ;//字体
   $fontSize = 20     * 0.75;
   foreach ($word     as $v ) {
        $fontarea  =     imagettfbbox($fontSize,     0 , $fontPath, $v        );
        $textWidth =     $fontarea[2] -     $fontarea [0];
        $textHeight =     $fontarea[1] -     $fontarea [7];
        $tmp[    'text'] = $v;
        $tmp[    'size'] = $fontSize;
        $tmp[    'width'] = $textWidth;
        $tmp[    'height'] = $textHeight;
        $textArr[] =     $tmp;
   }
   list( $imageWidth    , $imageHeight,  $imageType) =         getimagesize( $imagePath);
   for( $i    =0;$i list(    $x, $y) =  randPosition        ($textArr,  $imageWidth,             $imageHeight, $textArr[$i                ][ 'width'], $textArr[                    $i]['height'],                    $i,$type);
        $textArr[    $i]['x'] =     $x;
        $textArr[    $i]['y'] =     $y;
   }
   unset( $v    );
   //创建图片的实例
   $image =  imagecreatefromstring    (file_get_contents( $imagePath));
   //字体颜色
   $color =  imagecolorallocate    ($image,  0,         0,  0);
   //绘画文字   
   foreach( $textArr     as $v){
        imagefttext (    $image, $v ['size'        ], 0 , $v[            'x' ], $v['y'                ], $color,  $fontPath                ,$v ['text']);
   }   
   if (imagepng    ( $image,$imageName )){
        echo $imageName    ." \n";
   }
}
functionrandPosition ($textArr    ,  $imgW, $imgH ,         $fontW,  $fontH,$i            ,$type){
    switch  ($type    ) {
        case 0    :// 生成mp
             $x =     rand ($i* 60        , ($i +1)*            60-$fontW -            3);   
             $y =     rand (40, 80        );   
             break;
         case1    : //生成ap
             $x = (    $i )*25+ 5        ;
             $y =     25;   

[1] [2] [3] [4]  下一页

某次测试中遇到了汉字点选的验证码,看着很简单,尝试了一下发现有两种简单的识别方法,终于有空给重新整理一下,分享出来。
0×01  验证码的获取
首先获取验证码。由于网站比较特殊,就不以他们的为例,自己生成验证码吧。这个不是重点,这里直接贴代码了。
function createImage($word    ,$imagePath,$type    , $imageName){
   $fontPath = 'msyh.ttc'    ;//字体
   $fontSize = 20     * 0.75;
   foreach ($word     as $v ) {
        $fontarea  =     imagettfbbox($fontSize,     0 , $fontPath, $v        );
        $textWidth =     $fontarea[2] -     $fontarea [0];
        $textHeight =     $fontarea[1] -     $fontarea [7]; 无奈人生安全网
        $tmp[    'text'] = $v;
        $tmp[    'size'] = $fontSize;
        $tmp[    'width'] = $textWidth;
        $tmp[    'height'] = $textHeight;
        $textArr[] =     $tmp;
   }
   list( $imageWidth    , $imageHeight,  $imageType) =         getimagesize( $imagePath);
   for( $i    =0;$i list(    $x, $y) =  randPosition        ($textArr,  $imageWidth,             $imageHeight, $textArr[$i                ][ 'width'], $textArr[                    $i]['height'],                    $i,$type); copyright 无奈人生
        $textArr[    $i]['x'] =     $x;
        $textArr[    $i]['y'] =     $y;
   }
   unset( $v    );
   //创建图片的实例
   $image =  imagecreatefromstring    (file_get_contents( $imagePath));
   //字体颜色
   $color =  imagecolorallocate    ($image,  0,         0,  0);
   //绘画文字   
   foreach( $textArr     as $v){
        imagefttext (    $image, $v ['size'        ], 0 , $v[            'x' ], $v['y'                ], $color,  $fontPath                ,$v ['text']);

www.wnhack.com

   }   
   if (imagepng    ( $image,$imageName )){
        echo $imageName    ." \n";
   }
}
functionrandPosition ($textArr    ,  $imgW, $imgH ,         $fontW,  $fontH,$i            ,$type){
    switch  ($type    ) {
        case 0    :// 生成mp
             $x =     rand ($i* 60        , ($i +1)*            60-$fontW -            3);   
             $y =     rand (40, 80        );   

本文来自无奈人生安全网


             break;
         case1    : //生成ap
             $x = (    $i )*25+ 5        ;
             $y =     25;   
www.wnhack.com

[1] [2] [3] [4]  下一页

本文来自无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。