脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - 详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

2022-10-05 16:05落伍的码农 Python

很多网站在登录或者注册时都会遇到拼图验证码,这种拼图验证码实际上是多个小碎片经过重新组合成的一张整体。本文将和大家分享一个基于Python Genetic Algorithm的破解拼图验证码的办法,需要的可以参考一下

首先看一下目标的验证形态是什么样子的

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

是一种通过验证推理的验证方式,用来防人机破解的确是很有效果,但是,But,这里面已经会有一些破绽,比如:

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

(以上是原图和二值化之后的结果)

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

(这是正常图片)

像划红线的这些地方,可以看到有明显的突变,并且二值化之后边缘趋于直线,但是正常图像是不会有这种这么明显的突变现象。

初识潘多拉

后来,我去翻阅了机器视觉的相关文章和论文,发现了一个牛逼的算法,这个算法就是——Genetic Algorithm遗传算法,最贴心的的是,作者利用这个算法实现了一个功能,“拼图自动还原”(不是像什么A*算法寻找最优路线解那种哈,就是单纯的拼图)项目仓库地址 首先来介绍下如何使用跑起来这个项目吧,坑是真的很多,接下来感受一下pyCham的一路报错! 这里我用的是python3.10的版本,目前是最新的版本 文档中这一步执行是会报错的

pip3 install -r requirements.txt

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

解决方案:单独对requirements.txt文件下的每个包单独下载,然后根据当前下载的包的最新版本替换旧版本号。

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

我目前每个包最新使用的是这些版本号

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

全部替换完了之后,再执行一次下面的代码,他就不会报错了

pip3 install -r requirements.txt

然后下一步,执行下面代码

pip3 install -e .

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

进入潘多拉

然后我们按照官网的提示来执行,先创建一个拼图出来,命令是这样的(这里的文件名我改了)

create_puzzle images/starry.jpg --size=60 --destination=puzzle.jpg

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

会发现,好像不行,因为我们没有在正确的位置上执行,他的脚本位置是在bin文件夹下面,你可能会遇到如下问题

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

成功之后的话,会在bin目录下生成一个拼图图片

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

以上是介绍如何生成图片,接下来是重头戏,如何还原图片

gaps --image=puzzle.jpg --generations=20 --population=600

对于参数的解释官网是这样的:

Option : 

--image Path to puzzle(需要被还原的图片)

--size Puzzle piece size in pixels (拼图的大小)

--generations Number of generations for genetic algorithm (遗传算法的代数)

--population Number of individuals in population

--verbose Show best solution after each generation (显示每一代后的最佳解决方案)

--save Save puzzle solution as image (拼图结果另存为图像)

先按照官方的走一遍

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

很好,很舒服,继续报错,而且语法拼写上我们也没有拼写错,没关系!我已经帮你找到解决方案了。

python gaps --image=puzzle.jpg --generations=20 --population=600 --size=60  --save

或者你不指定遗传代数和人口数

python gaps --image=puzzle.jpg --size=60 --save

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

这是完全还原的结果,至此,我们披荆斩棘从解决项目报错,一路挖坑填坑到demo成功运行,到这里我们已经成功了60%,接下来就是如何利用这个项目,去破解网易易盾的推理拼图验证。

探究潘多拉的秘密

首先看一下项目目录:

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

gaps文件夹下面是所有模块的源码,作者对各个基础功能做了封装,但是我们想要的功能并不存在,就需要自行阅读和理解源码,然后二开实现自己想要的功能。

我们主要关注这个文件individual.py:

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

我来用大白话给你翻译一下吧,“在所有排列中,帮你找出最优解”

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

输出这个映射,结果是这样的,正好是我们想要的东西

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

下面会有一个创建图像的方法,这是最后得到最优解图像拼接函数

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

那么,我们将最后的索引映射取到就OK了!

以下为最优解的映射值输出实例:

初始化的时候,新增一个变量用来存储最后的结果

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

self.pieceMapping = None

自定义一个函数

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

# 返回映射值
def getPieceMapping(self):
        return self.pieceMapping

每次执行的时候,将最优解传递出去

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

def to_image(self):
    """Converts individual to showable image"""
    pieces = [piece.image for piece in self.pieces]
    self.pieceMapping = self._piece_mapping
    return image_helpers.assemble_image(pieces, self.rows, self.columns)

以上,就把我们想要的结果输出了

调用:

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

key为最后的结果标志,value为原始标志。

PS:对于极度复杂的原始图片创建的拼图,在还原之后,误差会挺大的。

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

到此这篇关于详解Python结合Genetic Algorithm算法破解网易易盾拼图验证的文章就介绍到这了,更多相关Python Genetic Algorithm内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Python_shannian/article/details/122944778

延伸 · 阅读

精彩推荐
  • Pythonpython如何使用unittest测试接口

    python如何使用unittest测试接口

    这篇文章主要为大家详细介绍了python如何使用unittest测试接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    爱唱歌de小青蛙5762021-01-28
  • Python小众实用的Python 爬虫库RoboBrowser

    小众实用的Python 爬虫库RoboBrowser

    这篇文章主要介绍了Python 爬虫库RoboBrowser的使用简介,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...

    AirPython12352021-09-22
  • Pythonopencv实现图片模糊和锐化操作

    opencv实现图片模糊和锐化操作

    这篇文章主要为大家详细介绍了opencv实现图片模糊和锐化操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    elegentbeauty11512021-04-21
  • Python深入浅析ImageMagick命令执行漏洞

    深入浅析ImageMagick命令执行漏洞

    ImageMagick是一个功能强大的开源图形处理软件,可以用来读、写和处理超过90种的图片文件,包括流行的JPEG、GIF、 PNG、PDF以及PhotoCD等格式。接下来通过本文给...

    Joy_nick5252020-09-10
  • PythonPython复制Word内容并使用格式设字体与大小实例代码

    Python复制Word内容并使用格式设字体与大小实例代码

    这篇文章主要介绍了Python复制Word内容并使用格式设字体与大小实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下...

    txlgl17232021-01-07
  • Pythonpython在openstreetmap地图上绘制路线图的实现

    python在openstreetmap地图上绘制路线图的实现

    这篇文章主要介绍了python在openstreetmap地图上绘制路线图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    AAAAAAAKing12822021-08-07
  • Pythonpython 列表中[ ]中冒号‘:’的作用

    python 列表中[ ]中冒号‘:’的作用

    中括号[ ]:用于定义列表或引用列表、数组、字符串及元组中元素位置,冒号: 用于定义分片、步长。这篇文章给大家介绍python 列表中[ ]中冒号‘:’的...

    学好Python吧5962021-06-22
  • Pythonpython psutil库的使用示例

    python psutil库的使用示例

    这篇文章主要介绍了python psutil库的使用示例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...

    刀十一5892021-09-22