查看: 90|回复: 0

[转载图文] 003 通过内存关系找万能按键call

[复制链接]

29

主题

37

帖子

1

精华

VIP

Rank: 16

学币
360
荣耀
0
rank
200
违规
0

鬼斧神工

发表于 2020-6-9 01:31:48 | 显示全部楼层 |阅读模式
                                                                                        文章目录

    • 什么是万能按键call
    • 切入点
    • CE搜索背包状态
    • 通过内存关系找万能按键call
    • 万能按键call参数分析
    • 总结
什么是万能按键call  当我们在游戏中敲击键盘的按键时,游戏会对键盘事件会做出响应,去执行某些功能。
  以口袋西游为例,按B键会打开人物背包,通过B键打开背包的这个call就是万能按键call。
  只要找到这一个call,就相当于找到了所有的按键call,因为剩下的所有的快捷键功能都会走这一个call。而且这个call实用性也比较强,可以用来替代很多的游戏功能。
切入点  当我们点击B键时,背包会被打开,再次点击,背包会被关闭。

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  那我们就可以先用CE搜索到背包打开和关闭的状态,之后再对这个状态下一个写入断点,通过栈回溯的方式就能找到这个万能按键call。
CE搜索背包状态  背包打开和关闭的状态是一个标志位,可能是0和1,也可能不是。这里只能进行尝试,如果0和1没找到就需要利用未知的初始值和变化的值来找到这个标志位。

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  在背包打开状态下扫描1,注意这里需要用1字节进行扫描,4字节是扫不出来的

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  关闭状态下扫描0

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  重复这个过程(没啥技术含量),直到筛选出唯一一个背包状态标志位,我这里过滤剩下两个。
通过内存关系找万能按键call  接着我们在这个地址下一个字节的硬件写入断点,这里有两个要注意的点:
  第一个点是吾爱的OD硬件断点有点问题,建议换个OD;
  第二个点如果下了硬件断点之后这个地方断的很频繁,而且数值的变化范围超出了0和1说明标志位找错了。
  然后点击B键,让游戏断下

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  删除硬件断点,打开调用堆栈

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  挨个下断点分析参数排查,6296F0这个call就是我们要的万能按键call
万能按键call参数分析  这个call和我们之前找的call有一定的区别。正常找的call一般是调用一次,而这个地方会断下来两次。
  原因在于这个call是用来响应处理按下键盘事件的,按下键盘事件实际上分为两个动作,一个是按键按下,另一个是按键抬起,对应Windows的键盘事件就是WM_KeyDown和WM_KeyUp。
  接下来分析这个call的参数

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  ebx是300001,无论是按下还是抬起都是一样的,具体含义暂时未知

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  ebp在第一次断下的时候是0x42,第二次断下的时候是62

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  正好是对应按键B的ASCII值,大写的B表示按键被按下,小写的b表示键盘抬起

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  再看eax,按下的时候eax等于100,,抬起的时候eax等于102

003 通过内存关系找万能按键call

003 通过内存关系找万能按键call
  这个参数对应的是当前的键盘状态是按下还是抬起,区别在于把KeyUp改成了102。
  而ecx是一个数据结构,需要往上追ecx的来源,直到把基址追出来。这里就不一步一步追数据,本次的重点是找call,各位有兴趣可以自己去追一下ecx数据的基址。
总结  在api断点不方便逆向的时候,可以通过内存的访问关系下断,然后利用栈回溯来找到我们需要的call。
  另外这个万能按键call,如果是在实际写代码应用的时候,需要写两个call,一次是按下,一次是抬起,在按下和抬起的中间还应该加一个延迟,尽量去模拟真实的键盘事件。
  相关工具:
  https://github.com/TonyChen56/GameReverseNote


温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
嘿嘿
微信公众号
快速回复 返回顶部 返回列表