php - 验证码解码

标签 php javascript security

我看到一些验证码正在使用 javascript、php 等进行解码。他们是怎么做到的?

例如,非常流行的 megaupload 站点的 captcha has also been decoded .

最佳答案

我是图像处理专家和验证码解码器,我之前做过很多验证码解析项目。

OK,下面开始验证码解析步骤!

解码任何类型的验证码有 3 个主要步骤:

1- 去除背景

清除验证码中的任何噪音(使用任何图像处理方法)。

验证码解码斗士注意事项:如果你想有一个好的验证码,你应该添加更强的噪音。使用具有相似字符颜色的随机噪声背景。

2- 分割字符

当它们分开时很容易,当它们不分开时非常困难。

*验证码解码斗士注意事项:要想有好的验证码,千万不要把字符分开!让它们重叠,不要对字符使用不同的颜色,解码器可以很容易地分割字符! (大多数开发人员都没有意识到这一点,并认为最好使用彩色验证码!),最好的方法是用黑色制作一个重叠的字符串。对于一个经验丰富的验证码解码器来说,解码一个彩色的验证码不是问题!只是好看没用! :) 使用随机曲线将所有字符相互连接起来。 *

3- 将单独的图像转换为字符

分离后,我们有了一个字符集,(我们现在没有任何字符串,只有图像和像素),我们应该将字符图像转换为字符串,但是如何呢?! 有几种方法,如果它们没有旋转,并且有固定的字体和大小(例如 freeglobes CAPTCHA),你可以定义一个模式集,你的程序应该循环抛出模式以找到每个图像的最佳匹配,如果字符非常不同,需要一个大模式,你应该使用“神经网络”来识别这个 Angular 色。一个用于 CAPTCHA 解析的神经网络,需要一个字符,我们告诉网络这个字符是什么,例如,我们会给它一张“A”的图像,然后我们告诉神经网络:它是“A”! ,然后它将“学习”这个 Angular 色并将其学习保存到数据库中,这个过程称为“训练”。因此,当我们再次向训练有素的网络询问新 Angular 色时,它会从它的学习数据库中返回给我们最佳匹配。 通常解码专家使用验证码本身来训练神经网络。当心! 使用适当的数据进行训练可以成就或破坏你的结果。

captcha 解码斗士注意事项:如果您想拥有一个好的 CAPTCHA,请使用解码器无法识别字符的任何方法,即使使用神经网络也是如此。随机变形字符,使用多种字体而不是一种字体以及旋转字符等。

最后,我们将所有单个字符连接成一个并将其作为结果返回。

不幸的是,没有解决任何验证码的固定算法,这意味着,新的验证码需要新的分析和训练。您无法制作验证码解码器来解码所有验证码。

开始之前你应该知道什么:

1- 图像处理基础知识

2- 对神经网络的一般理解

3-简单的图像处理函数(任何语言)

对于 PHP:

imagecreate()

imagecreatetruecolor()

imagecolorat()

imagecolorsforindex()

imagesetpixel()
.
.
.

对于 .NET:

Bitmap type,
getPixel()
setPixel()
.
.
.

对于 JavaScript 和 HTML5:

You should know the Canvas very well.

最后: 验证码解码斗士注意事项:如果你对有人如何解码验证码并想阻止它解码感到疑惑,你首先应该自己做一个验证码解码器或聘请熟知弱点和攻击算法的人!

希望有所帮助! ;)

关于php - 验证码解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880519/

相关文章:

php - 如何从数据库制作动态菜单模块

javascript - 我需要在 ionic 应用程序中读取 epub 文件

android - 在Android中录制并保存音频,其他应用程序不应访问该音频?

php - 如何在 PHP 中制作个人哈希算法

php - fatal error : Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:

javascript - 在兄弟组件之间共享数据,同时它们都使用 *ngIf

javascript - 如何检测破解的JS验证?

node.js - AWS Lambda 安全 - 默认访问 Cognito?

php - Zend framework 2 表单选择元素集需要 false

javascript - 使用 d3.js 和 topoJSON 创建非洲 map