# 破解某滑动验证码

• 破解思路分析
• 研究资料分享
• 图像计算处理算法
• 模拟鼠标轨迹
• 破解成功。

1：获取截图数据

2：图像处理算出需要位移的距离

3：进行位移抵达位置

## 2.研究资料分享

http://blog.csdn.net/ieternite/article/details/51483491

http://www.cnblogs.com/yuananyun/p/5655019.html

## 3.图像处理算法

```#coding:utf-8
#code: python
#system: linux
#auther: luyi
#mail : **@qq.com
#github: luyishisi
#blog: https://www.urlteam.org
#date：2016.9.30
#Functional requirement: Crack verification code.

import Image
img = Image.open("jietu_1.png")
img2 = Image.open("jietu_2.png")
#切除前60列，不会出现在此
for i in xrange(0,60):
for j in xrange(img.height):
img.putpixel((i,j), (255,255,255,255))

#一列列扫描，放大差异点，相同点置白
for i in xrange(60,img.width):
for j in xrange(img.height):
r,g,b,a = img.getpixel((i,j))
r2,g2,b2,a2 = img2.getpixel((i,j))
sum = r+g+b
sum2 = r2+g2+b2
if abs(sum2-sum) > 15:
#print 'chayi: ',abs(sum2-sum)
abs_num = abs(sum2-sum)*5%255#我也不知道什么用,代码本天成，妙手自可得
img.putpixel((i,j), (abs_num,abs_num,abs_num,255))
else:
img.putpixel((i,j), (255,255,255,255))
#扫描首次与最后一次遇到大量深色区域的i坐标 分别赋值给i1,i2
num = 0
i1 = 0
i2 = 0
for i in xrange(img.width):
sum = 0
for j in xrange(img.height):
r,g,b,a = img.getpixel((i,j))
if(r+g+b)!=255+255+255:
sum += 1
if(sum > 20):
if num == 0:
num += 1
i1 = i
else :
i2 = i

#print "首次遇到大量黑色点i1: ",i1,
#print "最后遇到大量黑色点i2: ",i2,
chazhi = i2-i1
sum1 = 0
sum2 = 0
#以差值大于50做为切割点，判断哪一边是干扰点
if chazhi > 50:
for i in range(i1,chazhi/2+i1):
for j in xrange(img.height):
r,g,b,a = img.getpixel((i,j))
sum1 = sum1 +r+g+b
for i in range(chazhi/2+i1,i2):
for j in xrange(img.height):
r,g,b,a = img.getpixel((i,j))
sum2 = sum2 +r+g+b

if sum1>sum2:
print i2-22
else:
print i1+22
img.save('end.png')```

## 4.模拟鼠标轨迹

```#coding:utf-8
import pygame
from pygame.locals import *
from sys import exit
import time
import Image

pygame.init()
screen_size = (1000,1000)

screen = pygame.display.set_mode(screen_size, 0 ,32)
#初始化屏幕，大小1280*800，不使用特殊，32色。
font = pygame.font.SysFont("arial",16);
font_height = font.get_linesize()
event_text = []
#调用系统字体，获取行高的数值，建立一个列表用来存放事件
temp = []
num = 1000

img = Image.open("1.png")

while num:
num -= 1
event = pygame.event.wait()
if(str(event)[7] == '4'):
event_dirt = eval(str(event)[21:-2])
i = list((event_dirt['pos']))[0]
j = list((event_dirt['pos']))[1]
#img.putpixel((i,j), (255,255,255))
img.putpixel((i,j), (0,0,0))
img.putpixel((i+1,j), (0,0,0))
img.putpixel((i+1,j+1), (0,0,0))
temp.append(list((event_dirt['pos'])))

if event.type == QUIT:
exit()
screen.fill((0,0,0))
#设置背景色，0,0,0就是全黑
print temp
img.save('end.png')```

0 条评论

• ### 【PAT乙级】Wifi密码

版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。 ...

• ### PHP函数之日期时间函数date()详解

format 必需。规定时间戳的格式。 timestamp 可选。规定时间戳。默认是当前的日期和时间。

• ### Python高效编程之itertools模块详解

在打印内容字节数较小时，全部载入内存后，再打印，没有问题。可是，如果现在有成千上百万条车辆行驶轨迹，叫你分析出其中每个客户的出行规律，堵车情况等，假如是在单机上...

• ### #000 Python 入门第一题通过扩展，学到了更多的知识

创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。

• ### 不到70行Python代码，轻松玩转RFM用户分析模型（附案例数据和代码）

本文从RFM模型概念入手，结合实际案例，详解Python实现模型的每一步操作，并提供案例同款源数据，以供同学们知行合一。

• ### Python 核心设计理念27个问题及解答

Guido van Rossum 认为使用缩进进行分组非常优雅，并且大大提高了普通 Python 程序的清晰度。大多数人在一段时间后就学会并喜欢上这个功能。

• ### 中文编程为什么没有发展起来？

我是雪易网的开发者玩蛇的胖纸，当你看到这封信的时候，我想我已经离开易语言界很久了。

• ### Python实现五子棋人机对战

五子棋是常见的一款小游戏，五子棋问题是人工智能中的一个经典问题。这篇文章主要介绍了python版本五子棋的实现代码，大家可以做个参考，与我的傻儿子对弈一下。

• ### 「译」ES6：参数默认值的实现细节

在这篇文章中我们会介绍另一个 ES6 的特性，带默认值的函数参数。正如我们将看到的，有一些微妙的案例。

• ### 数据分析最有用的 Top 50 Matplotlib 图（附完整的Python代码）(上)

50个Matplotlib图的汇编，在数据分析和可视化中最有用。此列表允许您使用Python的Matplotlib和Seaborn库选择要显示的可视化对象。