@@ -39,7 +39,7 @@ Wooyun的验证码有两种状态
3939
4040一种是白色文字深色背景 一种是黑色文字浅色背景
4141
42- 如果只有一种无论是那种设定一个阀值都能很好的二值化 但现在的情况却是有两种 所以我能想到的最简单的方式 那好 我就给出两个阀值 对于黑色文字我就用一个较小一点的阀值 对于白色文字我就用一个较大一点的阀值
42+ 如果只有一种无论是那种设定一个阈值都能很好的二值化 但现在的情况却是有两种 所以我能想到的最简单的方式 那好 我就给出两个阈值 对于黑色文字我就用一个较小一点的阈值 对于白色文字我就用一个较大一点的阈值
4343
4444但是这样还是会出现一个问题 白色文字二值化后背景黑色文字白色 而黑色文字二值化后背景白色文字黑色 就像下面一下
4545
@@ -51,11 +51,11 @@ Wooyun的验证码有两种状态
5151
5252![ p6] ( http://www.vuln.cn/wp-content/uploads/drops/20160224/201602241011486925665.png )
5353
54- 这样做还有一个问题就是 我应该怎么知道什么时候应该使用那一个阀值来二值化 当然办法可以有很多 比如当图像上深色像素多余浅色像素的时候使用较大阀值 否则相反 不过我并不是这样做的
54+ 这样做还有一个问题就是 我应该怎么知道什么时候应该使用那一个阈值来二值化 当然办法可以有很多 比如当图像上深色像素多余浅色像素的时候使用较大阈值 否则相反 不过我并不是这样做的
5555
5656![ p7] ( http://www.vuln.cn/wp-content/uploads/drops/20160224/201602241011508543074.png )
5757
58- 在工具上我提供了一个框让用户输入验证码的字符个数 这样的话我对体统的阀值挨个遍历 二值化后去识别区域 如果框出来的区域个数是有问题的 那么就换下一个阀值 如果所有阀值都遍历完了还是有问题 那么这验证码确实也是超出这个工具的范围了 因为这个工具的目的是通用 对于那些需要单独写代码来识别的不在他的能力范围内
58+ 在工具上我提供了一个框让用户输入验证码的字符个数 这样的话我对体统的阈值挨个遍历 二值化后去识别区域 如果框出来的区域个数是有问题的 那么就换下一个阈值 如果所有阈值都遍历完了还是有问题 那么这验证码确实也是超出这个工具的范围了 因为这个工具的目的是通用 对于那些需要单独写代码来识别的不在他的能力范围内
5959
6060在这之前一些验证码可能还需要一些处理比如很常见的一些验证码有边框的
6161
@@ -69,7 +69,7 @@ Wooyun的验证码有两种状态
6969
7070上面这张图不怎么能看到效果 因为都是好几年前的事情了 验证码连接访问已经是500了 这张图都是测试的时候的截图
7171
72- 我描述一下情况吧 上面的验证码 首先有边框 文字 干扰线 即使能把边框裁剪掉也找不到一个合适的阀值来把线条和文字分离 很简单因为他的线条的颜色比文字的颜色深 如果我的阀值太小 那么我的文字就没有了 只会剩下一些线条在哪里
72+ 我描述一下情况吧 上面的验证码 首先有边框 文字 干扰线 即使能把边框裁剪掉也找不到一个合适的阈值来把线条和文字分离 很简单因为他的线条的颜色比文字的颜色深 如果我的阈值太小 那么我的文字就没有了 只会剩下一些线条在哪里
7373
7474![ p10] ( http://www.vuln.cn/wp-content/uploads/drops/20160224/2016022410115523720102.png )
7575
@@ -79,19 +79,19 @@ Wooyun的验证码有两种状态
7979
8080别百度推广的验证码是我做的第一个验证码识别程序 所以我一直记得很清楚 不是一个二值化就能搞定的 所以说在这个工具中我也加入了同样可以单独处理RGB的功能
8181
82- 由于百度的这个验证码已经访问不了了 所以我找了一个同样有线条的验证码 但是这个验证码线条颜色比文字颜色浅 所以我就用默认的127作为阀值 假设二值化无法搞定
82+ 由于百度的这个验证码已经访问不了了 所以我找了一个同样有线条的验证码 但是这个验证码线条颜色比文字颜色浅 所以我就用默认的127作为阈值 假设二值化无法搞定
8383
8484![ p12] ( http://www.vuln.cn/wp-content/uploads/drops/20160224/2016022410115822426122.png )
8585
86- 用127阀值上面线条一起被黑化了 但是图片中文字颜色接近黑色而线条颜色却要浅一点 所以判断的时候 可以认为RGB的平均值大于20的就视为背景 就可以这样干
86+ 用127阈值上面线条一起被黑化了 但是图片中文字颜色接近黑色而线条颜色却要浅一点 所以判断的时候 可以认为RGB的平均值大于20的就视为背景 就可以这样干
8787
8888![ p13] ( http://www.vuln.cn/wp-content/uploads/drops/20160224/2016022410115942913132.png )
8989
9090然后效果就成了这样
9191
9292![ p14] ( http://www.vuln.cn/wp-content/uploads/drops/20160224/2016022410120160398141.png )
9393
94- 这样线条就被处理掉了 不过这个验证码直接设置阀值就能搞定 只是为了说明所以采用127作为阀值 还有一点这个验证码和百度的那个 他们线条都是在文字的下方 如果是在文字上方 那么同样的超出了这个工具的范围 对于线条在上方的 我想过一些处理方式 假设线条为红色的时候 我在遍历的时候遇到一个红色像素点 我就把红色像素设置为和他相邻像素的非红色的颜色 但是我想了一想这个“相邻”就涉及了它周围八个像素点 我应该取那一个像素点的颜色 如果是在背景上还好 他周围应该都是背景的颜色 那一个都无所谓 可是如果是在线条、背景还有文字的交界处就不好处理了 所以工具里面暂时还没提供这样的功能 还有那种很难分离背景或者字黏贴在一起的但是每个文字都是一个颜色的那种 也想过一些处理方式 但是实现起来我感觉都会纯在一些小问题 所以就还展示没有做 就不扯那么多了 等做好了再来扯 才比较有证据
94+ 这样线条就被处理掉了 不过这个验证码直接设置阈值就能搞定 只是为了说明所以采用127作为阈值 还有一点这个验证码和百度的那个 他们线条都是在文字的下方 如果是在文字上方 那么同样的超出了这个工具的范围 对于线条在上方的 我想过一些处理方式 假设线条为红色的时候 我在遍历的时候遇到一个红色像素点 我就把红色像素设置为和他相邻像素的非红色的颜色 但是我想了一想这个“相邻”就涉及了它周围八个像素点 我应该取那一个像素点的颜色 如果是在背景上还好 他周围应该都是背景的颜色 那一个都无所谓 可是如果是在线条、背景还有文字的交界处就不好处理了 所以工具里面暂时还没提供这样的功能 还有那种很难分离背景或者字黏贴在一起的但是每个文字都是一个颜色的那种 也想过一些处理方式 但是实现起来我感觉都会纯在一些小问题 所以就还展示没有做 就不扯那么多了 等做好了再来扯 才比较有证据
9595
9696# 0x02 拆字和识别
9797下面来说说验证码识别中的一个难点 -> 拆字
0 commit comments