===================================
一、通过抓包找到验证码图片的链接
二、发现找到的图片和合展示的图片不一样,链接地址的图片是乱序,需要我们重新拼接
三、继续往上找,找到该图片链接的来源,发现在一个叫slidecode请求包的响应内容里面
四、代码实现获取图片链接地址
import
requests
import
re
#通过该地址获取验证码图片的地址
url =
'https://XXXXX.com/authcode/slidecode'
# 替换为你要请求的URL
headers = {
'User-Agent'
:
'Mozilla/5.0'
}
# 可选,设置请求头
response = requests.get(url, headers=headers)
# 发送GET请求
响应内容 = response.text
#获取网页的响应内容
正则 = re.compile(
r'url(([^)]+))'
)
匹配结果 = 正则.findall(响应内容)
#通过正则匹配获取图片的链接
print(匹配结果[
0
])
# 输出响应数据
print(
"整理后的结果:"
+
'http:'
+匹配结果[
0
].replace(
'"'
,
''
))
运行结果:
五、知道图片链接,将图片保存到本地
图片链接=
'http:'
+匹配结果[
0
].replace(
'"'
,
''
)
response = requests.get(图片链接, stream=
True
)
with
open(
"123.png"
,
'wb'
)
as
f:
f.write(response.content)
六、继续分析上面url的响应内容,发现一大堆类似坐标的东西,猜测这是每个错乱图片的正确位置
七、提取这些坐标
坐标=re.compile(
"class='gt_cut_fullbg_slice' style='background-position:(.*?)px (.*?)px"
,re.S|re.I)
坐标xy=坐标.findall(响应内容)
坐标xy=[[
abs
(
int
(xy[
0
])),
abs
(
int
(xy[
1
]))]
for
xy in 坐标xy]
#将字符串改为数字
(坐标xy)
运行结果:
[[
91
,
75
], [
234
,
0
], [
143
,
75
], [
130
,
75
], [
52
,
0
], [
39
,
75
], [
156
,
25
], [
26
,
50
], [
13
,
25
], [
208
,
75
], [
91
,
50
], [
26
,
75
], [
13
,
50
], [
65
,
75
], [
52
,
50
], [
78
,
0
], [
234
,
50
], [
117
,
25
], [
65
,
25
], [
65
,
0
], [
247
,
50
], [
143
,
50
], [
0
,
0
], [
169
,
50
], [
91
,
25
], [
247
,
75
], [
52
,
25
], [
247
,
25
], [
169
,
0
], [
26
,
0
], [
182
,
75
], [
117
,
0
], [
91
,
0
], [
143
,
0
], [
26
,
25
], [
156
,
75
], [
247
,
0
], [
39
,
25
], [
13
,
0
], [
65
,
50
], [
104
,
0
], [
130
,
0
], [
78
,
75
], [
0
,
50
], [
169
,
25
], [
78
,
50
], [
195
,
0
], [
156
,
50
], [
117
,
75
], [
0
,
25
], [
182
,
50
], [
221
,
75
], [
78
,
25
], [
182
,
0
], [
221
,
0
], [
104
,
25
], [
195
,
25
], [
208
,
25
], [
208
,
50
], [
208
,
0
], [
156
,
0
], [
195
,
50
], [
117
,
50
], [
104
,
50
], [
169
,
75
], [
221
,
25
], [
234
,
75
], [
195
,
75
], [
0
,
75
], [
234
,
25
], [
39
,
0
], [
130
,
25
], [
52
,
75
], [
182
,
25
], [
130
,
50
], [
13
,
75
], [
39
,
50
], [
104
,
75
], [
221
,
50
], [
143
,
25
]]
八、将图片切割,并按正确顺序放回到原位
打开图片 = Image.open(
'123.png'
)
# 将切片保存到列表
图片列表 = []
for
p
in
坐标xy:
if
p[1] == 0:
# y的坐标为0,说明在第一行
图片列表.append(打开图片.crop((p[0], 0, p[0] + 13, 25)))
if
p[1] == 25:
# y的坐标为0,说明在第一行
图片列表.append(打开图片.crop((p[0], 25, p[0] + 13, 50)))
if
p[1] == 50:
# y的坐标为0,说明在第一行
图片列表.append(打开图片.crop((p[0], 50, p[0] + 13, 75)))
if
p[1] == 75:
# y的坐标为0,说明在第一行
图片列表.append(打开图片.crop((p[0], 75, p[0] + 13, 100)))
新建图片 = Image.new(
"RGB"
, (260, 100))
x = 0
y = 0
for
i
in
图片列表:
if
x == 260:
# 从左贴到右了
x = 0
y += 25
新建图片.paste(i, (x, y))
x += 13
新建图片.save(
"456.png"
)
原文始发于微信公众号(Web安全工具库):某网站验证码绕过详解
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论