56.网游逆向分析与插件开发-游戏增加自动化助手接口-通过UI分析自动药水设定功能

内容来源于:易道云信息技术研究院VIP课

上一节内容:自动药水设定功能的逆向分析-CSDN博客

这次是假设没有之前的思路积累的话,怎样去找按钮事件。

通过ui当做切入点去做,就是一个窗口它显示不显示,游戏怎样控制这个事情,窗口渲染不渲染,它肯定是有一个标志位的东西,默认来讲假设它是0或者1,也就是肯定会通过数据变化找到这个内容的,当找到这个相关的内容以后,接下来就可以很轻松的去处理这个事情。

接下来打开Cheat Engine,如下图选择位置的初始值,然后点击首次扫描

然后把游戏的自动药水设定窗口关闭,然后在Cheat Engine里输入0,再点击 再次扫描,这样一步的意思就是假设 自动药水设定窗口 显示时标志位是1,关闭时标志位是0,如果这样找不到东西,那就把它们反过来,显示时标志位是0,关闭时标志位是1,这样再找,应该就能找到了,这样说的原因是,如果是我们开发这个东西,在显示窗口时肯定是传一个bool或者BOOL类型,一般人也都会这样去做,所以才这样去找,

然后显示出来之后再用1找,就一直重复这一步与上一步的操作就完了

最终找到了33个值,这个时候,这么多数据的原因,是有可能它窗口里每一个按钮,继续往下看

下图红框中,每个按钮都有一个显示不显示的值,所以这么多值是正常的

接下来要看看它有没有与其它界面共享数据,是有共享的,因为我们的自动药水设定窗口没有打开,所在可以再扫一次0

最终就17个了

 在分析的时候可以看出第一个红框的值更新的慢,下面十六个更新的很快,所以直接把第一个给移除掉了

然后把它们的值都改成1

但是很尴尬都没有显示出来,然后通过游戏中的按钮把自动药水设定窗口打开发现,它在这个基础上加了一个1

我们是想找一个象开关一样的东西,很遗憾没有找到,不管是之前的操作失误还是怎样,反正就是没找到,既然没找到那就死马当活马医,因为我们发现不管是快捷键打开自动药水设定窗口还是按钮打开,它会把值加1,会导致数据的变化,这一点是绝对没问题的,既然没问题,那我们就通过这个变化往上找,除非用了多线程技术来回倒,那么否则的话我们一定能够找到,我们要找的地方。所以通过找出是什么改写了这个地址的方式往上找

发现有两个地方改写了它

可以发现一个是减1一个是加1

先保存一下,寄存器信息,98bc81

接下来把Cheat Engine关掉,打开x96dbg调试

一下断点,就会卡主,所以这里是共用的,所以之前保存的哪两个信息图有用了,所以这时要下条件断点

设置完条件断点,再从游戏中打开自动药水设定窗口,就断点住了

然后直接按ctrl+f9在按f8往上找,然后就到了下图中的函数里,到函数之后就是一步一步往上分析的过程了

 0x722A59地址一直找到一个只有自动药水设定功能才会调用的位置,但是到了这里也并不知道这里是偏底层的位置还是偏上层的位置,所以还得往上,就是找到最后一层它们不共用的地方,就是现在有三个接口 a接口 b接口 c接口调用了一个共用的函数,共用函数又调用了一个x函数,x函数又调用了另外的函数,现在不知道是在x函数还是另外的函数里,最好的方式使用共用函数里下手,共用函数的特定就是再往上一层就会跑到abc三个不同的函数,就是按下快捷键a函数响应,bc函数不响应,按下自动药水设定按钮时,b函数响应,ac函数不响应,也就是说现在还是处于abc三个接口共用阶段,所以还得网上找

0x84CB6B 经过一直往上找,最终来到了下图位置,下图位置的代码是一块一块的,它只有按快捷时才会触发,另外两个接口没法触发,所以现在按照我们的逻辑来讲,abc三个地方,现在已经找到a快捷键的这个地方,快捷键调用的地方bc也会调用,所以说快捷键到上一个函数之间是要分析的过程,所以 0x84CB6B位置调用的0x8687F0  函数要重点找。

0x8687F0 函数abc三个接口都会调用它,但是取消按钮也会调用,取消按钮的处理看上一节的分析(通过入参决定的是取消还是其它的),接下来就是分析参数、调用约定、写原型(跟上节一模一样),所以通过这种方式我们也找到了,上一节找到的函数,查找的方式不只这一种,逆向分析的方式有很多种,这只是其中一种,熟练正向开发,逆向的方式也就多了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL——集合算法

算法简介: set_intersection // 求两个容器的交集set_union // 求两个容器的并集set_difference // 求两个容器的差集 1.set_intersection 函数原型: set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);…

史上最好用的SSH工具,好用到超出你的想象

给大家推荐一个功能强大,跨平台切风格很现代化的SSH管理工具——Xterminal。 1、功能特点 布局自由 命令管理 酷炫皮肤 在线编辑 文件上传方式多样 本地融合显示 支持rzsz 文件断点上传 服务器监控 2、来吧,展示 布局自由 双击修改标题 自…

.FileZilla的使用和主动模式被动模式介绍

FileZilla的使用和主动模式被动模式介绍 1.FileZilla的使用和主动模式被动模式介绍1.安装下载2.新建组和用户2.1打开后出现如下界面2.2点击编辑打开组这个选项2.3点击添加组以后,点击确认2.4输入组的名称,列如我输入的niyin2.5点击用户选项2.6像上面一样…

【owt-server】一些构建项目梳理

【owt-server】清理日志:owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client

K8S容器的一则故障记录

一、故障现象 XXX反馈说某某业务服务异常,无法启动,需要进行协助排查。经常会接到这样一个需求,一开始无法清楚知道具体什么问题,需要跟一线运维人员详细做沟通,了解故障问题的细节。 根据一线运维人员的反馈&#xff…

git基础概念和常用命令(日常开发收藏备用)

目录 ### 常用命令 ### 远程仓库与克隆 ### 分支管理 ### 子模块(Submodule) ### 其他高级操作 ### 交互式暂存(Interactive Staging) ### cherry-pick ### rebase ### reflog与reset ### 子树合并(Subtree …

Spring Data Redis对象缓存序列化问题

相信在项目中,你一定是经常使用 Redis ,那么,你是怎么使用的呢?在使用时,有没有遇到同我一样,对象缓存序列化问题的呢?那么,你又是如何解决的呢? Redis 使用示例 添加依…

IntelliJ IDEA常用快捷键

【1】创建内容(新建):altinsert 【2】main方法:psvm 【3】输出语句:sout 【4】复制行:ctrld 【5】删除行:ctrly(很多编辑器ctrly是前进操作,如果选择 Delete Line&…

40道MyBatis面试题带答案(很全)

1. 什么是MyBatis (1)Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接…

C++编程中级阶段

目录 1.模版 1.1函数模版 1.1.1函数模版语法 1.1.2函数模版注意事项 1.1.3函数模版案例 1.1.4普通函数与函数模板的区别 1.1.5普通函数与函数模板的调用规则 1.1.6模版的局限性 1.2类模版 2.STL处识 3.STL常用容器 3.1string容器 3.2vector容器 3.3deque容器 3.…

工作中常用的 git 命令

了解版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。 什么是分布式版本控制系统分布式版本控制系统( Distributed Version Control System,简称 DVCS )。 在这类系统中,像…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分:数据安全防护(30%) 第二部分:数据安全管理(30%) 第三部分:数据安全处置(40%) 项目介绍…