最近玩FLASH游戏感觉挺有趣的,4399联合百田网运营一款网页FLASH游戏叫《奥义联盟》。
这个游戏是MOBA类型游戏的缩水版,技能缩减到1个,由空格发出,技能和普攻的方向全部都是鼠标指向性的,上下左右WSAD,还有一个特殊技能F。
玩这个游戏最主要的是要鼠标瞄准,同时WASD走位要会躲避攻击。
基本思路:
1.FLASH破解,读到敌人(X,Y)坐标的位置和自己的位置计算出角度,让电脑自动将鼠标停到对应的位置。
2.图像处理。
我选择了尝试图像处理
先说FLASH破解的问题,得需要懂相当多的网络安全方面的知识,同时也要了解FLASH游戏的运行机制,比如后台是怎么传数据的,数据是否被加密了之类的。
实现起来需要费很大一番功夫,简而言之,学习成本太高。
那么,图像处理呢?
图像的处理本质是对数据的处理,目前还没有能做到实时完全图像处理并且精确率特别高的,可以参考人工智能汽车。即使是深度学习框架,也不能保证稳定性,需要大量的训练集。当然,普通的比对图片谁都能做到,但是动态画面处理起来就有一定的难度,在吃CPU的同时,效率还不一定高。所以大部分FPS游戏外挂都是从游戏内存下手的,很少有人会去动图像处理这一块儿,图像处理毕竟是个很大的问题,而且单从效率上讲,处理单纯的坐标可比大量比对图像效率高太多了……
但是针对《奥义联盟》这样的游戏,其实最重要的还是瞄准,它毕竟不是3D游戏,处理都在平面上,我想,以图片比对的形式也许可以实现。
这里有一个思路,用鼠标点击敌人,截图一块小于敌人身体的图片,尽量做到像素最少。
对FLASH游戏画面进行截屏-对比-删除的操作,当发现一致,对敌人进行红色标记,先做一个测试。
如果行得通且效率不差的话,将鼠标钉死在目标身上,只需要控制WASD和空格就行了,这么一来可以专心走位。
需要学习的内容有:
C#钩子函数,C#桌面绘图,C#键盘鼠标控制。
钩子函数主要体现在对键鼠的事件处理,桌面绘图主要用来标记技能范围,键鼠控制用来瞄准。
图像对比的话,C#网上能一堆图像对比的类,这里涉及到算法这一块,不用管它,直接用就是。(基本是像素点的比对)
2020年1月1日更新
这个游戏已经屏蔽了基本的鼠标键盘控制函数,使用PostMessage方法能点击游戏内图标,但无法在战斗中自动射击。
用Mouse_event也是同样的效果。
这里摘取到了一个比较有意思的内容:
keybd_event不好使很正常啊 游戏貌似有NP保护吧 当然过NP保护是比较麻烦的 但是如果你能好好利用keybd_event的汇编源码 那估计NP就失去作用了 因为NP是把keybd_event的函数头jmp到另一个地方了
2020年5月18日更新
我基本上放弃了靠找图对比做辅助的想法,因为找图对比是不切实际的,原因如下:
① 准确率低
② 占用资源超高
③ 无法达到毫秒级的反应,效率低下