感谢大家关注天山情报,走好数据之路

欢迎关注天山情报。我们是一个专注于商业智能BI、人工智能AI和大数据分析与挖掘的垂直社区。学习、问答、求职一站搞定!

对商业智能BI、大数据分析与挖掘、机器学习、python、R等数据领域感兴趣的同学加微信:tstoutiao,邀请你加入数据爱好者交流群,数据爱好者都在这里。

作者:三级狗 长不帅的程序猿小哥哥 Python爱好者社区专栏作者,授权发布,未经容许,禁止转载,谢谢。知乎ID:三级狗出处:https://www.zhihu.com/question/275611095/answer/407984155

https://v.vzuu.com/video/988051229884395520

https://v.vzuu.com/video/988051263417872384

Python写连连看插件,图2的时间间隔设置为0,有点吓人。我用一个简单的opencv图像识别结合连连看算法。如果关注度够,我会回来填写具体的实现思路和源地址。希望不会收到腾讯爸爸的律师函?

先手动画一条华丽的分割线~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~。

刚拿到知乎账号不到两周。第一次在知乎回答。不到两天,800的赞,440的收藏,130的关注,66的感谢,100多个各种评论,真的吓到我了。第一次接触这个问题的时候,觉得小猪佩吉可以夸3k+,我也可以吗?我试图发送这个插件。看来影响不小。有人偷偷问我是不是骗子,吓得我赶紧回来补上约定好的实现思路和源代码连接。谢谢你的爱。现在我来好好回答一下这个问题。

源代码

源码连接:先点击这里,再点击star,用python2写了快半年了。我想用python3重构挂在github上的版本,但是当时只写了一个开头,后来就不了了之了。这个回答发出去了,关注度如此之高,我想起我的github挂了一个半la的项目,让我不好意思今天下班后赶紧写完python3版本,还要管理所有的思路和代码。如果你觉得还不错,就给个星吧。毕竟你还年轻,虚荣心强。谢谢!

需要用力敲黑板强调一下,Github上的项目里有一个连连看游戏,而且那个插件是用来破解这个游戏的。如果想破解QQ连连看,可以把config.py中的配置改成QQ连连看的对应配置,但是我不提供配置。如果是你自己想出来的,建议你自己去偷,不要打广告。如果你一定要到处炫耀...我真的没脾气,毕竟我是自己做的。

实现理念

以下内容,达成党可以不看,毕竟大家比较感兴趣,一定是上面的链接。该项目约有350行源代码和150行注释。是的,实现起来比你想象的要简单得多。接下来,我将解释这个插件是如何以我自己的方式实现的,尽可能简洁,让大多数人都能理解。

首先我们来想想人类是怎么玩连连看的。

游戏开始的时候,看整体情况,把两个一模一样的可以连起来的图片扫一眼,用鼠标点击,先点击第一张,再点击第二张。随着闪电的“撕裂”,两个方块马上爆炸,酷炫的就不用了,以此类推,直到游戏结束。这些要点可以通过以上操作进行细化:

1.图片应该是一样的。我们人类一眼就能看出这一点

2.两点可以连接。很多人还是不知道怎么联系,怎么不联系。反正他们看了就知道具体硬性规定不是特别清楚。

3.一个一个点击。如果刚点的两张图是一样的,可以连起来,那就是在“撕”一道闪电,让你感觉良好。

回到问题,人类就是这么玩的吗?那台机器能这样玩吗?

答案是肯定的,电脑操作这么快,如果能想办法让他像人类一样操作,是不是就不容易享受到“撕啊撕”的快感了?我们唯一需要做的就是躺下让她动起来。哎呀!错误!想到这个问题就很清楚了。我们希望计算机以自己的方式执行与我们相同的操作,借助CPU热,我们可以达到力所不及的速度。那么计算机怎么能像我们一样思考和操作呢?回到上面分析的三点:

它应该能识别屏幕上的同一张图片。它需要知道两张图片是否可以连接。它应该能像人一样点击屏幕。

就像把大象放进冰箱一样,用电脑代替人脑只需要三个简单的步骤。

第一步:它应该能够识别屏幕上的同一张图片。

它如何在屏幕上识别游戏中的小方块?你一定想到了图像识别。屏幕中间的小方块非常规则,颜色值有明显规则的渐变变化。一些图像识别算法可以使程序识别屏幕上的小方块。没错,但是这么做很麻烦。在这里,我必须向大家提一句:无论是产品设计还是编码实现,都要遵循一个核心原则:道路简单!对简来说,大道是什么?意思很复杂,我也不会,简单怎么做?首先找到游戏窗体的位置,然后从屏幕上切下一张图片,在游戏窗体顶点的水平和垂直坐标上加一个数字,找到游戏区域。然后通过图像切片的手段,从C点开始,以正方形的宽度为高度为步长,将图像切割成N个小块,然后比较这些图片是否相等,用相同的数字来识别相同的。

至于我怎么知道正方形的宽度和高度,以及顶点到游戏区的距离?这个截图是我拍的PS,不然我会拿尺子量一下。。。

第二步:确定两张图片是否可以连接

图像已转换成数据。数据怎么处理?这里要说一下连连看的算法。其算法与其规则密切相关,其规则与拐点相关:两个正方形的路径上最多可以有两个拐点。如果不能用两个拐点连接,就不能连接。其实在算法上很容易写:很容易判断两点是否可以直接相连,只需要判断两点之间的路径是否都是0。那么,当两个点通过一个拐点相连时,就是判断两个点从一个点到拐点再从拐点到另一个点是直接相连的。然后是两个拐点的情况,即从一个点到拐点的直接连接+从一个拐点到另一个拐点的单个拐点。这样写下来,几乎都是嵌套调用,最后都集中在直线的标定上。

第三步:如果可以连接,模拟鼠标点击屏幕

第二部分判断的两点是可以连接的,需要程序点击两点。通过判断刚才两点的坐标,就可以知道我们只需要把鼠标点击时间发送到这两个坐标上。这里模拟可以通过python win32 API来实现,深思熟虑的回答在源代码开头附上了pywin32下载链接。

最后,重复上述步骤

电脑会以惊人的速度给你反馈“撕啊撕”的快感。请允许我在这里装逼。上面的视频2我搞错了,是0.01秒的时间间隔。真正的0间隔效果是紫色的:

有些闲蛋后面跟着一些闲内容,这是我的看法和讨论。可能没有技术含量和价值,不喜勿喷。

图像识别呢?

相信很多人看了思路和源代码都会失望。根本没有高端的算法和逻辑。要说好的图像识别,就是说用opencv函数比较图像是否相等。当然插件是真的实现了,挺震撼的。理想情况下,当然是通过图像识别找到相同的图片,然后分析计算,再自动剔除。但是我不那么做的原因上面已经提到了,我真的不会...-_-| |

该计划仍有许多需要改进的地方

1.这个插件程序有很大的局限性。从我上面的分析可以知道,很多都是基于固定坐标计算的。其实只要腾讯爸爸支持这个游戏的缩放,这个插件就跪下了。但腾讯没有。从我记事起,游戏已经15年没更新了。600*800像素像婴儿版一样显示在我同事的外星人上。可能是看不上这一天2万人的用户数,或者是通过开发新版《快乐楼主》赚更多的钱。2.如果速度定得慢,别人先赢就尴尬了。别人赢了以后再点击屏幕是无效的,但是程序还是会让鼠标点击相应的位置。您不能移动它来停止程序。在您移动鼠标之前,它将被移动到另一个位置。这里应该设置一个中断wit,可以随时停止程序。3.我用opencv+numpy读取切片图片,检查图片是否相等。后来同事给了我一个思路:1。PIL本身可以切片图片;2.operater.eq可以检查两个对象是否一致,绝对可以检查切片图像。这种情况下,完全不需要opencv和numpy,完全不需要图像识别。如果您这样做,代码量可以比现在更精简。

关于插件

实现插件的方法有很多。我说几个主流的,大家的评论里有很多评论。1.大部分都是外挂的主流做法,就是直接在这个机器上换内存。如果你的游戏在我的地方运行,那么代码就要加载到我的内存中才能运行,然后内存中的数据再被抽象出来,总会有高手能把它打得落花流水。比如这个连连看,我也可以通过读取内存直接得到它的正方形布局的数据,直接把所有数据都改成0,那么我马上就赢了。但是,这样做很麻烦。在这里我必须向你提一句:无论是产品设计还是编码实现,都要遵循一个核心原则:道路简单!对简来说,大道是什么?意思是复杂。真的不行。。。有一些游戏数据必须在本地处理,所以很容易遇到这样的插件。比如地牢和勇士无限刷图,吃鸡就可以说吃鸡。这样的第一人称射击游戏是不能放到服务器上判断的。第一,无法判断;第二,由于网络的影响,不能满足实时性的要求。所以错过一个镜头,一定是局部计算。既然是在本地记忆中,一旦防范不到位,就可以有人给你改,我们称之为“飞藏锁金身”。像LOL这样的插件很少。一方面,反外挂投入力度大;另一方面,因为您的所有操作都是由服务器计算和反馈的,所以不存在篡改本地数据的风险。2.另一个插件,通过网络欺骗数据,而不是改变本地计算机上的内存,在数据协议被黑客窃取或破解时很常见,所以他可以根据协议格式发送伪造的数据来欺骗服务器。我见过这种插件,比如GTA5在线版。当时回答问题的室友花了50块钱买了插件,插件赚的钱源源不断的出去了。退出后登录会消失,但如果用钱买资产,资产就是你的了。看起来也很酷。感觉插件应该是偷个加钱的接口,然后发模拟数据不断刷。3.另外我的插件用程序模拟用户的一些操作,类似于按钮精灵的意思。得益于计算机卓越的计算速度,它往往可以达到人类无法达到的水平。除了我的连连看,还有之前微信跳转的插件。而且这种插件也很难防范,有时候程序无法判断操作是来自用户还是代码。

关于进攻和防守

我是这个插件的作者,所以我也想谈谈如何防范这个插件。来说说我为鹅厂想的一些阻止这个插件的方法。1、最有效的:表格缩放。如果这个游戏的形式可以缩放,那么我的插件基本没什么用,除非你每次玩都能缩小到一个固定的大小,而且每次保证都是一样的。如果表单的缩放真的被修改了,那么我的插件就要通过真实图像识别来完成了。当然,那会很麻烦...我不会。2.检测时间间隔。如果每次间隔都是一样的,就当是外挂。这是愚蠢的方法之一。你不知道用python生成一个随机数有多容易。随便弄个0.5~2秒的随机数就行。那家伙比真人还真!3.检查驱动程序级别,查看是否有鼠标输入。这个原理很简单,很难实现。让程序代码驱动底层去检测。如果鼠标点击没有被捕获,但是程序接收到鼠标事件,这意味着程序模拟了这种点击,并直接将其过滤掉。然而,这样做的成本非常高。驱动底层windwos编程可能会带来巨大的兼容性问题,XP,win7,win10可能不一样。与其这样,为什么你还在日常连连看上和2W用户竞争?投入人力物力发展快乐地主不是更好吗?当然鹅厂有这样的能力和技术手段。回答:我曾经遇到过一个windows键盘监听器,它可以通过使用C++钩子监控全局键盘来监控所有用户输入。但是腾讯QQ的登录框密码完全听不见,说明腾讯在这里做了比钩子更低级的安全处理,也就是驱动级处理。题外话:银行官网登录时,下载的安全控件也可以提供这种级别的保护。四大银行中只有一家会被按键输入挂钩监控。哪个我就不说了。我已经提交了反馈。不知道现在有没有处理。

这个插件可以用其他语言完成吗

当然可以!答案肯定是肯定的。这里面用到的技术都不是非python可以做到的。只能说是用了其他语言,可能会有代码量的问题。比如我用python中的200行有效代码,可能go需要300行。C++400行?Java2000行?大概是这个市场。哦,当然不是什么语言,是html和css。

关于代码中没有给QQ连连看的数据

外挂会在一定程度上损害其他公司的商业利益。虽然不是轮到我考虑鹅厂其他人的商业利益,但我还是不希望插件配置代码从我手里摊开。代码开源是为了交流学习,另一个是为了Github上的丰星。我也不谈伦理。我能做的就是管好自己。作为原作者,希望大家都能做到:不要公开传播破解QQ游戏连连看的配置信息,不要将此代码用于任何商业目的。还有,回答者的内心是脆弱的,请大家不吝交流,讨论以上言论有何不妥,但拒绝侮辱。墨水洒出来已经是深夜了。祝大家做个好梦,仅此而已。

1.《qq游戏连连看外挂 案例教程—200行python实现杀手级连连看外挂程序》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《qq游戏连连看外挂 案例教程—200行python实现杀手级连连看外挂程序》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1677766.html