请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 2531|回复: 5

拼图练习

[复制链接]

11

主题

61

帖子

182

积分
交易币
16

版主

Rank: 7Rank: 7Rank: 7

发表于 2015-5-15 22:39:35 | 显示全部楼层 |阅读模式
本帖最后由 M31 于 2015-5-15 22:41 编辑

今天看到"极验验证“新型验证码,先来玩玩拼图,其它研究成果暂时保密哈。

原图:
带滑块的图:


经过一番分析,解析到了拼图规则,即以宽12px,高58的图块按照js函数生成的顺序重新排列即可复原原来的图片,排列顺序为:

var x1={157;145;265;277;181;169;241;253;109;97;289;301;85;73;25;37;13;1;121;133;61;49;217;229;205;193};
var x2={145;157;277;265;169;181;253;241;97;109;301;289;73;85;37;25;1;13;133;121;49;61;229;217;193;205};

测试代码如下,基本可以复原,但是还有些毛糙的地方还没搞定,希望有高人指点下边缘如何处理:

[aardio] 纯文本查看 复制代码
io.open();
//import imageProcessing;
import gdip;
import win.ui;
/*DSG{{*/
mainForm = ..win.form(text="aardio Form";right=766;bottom=484)
mainForm.add(
button={cls="button";text="拼图";left=461;top=386;right=554;bottom=434;z=3};
picturebox={cls="picturebox";left=43;top=58;right=355;bottom=174;z=1};
picturebox2={cls="picturebox";left=43;top=203;right=355;bottom=319;z=2};
picturebox3={cls="picturebox";left=43;top=331;right=355;bottom=447;z=4}
)
/*}}*/

import inet.whttp
http=inet.whttp();

puzzle=function(imgBuffer){//拼图
        var bmp=gdip.bitmap(imgBuffer);
        var newBmp=gdip.bitmap(bmp.width,bmp.height);
        var x1={157;145;265;277;181;169;241;253;109;97;289;301;85;73;25;37;13;1;121;133;61;49;217;229;205;193};
        var x2={145;157;277;265;169;181;253;241;97;109;301;289;73;85;37;25;1;13;133;121;49;61;229;217;193;205};
        var t=0;
        for(k,x in x1){
            piece=bmp.clone(x-1,58,12,58);
            for(j=t*12;t*12+12-1;1){
                for(i=0;58-1;1){
                    newBmp.setPixel(j,i,piece.getPixel(j-t*12,i-0));  
                }
            }
            t+=1;
        }
        t=0;
        for(k,x in x2){
            piece=bmp.clone(x-1,0,12,58);
            for(j=t*12;t*12+12-1;1){
                for(i=58;116-1;1){
                    newBmp.setPixel(j,i,piece.getPixel(j-t*12,i-58));  
                }
            }
            t+=1;
        }
        //newBmp=imageProcessing.graying(newBmp,,true);
        return newBmp;
}

mainForm.button.oncommand = function(id,event){
        var htm=http.get("http://api.geetest.com/refresh.php?api=jordan&geetestid=421b84eeaee7b2aed4c0ec5706d8b571&id=a119e161bebbec3fa2abb0fde22dcf0ba&challenge=309a333799f96465b593ac66ec6665ach5&random=231512");
        var pattern=/*"fullbg"\: "(.+?)",*/;
        var url1=string.match(htm,pattern);
        if(!url1){
                io.print("url1获取不到");
                return ; 
        }
        var imgBuffer=http.get("http://static.geetest.com/"++url1);
        if(!imgBuffer){
                io.print("图片1获取不到");
                return ;          
        }
        img1=puzzle(imgBuffer);
        mainForm.picturebox.setImage(img1.copyHandle());

        pattern=/*"imgurl"\: "(.+?)"*/;
        var url2=string.match(htm,pattern);
        if(!url2){
                io.print("url2获取不到");
                return ; 
        }
        
        var imgBuffer=http.get("http://static.geetest.com/"++url2);
        if(!imgBuffer){
                io.print("图片2获取不到");
                return ;          
        }
        img2=puzzle(imgBuffer);
        mainForm.picturebox2.setImage(img2.copyHandle());
}

mainForm.show() 
return win.loopMessage(); 

   

回复

使用道具 举报

2

主题

38

帖子

159

积分
交易币
0

编程一段

Rank: 2

发表于 2015-5-16 00:14:52 | 显示全部楼层
感谢分享!这块看起来挺高深的,不知道能不能系统出一些验证码识别方面的教程或是示例?
回复 支持 反对

使用道具 举报

19

主题

123

帖子

243

积分
交易币
0

编程二段

Rank: 3Rank: 3

发表于 2015-5-16 07:50:12 | 显示全部楼层
虽然看不懂,还是顶一下。学习了,这是要抛弃模拟的节奏啊。
回复 支持 反对

使用道具 举报

11

主题

61

帖子

182

积分
交易币
16

版主

Rank: 7Rank: 7Rank: 7

 楼主| 发表于 2015-5-19 10:53:47 | 显示全部楼层
这回拼图完美了

[aardio] 纯文本查看 复制代码
io.open();
//import imageProcessing;
import gdip;
import win.ui;
/*DSG{{*/
mainForm = ..win.form(text="aardio Form";right=766;bottom=484)
mainForm.add(
button={cls="button";text="拼图";left=461;top=386;right=554;bottom=434;z=3};
picturebox={cls="picturebox";left=43;top=58;right=355;bottom=174;z=1};
picturebox2={cls="picturebox";left=43;top=203;right=355;bottom=319;z=2};
picturebox3={cls="picturebox";left=43;top=331;right=355;bottom=447;z=4}
)
/*}}*/
 
import inet.whttp
http=inet.whttp();
 
puzzle=function(imgBuffer){//拼图
        var bmp=gdip.bitmap(imgBuffer);
        var newBmp=gdip.bitmap(bmp.width,bmp.height);
        var x1={157;145;265;277;181;169;241;253;109;97;289;301;85;73;25;37;13;1;121;133;61;49;217;229;205;193};
        var x2={145;157;277;265;169;181;253;241;97;109;301;289;73;85;37;25;1;13;133;121;49;61;229;217;193;205};
        var width=10;
        var t=0;
        for(k,x in x1){
            piece=bmp.clone(x-1,58,width,58);
            for(j=t*width;t*width+width-1;1){
                for(i=0;58-1;1){
                    newBmp.setPixel(j,i,piece.getPixel(j-t*width,i-0));  
                }
            }
            t+=1;
        }
        t=0;
        for(k,x in x2){
            piece=bmp.clone(x-1,0,width,58);
            for(j=t*width;t*width+width-1;1){
                for(i=58;116-1;1){
                    newBmp.setPixel(j,i,piece.getPixel(j-t*width,i-58));  
                }
            }
            t+=1;
        }
        //newBmp=imageProcessing.graying(newBmp,,true);
        return newBmp;
}
 
mainForm.button.oncommand = function(id,event){
        var htm=http.get("http://api.geetest.com/refresh.php?api=jordan&geetestid=421b84eeaee7b2aed4c0ec5706d8b571&id=a119e161bebbec3fa2abb0fde22dcf0ba&challenge=309a333799f96465b593ac66ec6665ach5&random=231512");
        var pattern=/*"fullbg"\: "(.+?)",*/;
        var url1=string.match(htm,pattern);
        if(!url1){
                io.print("url1获取不到");
                return ; 
        }
        var imgBuffer=http.get("http://static.geetest.com/"++url1);
        if(!imgBuffer){
                io.print("图片1获取不到");
                return ;          
        }
        img1=puzzle(imgBuffer);
        mainForm.picturebox.setImage(img1.copyHandle());
 
        pattern=/*"imgurl"\: "(.+?)"*/;
        var url2=string.match(htm,pattern);
        if(!url2){
                io.print("url2获取不到");
                return ; 
        }
         
        var imgBuffer=http.get("http://static.geetest.com/"++url2);
        if(!imgBuffer){
                io.print("图片2获取不到");
                return ;          
        }
        img2=puzzle(imgBuffer);
        mainForm.picturebox2.setImage(img2.copyHandle());
}
 
mainForm.show() 
return win.loopMessage(); 

回复 支持 反对

使用道具 举报

4

主题

19

帖子

47

积分
交易币
0

新手入门

Rank: 1

发表于 2015-5-23 23:45:50 | 显示全部楼层
高级,可以玩拼图了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2019-7-20 18:27 , Processed in 0.078124 second(s), 25 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表