当前位置: 首页 > news >正文

83.网游逆向分析与插件开发-背包的获取-自动化助手显示装备数据

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

上一个内容:装备栏数据与算法的C++还原-CSDN博客

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

码云版本号:849fed846405438d2220b8ab04fda2522e74482a

代码下载地址,在 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的分享

以 82.网游逆向分析与插件开发-背包的获取-装备栏数据与算法的C++还原-CSDN博客 它的代码为基础进行修改

效果图:

经过分析背包与物品的数据(也就是它们对象的指针),发现几个问题,就是找到一个好的切入点,那么会容易非常多,如果没有好的切入点,就会很累很累,这是第一个问题,然后第二个问题,现在写代码的方式,在将来扩展起来会发现,会很轻松很容易,管理起来会很方便。

新加读取装备信息按钮:

EquipPack.h文件的修改,EquipPack类中加 public 修饰符

#pragma once
#include "ITEM.h"// 装备栏格子索引
enum class EquipType {Hat = 0,Jacket = 1,Showlder = 2,Hand = 3,Trousers = 4,Shoe = 5,Weapon = 6,WeaponEx = 7,Ol = 8,Earring = 9,NeckLace = 10,RingLeft = 11,RingRight = 12
};typedef class EquipPack
{
public:PITEM GetItem(EquipType index);
}*PEquipPack;

ITEM.cpp文件的修改,新加GetNameByWide函数,修改了GetName函数

#include "pch.h"
#include "ITEM.h"
#include "extern_all.h"ITEM::PROC ITEM::_GetItemRes{};
LPVOID ITEM::GetItemRes()
{LPVOID resPtr = (this->*_GetItemRes)();resPtr = (LPVOID)((DWORD)resPtr + 0x60);return resPtr;
}PSROSTRING ITEM::GetName()
{LPVOID p = GetItemRes();if (p)	return _pgamebase->SRO_Res->ReadItemTitle(p);else return NULL;
}wchar_t* ITEM::GetNameByWide()
{LPVOID p = GetItemRes();if (p)	return _pgamebase->SRO_Res->ReadItemTitle(p)->wcstr();return L"无法读取";
}

ITEM.h文件的修改,新加 GetNameByWide函数

#pragma once
#include "SRO_String.h"typedef class ITEM
{typedef LPVOID(ITEM::* PROC)();
public:static PROC _GetItemRes;
protected:char pad_0000[52]; //0x0000
public:int Type; //0x0034 类型
protected:char pad_0038[84]; //0x0038
public:int Elv; //0x008C 装备强化程度
protected:char pad_0090[8]; //0x0090
public:int Durabillty; //0x0098 耐久度int Count; //0x009C 数量
protected:char pad_00A0[64]; //0x00A0
public:int MaxPhyAttack; //0x00E0 最大物理攻击力int MinPhyAttack; //0x00E4 最小物理攻击力int MaxMagAttack; //0x00E8 最大魔法攻击力int MinMagAttack; //0x00EC 最小魔法攻击力
protected:char pad_00F0[48]; //0x00F0
public:int MaxDurabillty; //0x0120 最大耐久度
protected:char pad_0124[16]; //0x0124
public:int mingzhonglv; //0x0134 命中率
protected:char pad_0138[152]; //0x0138
public:int Plv; //0x01D0 宠物等级
protected:char pad_01D4[0xc]; //0x01D4
public:LPVOID GetItemRes();// 获取物品名PSROSTRING GetName();wchar_t* GetNameByWide();
}*PITEM; //Size: 0x0488

CUIWnd_1.h文件的修改,新加 OnBnClickedButton2函数声明

#pragma once
#include "afxdialogex.h"// CUIWnd_1 对话框class CUIWnd_1 : public CDialogEx
{DECLARE_DYNAMIC(CUIWnd_1)public:CUIWnd_1(CWnd* pParent = nullptr);   // 标准构造函数virtual ~CUIWnd_1();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_PAGE_1 };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()
public:afx_msg void OnBnClickedButton1();CListBox lstPack;afx_msg void OnBnClickedButton2();
};

CUIWnd_1cpp文件的修改,新加 OnBnClickedButton2函数,修改了 BEGIN_MESSAGE_MAP宏

// CUIWnd_1.cpp: 实现文件
//#include "pch.h"
#include "htdMfcDll.h"
#include "CUIWnd_1.h"
#include "afxdialogex.h"
#include "extern_all.h"// CUIWnd_1 对话框IMPLEMENT_DYNAMIC(CUIWnd_1, CDialogEx)CUIWnd_1::CUIWnd_1(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_PAGE_1, pParent)
{}CUIWnd_1::~CUIWnd_1()
{
}void CUIWnd_1::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_LIST1, lstPack);
}BEGIN_MESSAGE_MAP(CUIWnd_1, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &CUIWnd_1::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CUIWnd_1::OnBnClickedButton2)
END_MESSAGE_MAP()// CUIWnd_1 消息处理程序void CUIWnd_1::OnBnClickedButton1()
{// int count = _pgamebase->SRO_Control->GetPPack()->GetPackBack()->PackCount();CString tmp;// tmp.Format(L"%d", count);// AfxMessageBox(tmp);PBackPack _PackBack = _pgamebase->SRO_Control->GetPPack()->GetPackBack();lstPack.ResetContent();for (int i = 0; i < _PackBack->PackCount(); i++){PITEM item = _PackBack->GetItem(i);if ((item != NULL) && (item->Type)) {tmp.Format(L"[%s][数量:%d][耐久:%d/%d]\n", item->GetNameByWide(), item->Count, item->Durabillty, item->MaxDurabillty);lstPack.AddString(tmp);}}}void CUIWnd_1::OnBnClickedButton2()
{// int count = _pgamebase->SRO_Control->GetPPack()->GetPackBack()->PackCount();CString tmp;// tmp.Format(L"%d", count);// AfxMessageBox(tmp);PEquipPack _PackBack = _pgamebase->SRO_Control->GetPPack()->GetEquipBack();lstPack.ResetContent();for (int i = 0; i < 13; i++){PITEM item = _PackBack->GetItem((EquipType)i);if ((item != NULL) && (item->Type > 0)) {tmp.Format(L"[%s][数量:%d][耐久:%d/%d]\n", item->GetNameByWide(), item->Count, item->Durabillty, item->MaxDurabillty);lstPack.AddString(tmp);}}
}

相关文章:

  • FPGA硬件架构
  • 第26讲:顺序表的应用(通讯录)
  • 人工智能与机器学习——开启智能时代的里程碑
  • JavaEE-自定义SSM-编写核心- my spring bean工厂(IoC、DI)
  • MySQL库表操作 作业
  • C语言基础13
  • HarmonyOS 鸿蒙应用开发 (七、HTTP网络组件 axios 介绍及封装使用)
  • TortoiseSVN各版本汉化包下载
  • 学习使用Flask模拟接口进行测试
  • 第3章-python深度学习——(波斯美女)
  • MySQL:MVCC原理详解
  • java:实现查询MySQL数据库中的数据,并导出excel、pdf类型文档(超详细)
  • Unity 命令模式(实例详解)
  • HCIA-HarmonyOS设备开发认证-3.内核基础
  • GO——SELECT
  • CSS 提示工具(Tooltip)
  • ECMAScript6(0):ES6简明参考手册
  • JavaScript对象详解
  • mysql外键的使用
  • Promise面试题2实现异步串行执行
  • Redis在Web项目中的应用与实践
  • RxJS: 简单入门
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue2.0 实现互斥
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 技术发展面试
  • 前端之Sass/Scss实战笔记
  • 移动端解决方案学习记录
  • 译米田引理
  • 用Python写一份独特的元宵节祝福
  • 追踪解析 FutureTask 源码
  • ​linux启动进程的方式
  • # 达梦数据库知识点
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (04)odoo视图操作
  • (11)MSP430F5529 定时器B
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转) Android中ViewStub组件使用
  • .bat文件调用java类的main方法
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net mvc 获取url中controller和action
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .so文件(linux系统)
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ C++ ] STL_list 使用及其模拟实现
  • [ Linux ] git工具的基本使用(仓库的构建,提交)