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

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

上一个内容:项目需求与需求拆解-CSDN博客

之前在找到过一个虚函数,每个按钮的都有一个实现机制,参考这里游戏结束过程的逆向分析

实际上找起来会不会用上不知道,接下来开始逆向分析。

首先游戏中为了保护我们的插件,做了一些int3,这个int3编译器是处理不了的,需要设置一个东西,如下方的两个图,设置异常,意思是当x96dbg出现异常之后,点击忽略上次,这样x96dbg下次遇到这个位置的异常时就不处理的就交给游戏来处理。

 首先在按钮处理函数接口位置打断点,再点击游戏中的按钮,发现可以正常断下来,但我们要找的并不是这个按钮,所以这个我们不看

点击游戏自动药水设定按钮也可以正常断下来,这个我们要看,现在的eax是0x6D9A90

然后按下f7,就来到了游戏药水设定功能的函数,然后接下来要做一个测试,继续往下看

麻烦来了,点击系统按钮时也会进入到0x6D9A90函数里,按照之前理解的逻辑,0x6D9A90应该是对应自动药水设定按钮的功能,但很显然并不是,继续往下看。

它是把下图红框里的按钮都对应到了 0x6D9A90 函数上,所以 0x6D9A90 函数不是我们要找的,我们要找的函数在 0x6D9A90 函数里面,

0x6D9A90函数还是很大的,有点像一个 switch 结构,它里面是一段一段的,都是调用了不同的函数,所以想switch结构,也就是它把所有的菜单都放到了一起,每个菜单都对应一个switch的case,然后会发现ecx都是来自于固定的基址,这个没必要看,然后它调用了一个函数,这个调用的函数每个case里都不一样,然后函数调用完之后,调用了一个虚函数,edx+0x5C一般都是虚函数,也就是调用了基类的某一个函数,然后每个case的上半部分是调用的不同的函数,下半部分是调用的相同函数(只从分析上看出的,实际的值可能会导致调用不同的函数),所以现在要分析的是上半段,根据现在分析的,分析上半部分的准确率是百分之80左右。

0x6D9A90函数是一个所有按钮共用的函数所以要,跟踪一下,就是点自动药水设定按钮看看它会执行哪个case,一路f8就来到了下图位置,在0x6D9CC9位置打断点可以发现其它按钮并不会断下来

然后自动药水设定有三个相应点,所以接下来要看其它两个,会不会在 0x6D9CC9位置断下来,可以发现 0x6D9CC9 位置并不会断下来,所以接下来要往下继续找,现在要确认一下它具体是下图红框中的哪一个函数。

 首先把sro_client.8687F0位置的函数第一行,改成下图的样子,然后看看自动药水设定功能还有没有,可以发现它没有了,所以 sro_client.8687F0位置是自动药水设定按钮真正干活的函数,所以call eax不需要看了,只看 sro_client.8687F0

接下来先把修改的ret恢复一下

然后把断点下到sro_client.8687F0位置如下图

然后发现它按取现按钮也会触发,所以还要往下跟

快捷键会触发

动作里的自动药水设定也会触发,也就是三个入口都会触发

接下来就对0x8687F0函数下手就可以了,接下来分析为什么按取消也会触发,分析一个函数的几个重点,首先分析它的调用约定,这个调用约定是一个类的成员函数,第二点分析有几个参数,它有一个参数,第三点是看它的返回值,看调用下图调用位置,并没有对eax做什么操作,所以认为它没有返回值一个void返回类型,ecx一般是放的this地址所以0x1256E3C的值是按钮对象

然后取消按钮入参是0,自定药水设定时的入参是1,也就是0是不显示1是显示,它这个函数也就是传递了一个true或者false,0x8687F0它就是一个显示界面和取消界面的功能,下图红框位置时取了一个byte类型这样就更确认它传入的是bool类型并不是int类型了,这时可以还原成c++代码就是 void 0x1256E3C::ShowAutoHelp(bool ShowUI);

假设没有做之前的分析,并不知道,按钮的虚函数,这样时没有切入点所有的假设没法成立,所以后面要写不利用虚函数这个东西,再去找一遍自动药水设定功能,也就是从零去找。

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

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

相关文章

go语言 json marshal和unmarshal序列化字节切片和反序列化对象

json.Marshal 和 json.Unmarshal 是 Go 语言标准库中用于 JSON 编码和解码的函数。 - json.Marshal 用于将 Go 对象转换为 JSON 格式的字节切片。 go package main import ( "encoding/json" "fmt" ) type Person struct { Name string json:"name&qu…

二维码地址门牌系统技术服务:让您的生活更便捷,一码通行,安全无忧

文章目录 前言一、融合二维码技术与门牌的便捷服务二、手机开门便捷功能三、智能化安全保障四、智能化、便捷化的新型技术 前言 在数字化时代,二维码门牌系统技术应运而生,为了满足人们对安全、便捷生活的需求。这项技术将二维码与门牌结合,…

2019数据结构----队列真题

(1)允许增加空间,空间可以改变所以是通过链表,链式存储实现的;占用的空间可以重复使用,所以是循环队列。 (2)队空:frontrear;队满:frontrear->next

CNAS中兴新支点——什么是安全测试,安全测试报告有什么作用,主要测试哪些内容?

1.安全测试在做什么? 扫描?在很多人眼中,做安全的就是整天那个工具在哪里扫描操作,使用各种不同的工具做扫描。 是的,扫描是安全测试很重要的一部分,扫描可快速有效发现问题。扫描工具的易用性&#xff0…

霍尔传感器测速测距实验——STM32驱动(课程设计)

———————实验效果——————— 🎄图片演示测距 🎄视频演示测速 基于STM32单片机 霍尔传感器测速度,测圈数 🎄模块介绍 测距使用HC-SR04模块 测距使用测速使用霍尔传感器 ———————代码获取查看下方———————…

商务智能|描述性统计分析与数据可视化

一、商务智能的三大方面 三个主要方面是描述性的统计分析、预测性的分析和指导性的数据分析。 A. 商务智能的知识体系下,数据分析包含了哪三个工作?商务智能体系架构里边关于数据分析的术语是什么? 商务智能的知识体系下,数据分析包含了三个工作,即描述性分析,预测性分析…

Mac Parallels19.1.0 Install CentOS7.9

0、资源准备 # centos7.9镜像一份 链接: https://pan.baidu.com/s/1acIjUnsTGhk_2cYCZLSoGg?pwd6666 提取码: 6666 --来自百度网盘超级会员v7的分享1、打开PD 2、选择镜像进行安装 指定镜像名称 创建 进行密码设置 安装目的地点开后直接点击完成 网络和主机名称 开…

编程语言的生命力

一、目前主流的编程语言 目前流行的编程语言有很多种,可谓是百花齐放、百家争鸣。根据不同的应用场景和领域,有不同的编程语言被广泛使用。一些目前主流的编程语言HTML5、Python、JavaScript 、Java 、C 、PHP 、Swift 等等。 还有许多其他的编程语言&am…

xcode-开发相关

分发方式 下面是指应用程序分发方法,决定了你可以将app安装到哪些设备以及应用可以使用哪些功能 每个分发模式对应的provision profile不同 debug release ad hoc(临时分发) 允许100台指定的移动设备,这种分发不会将应用发布到App Store&#xff0c…

使用国内镜像源来安装 Golang 包:

使用国内镜像源来安装 Golang 包: 阿里云:https://mirrors.aliyun.com/goproxy/ 要使用这些镜像源,请将 GOPROXY 环境变量设置为所选镜像源的 URL。例如,要使用阿里云镜像源,请在命令行中运行以下命令: …

Java SE面试

1.什么是 Java? Java 是一门面向对象的编程语言,不仅吸收了 C语言的各种优点,还摒弃了 C里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的优秀代表&#xff…

麒麟系统U盘安装

U盘安装盘制作 方法一 (仅适用于龙芯桌面V5.0) 准备U盘: 推荐使用fat32 (vfat) 格式的U盘;把整个系统镜像 XXX.iso 复制到U盘下面;把镜像XXX.iso 挂载起来,然后复制镜像中的boot文件夹和ks.cfg 到U盘根目录;复制镜像中…

Qt 6之四:基础概念讲解

Qt 6之四:基础概念讲解 Qt是一种跨平台的C应用程序开发框架,它提供了一套丰富的工具和库,可以帮助开发者快速构建跨平台的应用程序,用于开发图形用户界面(GUI)和非GUI应用程序。 Qt 6之一:简介…

Python小细节之Gui图形化界面库tkinter学习

敲打计数脚本学TKinter 引言开整选择决定难易了解她使用她运行效果 结尾 引言 我的爬取表情包的爬虫文件写好了 运行 输入关键词就可以得到对应的 表情包 我也通过pyinstall 打包了 但是很丑 就只有一个黑box 我是新手 所以我知道 这对于普通人来说 不友好 且在使用的过程中 …

C++ 具名要求-布局

此页面中列出的具名要求,是 C 标准的规范性文本中使用的具名要求,用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前,确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

Pendulum详解4——Pendulum在数据挖掘中的威力 - 时间的宝藏

写在开头 在这个数字化时代,时间数据无处不在,而它往往蕴含着丰富的信息。然而,在数据挖掘中,我们经常需要处理不同时间维度的数据,从而更好地理解和预测各种现象。Pendulum库的引入为我们提供了一种简洁而强大的工具,可以更好地处理和分析时间数据。 1. 集聚分析 地理…

Apache Doris 2.0.2 安装步骤 Centos8

Linux 操作系统版本需求 Linux 系统版本当前系统版本CentOS7.1 及以上CentOS8Ubuntu16.04 及以上- 软件需求 软件版本当前版本Java1.81.8.0_391GCC4.8.2 及以上gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) 1、查看操作系统版本 方法 1:使用命令行 打开终端或…

MongoDB笔记

文章目录 安装查看数据库命令手册 学习地址:https://www.bilibili.com/video/BV16u4y1y7Fm 安装 下载地址 https://www.mongodb.com/try/download/community-kubernetes-operator查看数据库 查看当前数据库 show dbs show databases切换数据库 use 数据库名称cls…

建站指南,如何将拥有的域名自定义链接到wordpress

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 在Dynadot上,我们可已经账户中管理的…

主题-----读微信公众号

1.SOA 面向服务的架构(Service-Oriented Architecture,SOA)还没有一个公认的定义。许多组织从不同的角度和不同的侧面对 SOA 进行了描述,较为典型的有以下三个: (1)W3C 的定义:SOA 是…