在此之前我收到了一些读者对我的反应,他们期望我能够在文中解说相关解析器的开发流程。为了满意我们的需求,我决议和你们共享一个我非常重要的项目的完好施行进程。话不多说,让我们现在就开端!
当我开发这些脚本时,我对图画处理或其间的算法没有任何的了解或认知。最开端时我所能想到的便是:
图画根本上是一个矩阵,像素作为独自的单元格。
五颜六色图画具有每个像素的元组(红,绿,蓝)值,灰度图画具有单个值,而且一般图画中每个像素值的范围在(0,255)。
以下是我大学网站的登录界面:
首要,我对验证码做了开始的调查剖析。总结如下:
验证码中的字符位数一直为6位,而且是灰度图画;
字符之间的距离看起来一直保持相同的距离;
每个字符都是彻底界说的;
图画有许多杂散的暗像素,以及穿过图画的线条
我决议下载一个图片验证码,并凭借这款东西以二进制可视化图画(0表明黑色,1表明白色像素)。
我的调查是正确的 – 图画尺度为45×180,每个字符被分配一个30像素的空间来拟合,从而使它们均匀距离。
因而,我的第1步是
将图画裁剪成6个不同的部分,每部分的宽度为30像素。
这儿我挑选运用Python作为我的开发言语,由于它的库最易运用和完成。
经过简略的搜索后,我找到了PIL库。我决议运用Image模块,由于我的操作仅限于裁剪并将图画作为矩阵加载。
所以,依据文档,裁剪图画的根本语法如下:
from PIL import Image
image = Image.open("filename.xyz")
cropped_image = image.crop((left, upper, right, lower))
在本例中,假如你想裁剪榜首个字符,
from PIL import Image
image = Image.open("captcha.png").convert("L") # Grayscale conversion
cropped_image = image.crop((0, 0, 30, 45))
cropped_image.save("cropped_image.png")
被裁剪保存的图画:
我将其包装在一个循环中,写了一个简略的脚本,从该站点获取500个验证码图画,并将一切裁剪后的字符保存到一个文件夹中。
第三次调查 – 每个字符都有明晰的界说。为了“整理”图画中的裁剪字符(删去不必要的线和点),我运用了以下办法。
字符中的一切像素都是纯黑色(0)。我用了一个简略的逻辑 – 假如它不是彻底黑色的,就视为白色。因而,关于值大于0的每个像素,将其重新分配为255。运用load()函数将图画转换为45×180矩阵,然后对其进行处理。
pixel_matrix = cropped_image.load()
for col in range(0, cropped_image.height):
for row in range(0, cropped_image.width):
if pixel_matrix[row, col] != 0:
pixel_matrix[row, col] = 255
image.save("thresholded_image.png")
为了愈加明晰,我将代码使用至原始图画上。
原图:
处理后:
能够看到处理后的图画中的非纯黑像素都已被移除,其间包含交叉图画的线条。
直到项目完成后,我才知道上述办法被称为图画处理中的阈值处理。
第四次调查 – 图画中有许多杂散像素。
循环遍历图画矩阵,假如相邻像素为白色,与相邻像素相对的像素也为白色,且中心像素为黑色的,则使中心像素为白色。
for column in range(1, image.height - 1):
for row in range(1, image.width - 1):
if pixel_matrix[row, column] == 0
and pixel_matrix[row, column - 1] == 255 and pixel_matrix[row, column + 1] == 255 :
pixel_matrix[row, column] = 255
if pixel_matrix[row, column] == 0
and pixel_matrix[row - 1, column] == 255 and pixel_matrix[row + 1, column] == 255:
pixel_matrix[row, column] = 255
输出:
能够看到,此刻图画中的字符根本已被独自分离出来了。
[1] [2] [3] 黑客接单网
原本对系统组件间隙,已经没有什么喜好了. 由于如今补丁下载出得迅速.商业网站已经没有什么系统软件难题了. 即使你应用twwwscan,namp等杀伤力很强的扫描枪也不太可能扫...
SQL注入又称hacking之母,是形成网络世界巨大损失而臭名远扬的缝隙之一,研究人员现已发布了许多关于不同SQL服务的不同进犯技巧相关文章。关于MSSQL,MySQL和ORACLE数据库来说,SQL...
Webshells Webshell用于与受感染服务器交互。走漏数据中包含了三个webshell,分别为HyperShell、HighShell和Minion,Minion很可能是HighShell的...
Raptor是一款选用C言语编写的WEB运用防火墙,运用DFA来阻挠SQL注入、Xss目录遍历等进犯。 编译&装置 $ git clone https://github.com/Cool...
本文就笔者研讨RASP的进程进行了一些概述,技能干货略少,倾向于遍及RASP技能。中心对java怎么完成rasp技能进行了简略的举例,想对咱们起到抛砖引玉的效果,能够让咱们更好的了解一些关于web运用...
发现网上公开过安全狗的办法少之又少,并且根本都是给个大约点就完毕,本文章是将整个进程记录了一遍,因为一开始我也没想到我能成功的绕过去,大约进程是这样:Mysql根底有必要要有–>定位—>f...