查看: 981|回复: 2

[经验分享] LOL卡牌秒切牌的实现方法、原理、伪代码、成品

[复制链接]
发表于 2015-10-25 20:47 | 显示全部楼层 |阅读模式
qq6655443 2015-10-25 20:47 981 2 显示全部楼层
作为一个坚定的Dota党,我决定来毒害loler了。(开玩笑)

说起切牌器,这是个老生常谈的小辅助了,据我所知,有三种实现方式。
  • 封包切牌
  • 内存切牌
  • 抓图切牌
说起这个,我们得简单讲解下这个游戏的运作原理了,知道原理之后,下面就容易多了。

记得好早之前听人说卡牌的切牌是一个线程在不断的计算随机数,然后来取得牌的颜色。你们是不是也是这样认为呢?假使这种说法成立,那么我们完全可以在运算随机数的地方下钩子,来达到想到什么牌就要什么牌,即真正的秒切。

其实不用想这完全是一种错误且荒谬的说法,因为LOL的所有数据均在服务端运算,本地游戏客户端充当一个贴图的角色。这就是为什么lol没有全图,而Dota1却存在全图的原因。(LOL中视野在服务器控制的,没有视野的地方根本不会收到包)。卡牌切牌也是同样的情况,当我们第一次按下W的时候会向服务器发包请求施放技能,然后服务器每隔一段时间会返回给客户端释放结果(即当前牌的颜色),客户端再次按下W即向服务器确定当前牌的颜色,服务器再返回一个新的技能实例给客户端。

这段绕口吗?多看几遍就明白了。

那么知道原理后,我们就可以用第一种方式实现卡牌要指定牌的功能了。

封包切牌的伪代码
  • hook收包call的头部,判断是技能包,且判断释放技能者是自己,且判断技能是W的释放结果。
  • 根据结果判断是否是指定的牌
  • 直接发第二次使用技能的包,从而第一时间锁定想要的牌。



内存切牌的伪代码
  • 同上,从内存直接读取当前技能的状态。
  • 根据结果判断是否是指定的牌。
  • 调用技能call来实现锁定目标牌。

抓图识别的伪代码
  • 模拟W键,同时扫描窗口。(想要高效率的话要算W键技能框的坐标偏移)
  • 根据抓到的图进行对比。(值得一提的是对比的方式就是逐像素扫描,因此根据图片的大小需要循环几百万次。)
  • 根据对比结果再次模拟W键盘来实现锁定目标。



以上三种,毫无疑问是封包切牌速度最快,效果最好。但是需要hook两处,基本上肯定要被crc检测到(过检测是个心理安慰,腾讯只是不想跟你较劲)。抓图识别的这个笨办法,有许多的缺陷,比如图片的分辨率、游戏分辨率、游戏窗口布局、游戏缩放比等,除此之外,识图需要遍历几百万次实在让我不爽,而且成功率不能100%,卡的一比,本人是不屑使用的。内存切牌相对来讲稍微好点,集合了两家之优,现在市场上收费的切牌辅助都是这种类型。但是作为强迫症的我,还是觉得不安全,因为调用call可以通过栈检测来检测到,读内存也可以通过异常和陷阱等检测到。
而实际上,以上三种方案我都做过,虽然勉强能用,但是总觉得不踏实,所以从来没有放出来过。
作为一个拥有几百个皮肤的人来说,以上三种所有用的缺陷,实现是不能让我放心,追求完美的我,经过潜心设计,终于发明了一种完美的方法,不需要注入,不需要hook,不需要调用call,不需要遍历,不需要考虑一切平台因素。
完美解决以上所有问题。
这种方案是什么呢?
资源劫持。

原理和伪代码如下:
  • 将游戏资源中卡牌的4个图标替换
  • 设置触发器(游戏调用各个图标的时候会收到通知)
  • 模拟按W
  • 根据收到的通知,再次模拟W
  • 游客,如果您要查看本帖隐藏内容请回复


q9612150 该用户已被删除
发表于 2015-10-26 19:50 | 显示全部楼层
q9612150 2015-10-26 19:50 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2015-11-6 18:30 | 显示全部楼层
秒切牌的实现方法、原理、伪代码、
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表