22.x86游戏实战-实现读人物

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:21.x86游戏实战-实现注入器

在 18.x86游戏实战-找角色人物名字 里找到了名字,名字的地址是 [[0x1AB7CDC]+0x258],然后本次就要在我们的dll里读取出这个名字

OD附加之后脱离(不附加)的方式,右击然后点下图红框的选项

在读取之前,先看一下游戏中文字使用的是什么编码方式

有中文一般都是UNICODE编码,然后游戏是32位所以选择UNICODE(32字符)

选择之后名字就能显示出来了,如果UNICODE显示不正常那就尝试ASCII编码,如果都不正常那就说明这个数据不是一个文字或英文

然后名字的地址是 [[0x1AB7CDC]+0x258] 这个

接下来手动的找一次,来到0x1AB7CDC地址,0x1AB7CDC地址的值是一个内存地址

右击下图红框位置

然后选择数据窗口跟随

然后就能来到下图红框位置

然后这里有个东西,双击下图红框的列它会出现偏移(双击下图列中任意一行数据就能明白了)

然后 [[0x1AB7CDC]+0x258] 到了+0x258了,也就是655B7000+0x258,然后就来到了下图红框位置

然后0x655B7258内存地址的值还是内存地址,所以继续右击下图位置选择数据窗口中跟随

然后来到下图红框位置

然后选择UNICODE(32字符),就可以看到名字了

到这就手动解析 [[0x1AB7CDC]+0x258] 得到了名字,接下来就开始按照上方找名字的过程写c++代码了

代码:

首先给WCDXX窗口添加一个按钮

然后鼠标右击按钮,选择属性

在属性里改一下描述文字

然后双击下图红框的按钮

双完就会创建好按钮点击事件处理函数(按钮点击时执行的代码)了

然后打开Dbgview.exe

确保Dbgview.exe监视里选的内容与下图中的一样

然后注入

注入之后点击下图红框的按钮

然后就给打印出名字了

// DXXDlg.cpp: 实现文件
//

#include "pch.h"
#include "WCDXX.h"
#include "afxdialogex.h"
#include "DXXDlg.h"


// DXXDlg 对话框

IMPLEMENT_DYNAMIC(DXXDlg, CDialogEx)

DXXDlg::DXXDlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_DIALOG1, pParent)
{
	OutputDebugStringA("执行流程-执行DXXDlg构造函数流程1");
}

DXXDlg::~DXXDlg()
{
	OutputDebugStringA("执行流程-执行DXXDlg析构函数流程1");
}

void DXXDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(DXXDlg, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON1, &DXXDlg::OnBnClickedButton1)
END_MESSAGE_MAP()


// DXXDlg 消息处理程序


void DXXDlg::OnBnClickedButton1()
{
	//  [[0x1AB7CDC]+0x258]
	/*
		*这个符号表示地址,在c++中被称为指针或指针类型
		int表示4字节数字
		int*就表示指针类型的int
		(int*)0x1AB7CDC;这样表示0x1AB7CDC地址里的内容是4字节的数字
	*/
	int* address = (int*)0x1AB7CDC;
	/*
		取出地址中的值,也就是取出0x1AB7CDC里的内容
		*address这样在左边只写一个*表示取内存地址里的值
		也就是取address它的值,address是0x1AB7CDC,也就是取0x1AB7CDC它的值

	*/ 
	int addressValue = *address;
	addressValue += 0x258;
	/*
		(*(int*)addressValue)意思是
		把addressValue转成int*,也就是把
		addressValue的值当成内存地址,addressValue的值现在是[0x1AB7CDC]+0x258这个
		现在这个地址里面的值是名字的地址,所以在左边加了一个*让把名字的地址去除了出来
		取出来之后就得到了名字,名字是UNICODE类型,UNICODE又被称为宽字节,宽字节的数据是用两个字节描述一个文字或字母
		在c++里wchar_t类型就是UNICODE
		然后在c++中名字这种数据被称为字符串,如果要用字符串必须用指针类型也就是wchar_t*
		右边加上*让wchar_t变成指针类型的wchar_t,才能在c++中使用字符串

	*/
	wchar_t* name = (wchar_t*)(*(int*)addressValue);
	// 一般函数名后面是W就表示有UNICODE,也就是要用宽字节
	OutputDebugStringW(name);
}

完整代码:以 它的代码为基础进行修改

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


相关推荐

  1. 用python实现一个五子棋游戏,棋盘大小是20x20

    2024-07-20 22:08:02       15 阅读
  2. x86_64 ubuntu22.04编译MetaRTC

    2024-07-20 22:08:02       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 22:08:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 22:08:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 22:08:02       45 阅读
  4. Python语言-面向对象

    2024-07-20 22:08:02       55 阅读

热门阅读

  1. dp算法第三天(暑期提升)

    2024-07-20 22:08:02       20 阅读
  2. RabbitMQ 全面解析与常见问题解答

    2024-07-20 22:08:02       18 阅读
  3. 关于大数据技术栈的一些总结

    2024-07-20 22:08:02       17 阅读
  4. 酒茶元宇宙:探索科技与传统文化的融合

    2024-07-20 22:08:02       12 阅读
  5. 移动支付行业现状及其特点

    2024-07-20 22:08:02       17 阅读
  6. Kubernetes v1.30:只读卷挂载可以实现只读了

    2024-07-20 22:08:02       18 阅读
  7. Unity运行时节点编辑器——互动电影案例

    2024-07-20 22:08:02       18 阅读
  8. flask渲染页码

    2024-07-20 22:08:02       17 阅读
  9. 23年oppo提前批B组笔试真题-小欧的卡牌

    2024-07-20 22:08:02       18 阅读
  10. Django已经登录但是还是提示登录

    2024-07-20 22:08:02       17 阅读