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);

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搜索引擎推广的实践技巧提升你的品牌影响力-华媒舍

搜索引擎推广是一种有效提升品牌影响力的推广策略。通过关键词优化、广告创意设计、定向投放和数据分析与优化等实践技巧,可以提高品牌的知名度、点击率和转化率。在实施引擎霸屏推广之前,还需对实践效果进行评估,以确保推广策略的有效性和适…

postman win7 低版本 postman7.0.9win64 postman7.0.9win32

百度网盘: postman7.0.9win64: 链接: https://pan.baidu.com/s/18ck9tI0r9Pqoz36MOwwnnQ 提取码: rkf7 postman7.0.9win32: 链接: https://pan.baidu.com/s/1HrpGPrgvVzyAcjdHuwVOpA 提取码: ke5k win7系统安装postman,可能会…

Redisson依赖冲突记录

前言&#xff1a;项目使用的springboot项目为2.7.X 依赖冲突一&#xff1a;springboot 与 redisson版本冲突 项目中依赖了 Lock4j&#xff0c;此为苞米豆开源的分布式锁组件 <dependency><groupId>com.baomidou</groupId><artifactId>lock4j-redisso…

Docker 入门 ------ 基本命令

1. 使用Docker镜像 1.1 获取镜像 主要命令: docker pull NAME[:TAG] NAME 为镜像名称&#xff0c;后跟:版本号&#xff0c;如果没有跟后面的版本号&#xff0c;默认拉取最新的稳定版本 例子&#xff1a; 上述命令相当于&#xff1a;docker.io/library/ubuntu:latest 1.2 查…

shell打印粉色小心心、颜文字心心

#!/bin/bash # *********************************************************# # # # * Author : 白嫖一茶 # # * QQ邮箱址 : 2534824121qq.com # #…

《深入理解JAVA虚拟机笔记》运行时栈帧、方法分派、动态类型

运行时栈帧结构 Java 虚拟机以方法作为最基本的执行单元&#xff0c;“栈帧”&#xff08;Stack Frame&#xff09;则是用于支持虚拟机进行方法调用和方法执行背后的数据结构&#xff0c;它也是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈…

OpenHarmony之分布式软总线

分布式软总线是多设备终端的统一基座&#xff0c;为设备间的无缝互联提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地传输任务和数据。 分布式软总线实现近场设备间统一的分布式通信管理能力&#xff0c;提供不区分链路的设备间发现连接、组网…

力扣题目学习笔记(OC + Swift)206. 反转链表

206. 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 方法一、迭代 在遍历链表时&#xff0c;将当前节点的 next\textit{next}next 指针改为指向前一个节点。由于节点没有引用其前一个节点&#xff0c;因此必须事先存储其…

clickhouse连接工具dbeaver

地址 地址&#xff1a; Download | DBeaver Community 安装 表引擎 表引擎之TinyLog 以列文件的形式保存在磁盘上&#xff0c;不支持索引&#xff0c;没有并发控制。一般保存少量数据的小表&#xff0c; 生产环境上作用有限&#xff0c;多用于平时练习测试用。 内存引擎&am…

【教学类-43-03】20231229 N宫格数独3.0(n=1、2、3、4、6、8、9) (ChatGPT AI对话大师生成 回溯算法)

作品展示&#xff1a; 背景需求&#xff1a; 大4班20号说&#xff1a;我不会做这种&#xff08;九宫格&#xff09;&#xff0c;我做的是小格子的&#xff0c; 他把手工纸翻过来&#xff0c;在反面自己画了矩阵格子。向我展示&#xff1a;“我会做这种&#xff01;” 原来他会…

小型内衣洗衣机什么牌子好?口碑好的小型洗衣机

想必大家都知道&#xff0c;我们的内衣裤、袜子这些衣物对卫生方面的要求是比较的高&#xff0c;毕竟是贴身的衣物&#xff0c;因此是要分开清洗的&#xff0c;而不能够跟我们其他的大件衣服一起放入到大型洗衣机里进行混洗&#xff0c;很多就选择了分开单独的手洗&#xff0c;…

CENTOS docker拉取私服镜像

概述 docker的应用越来越多&#xff0c;安装部署越来越方便&#xff0c;批量自动化的镜像生成和发布都需要docker镜像的拉取。 centos6版本太老&#xff0c;docker的使用过程中问题较多&#xff0c;centos7相对简单容易。 本文档主要介绍centos系统安装docker和拉取docker私…

ubuntu python播放MP3,wav音频和录音

目录 一.利用pygame&#xff08;略显麻烦&#xff0c;有时候播放不太正常&#xff09;1.安装依赖库2.代码 二.利用mpg123&#xff08;简洁方便&#xff0c;但仅争对mp3&#xff09;1.安装依赖库2.代码 三.利用sox&#xff08;简单方便&#xff0c;支持的文件格式多&#xff09;…

pycharm用Pipenv创建项目

一、pipenv介绍 pipenv是一个python的包管理工具&#xff0c;提供python的各个版本间的管理&#xff0c;各种包管理。官网 pipenv主要有以下特点&#xff1a; pipenv集成了pip&#xff0c;virtualenv两者的功能。pipenv会在项目根目录下创建Pipfile文件用于记录包的版本信息…

gFTP - 多线程 FTP 客户端工具

gFTP - 多线程 FTP 客户端工具 1. Download gFTP2. GUIReferences https://github.com/masneyb/gftp gFTP is a free and open-source multithreaded File Transfer Protocol client program. It is most used on Unix-like systems such as Linux, macOS, and Sony PlayStati…

nginx源码分析-3

这一章内容讲述nginx中的事件是如何一步步添加到epoll实例中的。 在初始化http连接的函数ngx_http_init_connection中&#xff0c;nginx为http连接初始化了处理请求的回调函数&#xff0c;之后调用ngx_handle_read_event函数对可读数据进行处理。这里只为连接设置read而没有设…

YOLO训练results.csv文件可视化(原模型与改进模型对比可视化)

一、单独一个文件可视化&#xff08;源码对应utils文件夹下的plots.py文件的plot_results类&#xff09; from pathlib import Path import matplotlib.pyplot as plt import pandas as pd def plot_results(fileruns/train/exp9/results.csv, dir):# Plot training results.c…

Java IDEA JUnit 单元测试

JUnit是一个开源的 Java 单元测试框架&#xff0c;它使得组织和运行测试代码变得非常简单&#xff0c;利用JUnit可以轻松地编写和执行单元测试&#xff0c;并且可以清楚地看到哪些测试成功&#xff0c;哪些失败 JUnit 还提供了生成测试报告的功能&#xff0c;报告不仅包含测试…

私有部署ELK,搭建自己的日志中心(四)-- kibana展示es的数据

一、说在前面的话 前一篇已把elk的安装连带讲完&#xff0c;本文重在讲述如何在kibana展示es数据。 二、数据的展示 展示es数据库的客户端工具有很多&#xff0c;比如es head插件&#xff0c;但是一说到要查询日志&#xff0c;还是非kibana莫属了。 1、kibana.yml # 服务端…

边缘计算网关:重新定义物联网数据处理

随着物联网&#xff08;IoT&#xff09;设备的爆炸式增长&#xff0c;数据处理和分析的需求也在迅速增加。传统的数据处理方式&#xff0c;将所有数据传输到中心服务器进行处理&#xff0c;不仅增加了网络负担&#xff0c;还可能导致数据延迟和安全问题。因此&#xff0c;边缘计…