71.网游逆向分析与插件开发-角色数据的获取-修复角色名与等级显示问题

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

上一个内容:自动化助手UI显示角色数据-CSDN博客

码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git

码云版本号:0049452c079867779f639c4bfab9bd1cd0c68932

代码下载地址,在 SRO_EX 目录下,文件名为:SRO_Ex-修复角色名与等级显示问题.zip

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg

提取码:q9n5

--来自百度网盘超级会员V4的分享

HOOK引擎,文件名为:黑兔sdk.zip

链接:https://pan.baidu.com/s/1IB-Zs6hi3yU8LC2f-8hIEw

提取码:78h8

--来自百度网盘超级会员V4的分享

以 自动化助手UI显示角色数据-CSDN博客它的代码为基础进行修改

等级它有时候显示正确有时候显示不正确,这个问题就出在数据类型上,角色名字用的还是我们的SRO_String类型。

然后打开 Cheat Engine 看它的内存,这里 Cheat Engine也读不出字符串了

然后点击浏览相关的内存区域

很明显的看出这里并不是名字,是一个内存地址

它还是与SRO_String一样

然后自动化助手可以正常显示的名字的内存,它与不正常显示的内存不一样,不能直接用SRO_String需要修改

修改之后就正常了

这个也正常

AIM.h文件的修改

#pragma once
#include "SRO_String.h"typedef class AIM
{
public:char pad_0000[272]; //0x0000SRO_String Name; //0x0114 角色名字长度是7char pad_0115[892]; //0x0115int32_t MP; //0x04A8 蓝量int32_t MaxHP; //0x04AC 最大生命值int32_t MaxMP; //0x04B0 最大蓝量int32_t HP; //0x04B4 生命值char pad_04B8[608]; //0x04B8float x; //0x0718 x坐标float h; //0x071C z坐标float y; //0x0720 y坐标char pad_0724[428]; //0x0724char LV; //0x08D0 等级char unlv[3];char pad_08D4[4]; //0x08D4int32_t Exp; //0x08D8 经验char pad_08DC[12]; //0x08DCint SkillPoint; // 技能点数char UnUSERage; // 怒气char unknownH33; char Rage; //0x08EE 怒气值char RageEx; //0x08EF 怒气值副本char pad_08F0[1883]; //0x08F0
}*PAIM; //Size: 0x104B

CUIWnd_0.cpp文件的修改

// CUIWnd_0.cpp: 实现文件
//#include "pch.h"
#include "htdMfcDll.h"
#include "CUIWnd_0.h"
#include "GameBase.h"
#include "extern_all.h"// CUIWnd_0 对话框
CUIWnd_0* UI_0;
void _stdcall TimeProc(HWND, UINT, UINT_PTR, DWORD) {if (UI_0) {UI_0->ShowPlayerTxt();}
}IMPLEMENT_DYNAMIC(CUIWnd_0, CDialogEx)CUIWnd_0::CUIWnd_0(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_PAGE_0, pParent), txt_Player(_T(""))
{UI_0 = this;
}CUIWnd_0::~CUIWnd_0()
{
}void CUIWnd_0::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_EDIT1, txt_Player);
}BOOL CUIWnd_0::OnInitDialog()
{CDialogEx::OnInitDialog();::SetTimer(this->m_hWnd, 0x100001, 10, TimeProc);return TRUE;
}void CUIWnd_0::ShowPlayerTxt()
{if ((_pgamebase) && (_pgamebase->SRO_Player)) {CString txtTmp;txtTmp.Format(L"角色名:[%s] 等级[lv:%d]\r\n", _pgamebase->SRO_Player->Name.wcstrByName(), _pgamebase->SRO_Player->LV);txt_Player = txtTmp;txtTmp.Format(L"经验值:[%d] 技能点[%d]\r\n", _pgamebase->SRO_Player->Exp, _pgamebase->SRO_Player->SkillPoint);txt_Player += txtTmp;txtTmp.Format(L"血量:[%d/%d]\r\n", _pgamebase->SRO_Player->HP, _pgamebase->SRO_Player->MaxHP);txt_Player += txtTmp;txtTmp.Format(L"蓝量:[%d/%d]\r\n", _pgamebase->SRO_Player->MP, _pgamebase->SRO_Player->MaxMP);txt_Player += txtTmp;txtTmp.Format(L"坐标:[%f][%f][%f]\r\n", _pgamebase->SRO_Player->x, _pgamebase->SRO_Player->h, _pgamebase->SRO_Player->y);txt_Player += txtTmp;// 计算百分比txtTmp.Format(L"怒气:[%f/100]\r\n", (float)_pgamebase->SRO_Player->Rage/5*100);txt_Player += txtTmp;}UpdateData(FALSE);
}BEGIN_MESSAGE_MAP(CUIWnd_0, CDialogEx)
END_MESSAGE_MAP()// CUIWnd_0 消息处理程序

SRO_String.cpp文件的修改

#include "pch.h"
#include "SRO_String.h"int SRO_String::stringlength(const wchar_t* str)
{for (lenth = 0; str[lenth]; lenth++);size = lenth * 2 + 1;return size;
}wchar_t* SRO_String::wcstr()
{if (size < 0x8) {return title;}else {return Ptitle;}
}wchar_t* SRO_String::wcstrByName()
{if (0xF<(lenth + 1)*2) {return Ptitle;}return title;
}SRO_String& SRO_String::operator=(const wchar_t* _txt)
{int _size = stringlength(_txt);if (_size > 8) {Ptitle = (wchar_t*)_txt;}else {memcpy(title, _txt, _size);}return *this;
}

SRO_String.h文件的修改

#pragma oncetypedef class SRO_String
{
private:int un1;union {wchar_t title[0x8];wchar_t* Ptitle;};unsigned lenth;unsigned size;int stringlength(const wchar_t* str);
public:wchar_t* wcstr();wchar_t* wcstrByName();SRO_String& operator=(const wchar_t* _txt);
}*PSROSTRING;

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

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

相关文章

高级分布式系统-第15讲 分布式机器学习--神经网络理论

高级分布式系统汇总&#xff1a;高级分布式系统目录汇总-CSDN博客 神经网络理论 模糊控制在处理数值数据、自学习能力等方面还远没有达到人脑的境界。人工神经网络从另一个角度出发&#xff0c;即从人脑的生理学和心理学着手&#xff0c;通过人工模拟人脑的工作机理来实现机器…

Microsoft Word 删除空行

Microsoft Word 删除空行 1. 删除空行1.1. 替换1.2. 段落标记 References 1. 删除空行 1.1. 替换 1.2. 段落标记 特殊格式 -> 段落标记 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

大数据StarRocks(八):集群扩缩容

一、FE扩缩容 StarRocks FE 节点分为 Follower 节点和 Observer 节点。Follower 节点参与选举投票和写入&#xff0c;Observer 节点只用来同步日志&#xff0c;扩展读性能。 注意&#xff1a; 所有 FE 节点的 http_port 必须相同。Follower FE 节点&#xff08;包括 Leader …

2023集成电路人才供需报告 行业薪酬报告!

每年年底之际&#xff0c;是产业界各家公司交出一年答卷的时间&#xff0c;也是市调机构发布相关产业报告的时间。 例如&#xff0c;安谋科技&#xff08;Arm在中国独立运营的分公司&#xff09;发布的集成电路产业人才供需报告&#xff1b;还有2024各行业薪酬增长率预测报告等…

Gin 框架之用户密码加密

文章目录 一、引入二、密码加密位置三、如何加密四、bcrypt 库加密4.1 介绍4.2 优点&#xff1a;4.3 使用 五、小黄书密码加密实践 一、引入 Gin是一个用Go语言编写的Web框架&#xff0c;而用户密码的加密通常是在应用程序中处理用户身份验证时的一个重要问题。 通常敏感信息…

C++ 类与对象Oop

类与对象Oop 一、类&#xff1a;用户定义的数据类型&#xff0c;用于封装数据和方法1.1 对比结构体警告-->主要目的&#xff1a;初始化 1.2 定义类的过程并定义一个对象1.2.1 定义类例子 1.2.2 定义一个对象1.2.3 注意事项例子1.2.4 分成头文件和源文件的方式&#xff08;0&…

Niushop 开源微信商城源码+小程序源码 v5.1.7/支持二开/支持PC、手机、小程序和APP电商源码

源码介绍&#xff1a; Niushop 开源微信商城源码 v5.1.7&#xff0c;它是小程序源码&#xff0c;支持二次开发&#xff0c;同时支持PC、手机、小程序和APP多端电商。 Niushop系统是一款基于ThinkPHP6开发的全面完善的电商解决方案。该系统具备完善的商品管理机制&#xff0c;…

目标检测中的数据增强

整个代码参考:bubbliiiing/object-detection-augmentation。 random_data.py import cv2 import numpy as np from PIL import Image, ImageDrawdef rand(a=0, b=1):return np.random.rand()*(b-a) + adef get_random_data(annotation_line, input_shape, jitter=.3, hue=.1…

中仕公考:国考进面后资格复审需要准备什么?

参加国考面试的考生在资格审核阶段需要准备以下材料&#xff1a; 1、本人身份证、学生证或工作证复印件。 2、公共科目笔试准考证复印件。 3、考试报名登记表。 4、本(专)科、研究生各阶段学历、学位证书(应届毕业生没有可以暂时不提供)。 5、报名资料上填写的各类证书材料…

数据结构实验6:图的应用

目录 一、实验目的 1. 邻接矩阵 2. 邻接矩阵表示图的结构定义 3. 图的初始化 4. 边的添加 5. 边的删除 6. Dijkstra算法 三、实验内容 实验内容 代码 截图 分析 一、实验目的 1&#xff0e;掌握图的邻接矩阵的存储定义&#xff1b; 2&#xff0e;掌握图的最短路径…

网络安全产品之认识WEB应用防火墙

随着B/S架构的广泛应用&#xff0c;Web应用的功能越来越丰富&#xff0c;蕴含着越来越有价值的信息&#xff0c;应用程序漏洞被恶意利用的可能性越来越大&#xff0c;因此成为了黑客主要的攻击目标。传统防火墙无法解析HTTP应用层的细节&#xff0c;对规则的过滤过于死板&#…

VsCode重新安装需要配机的ESLint和 Prettier - Code formatter 配置

新电脑安装完Vscode后&#xff0c;需要装几个插件&#xff0c;这里记录下&#xff1a; {"diffEditor.ignoreTrimWhitespace": false,"files.autoSave": "afterDelay","editor.codeActionsOnSave": {"source.fixAll.eslint"…