看我怎么编写一个验证码辨认程序

访客5年前关于黑客接单896

在此之前我收到了一些读者对我的反应,他们期望我能够在文中解说相关解析器的开发流程。为了满意我们的需求,我决议和你们共享一个我非常重要的项目的完好施行进程。话不多说,让我们现在就开端!
当我开发这些脚本时,我对图画处理或其间的算法没有任何的了解或认知。最开端时我所能想到的便是:
图画根本上是一个矩阵,像素作为独自的单元格。
五颜六色图画具有每个像素的元组(红,绿,蓝)值,灰度图画具有单个值,而且一般图画中每个像素值的范围在(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]  黑客接单网

相关文章

运用Python CGIHTTPServer绕过注入时的CSRF Token防护

CSRF tokens是服务器生成的一串随机值,其主要作用是防止表单重复提交以及恳求假造进犯。由于该生成值具有随机性,一次性,而且是根据服务器端的前一个恳求生成的,因而黑客简直不可能假造它。 Burp...

如何在AIX和Power架构上运行Metasploit Framework-黑客接单平台

本文将向咱们介绍如安在AIX和Power架构上运转Metasploit结构,这关于那些想要测验在这些架构上运转Metasploit的人可能会有所协助(至少现在我还没有在网上发现关于这方面的教程内容)。...

鱼叉式网络钓鱼攻击——一份关于攻击动机、技术和预防方法的完整指南-黑客接单平台

每天都有不计其数的鱼叉式垂钓邮件发送给全世界的受害者。 进犯有许多不同的途径,不管怎样进犯,都会对您的网络形成损伤。 所以,精确的、有针对性的进行剖析和履行是至关重要的。 在本指南中,咱们将介绍鱼叉式...

保证你网页的安全

 从技能到安全, 这是一个趋势. 曾经寻求的是比较炫酷的技能, 等完成往后发现, 自己还能做什么. 炫技完了之后,差不多就该到悟道的时分了. 用户安全, 便是一个很大的禅. 苹果回绝 FBI, goo...

运用Burp的intruder功用测验有csrf维护的应用程序

许多Web运用会有避免跨站恳求假造的战略,比方经过request恳求传一个当时页面有用或许当时会话有用的参数(假如他们没有,那就很值得研讨)。这些参数用来证明这个恳求是从预订用户宣布的,而不是进犯者那...

DVNA:Node.js打造的开源攻防渠道

这是一款仍在活跃研制中的软件,假如你想要现在测验它现有缝隙,需求确保自己添加了Express结构。 DVNA简介 首要,期望咱们多多支撑UX/UI,协助咱们修正bug和优化文档。 DVNA(Damn...