7.x86游戏实战-C++实现跨进程读写-跨进程写内存

news2024/10/3 4:35:37

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

本次游戏没法给

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

上一个内容:6.x86游戏实战-C++实现跨进程读写-通过基址读取人物状态标志位

上一个内容通过基址得到了人物状态标志,这种操作属于读取,既然有读取那就有写入,所以本次来搞写入,本次通过找坐标改坐标实现瞬移来学习跨进程写数据。

这里有一件事,代码(c/c++代码)中用的那些函数(函数也叫api)怎么知道的?怎么就知道它能这样用?怎么知道有这种东西?

比如之前的 OpenProcess函数、ReadProcessMemory函数,怎么知道的这俩函数?

这都是老师讲的,逆向会常用OpenProcess、ReadProcessMemory这两个函数(当然不止这俩),这俩函数是Windows系统提供,自己找是真找不到,写这些字是为了那些钻牛角尖的,不要再钻了,我代码里写什么就学什么,否则其它的函数你就算知道了,也可能不知道怎么玩,纯浪废时间

Spy++

使用OpenProcess函数时要写一个pid,这个pid游戏重启、操作系统重启都会发送改变,每次都要找它的pid,有一个函数可以获取pid,这个函数需要Spy++里的一点东西,如下图打开Spy++

使用

找坐标

首先打开CE并附加游戏,游戏中小地图附近会有坐标信息(有些游戏没有,后面会写没有的怎么办)

如上图坐标现在是240,143,界面上显示的是整数,但它实际上是小数,很少有游戏坐标数据用整数,然后,如下图使用单浮点类型(为什么用单浮点?因为经验,也有的游戏会用双浮点,如果不知道用单浮点还是双浮点那就这俩都试一试,试完就知道用哪个了(错误的会找不到想要的数据),优先使用单浮点),来扫描内存,然后扫描类型是值介于...两者之间,游戏中坐标在窗口中看到的是100,它实际上可能是101、106、96这样的(所以这种找法不好,后面会有其它方式找坐标,只能做入门来用)

然后首次扫描,找到14511个数据

然后移动角色更改坐标

再次扫描,然后就剩下18个

然后把这些全部添加到下方列表中

然后再选中一半,然后鼠标放到选中的数据上如下图右击选择数值,把数据修改一下,如果把坐标修改了游戏中会有反应

把数据修改为50,然后游戏中没有反应,这说明坐标数据并不在这些数据中

然后选择剩下的数据做上方的操作

修改成60之后游戏有了反应(会瞬移)

然后现在还是有很多数据,具体哪个是坐标还不知道,然后先把这些改了没反应的给删除

然后再选一半改数据,这里改之前移动一下角色,让它恢复一下坐标(网络游戏本地改坐标没用,移动一下(发送数据包)就会恢复)

最终发现了两个,一个是人物头顶名字的坐标,一个是人物坐标

找到坐标之后使用c++代码对它们做出修改

代码:

// ConsoleApplication4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include "Windows.h"

int main()
{
	/*
		FindWindowA函数通过窗口类和标题获取窗口句柄
		""是从Spy++中类里复制来的
		NULL表示啥也没有
	*/
	HWND hwd = FindWindowA("", NULL);
	DWORD pid;
	// 根据窗口句柄获取进程pid,pid也就是线程id
	GetWindowThreadProcessId(hwd, &pid);
	HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	DWORD* address = (DWORD*)0x457A555C;
	float ret = 60;
	/*
		h进程句柄
		address要修改的内存地址,或者说修改什么内存地址里存放的值
		ret意思是把address(457A555C)地址的值修改成ret的值
		NULL不重要
	*/
	WriteProcessMemory(h, address, &ret, 4, NULL);

	address = (DWORD*)0x457A5544;
	ret = 60;
	WriteProcessMemory(h, address, &ret, 4, NULL);



	//跨进程读内存();
}

void 跨进程读内存() {
	/*
	PROCESS_ALL_ACCESS表示全部权限
	FALSE表示不继承,这个一般用不到,不用了解
	14384进程的Pid,详情看文章中的图
	h是进程句柄,句柄是用来代表一个进程的数字,由操作系统提供

	HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14384); 这一句的意思是获取14384进程的所有权限,并把句柄放到h中
*/
//HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14384);
/*
	DWORD* 的意思是,* 表示当前的数据认定成内存地址,DWORD是4字节数字
	DWORD* 的意思是把xxx认定成内存地址,内存地址里的值是一个4字节数字
	(DWORD*)0xA107BC也就是把0xA107BC它当做内存地址来看待,0xA107BC内存地址里的值是一个4字节数字
*/
//DWORD* buffer = (DWORD*)0xA107BC;
//DWORD ret;
/*
	h要读取谁的内存
	buffer内存地址
	ret内存地址的数据
	4读取4个字节
	NULL没用
	&是取地址的意思,&ret的意思就是ret的内存地址
	ReadProcessMemory(h, buffer, &ret, 4, NULL); 这一句的意思是,从h的内存中的0x60BAA6A0位置开始读取4字节,放到ret它里面,如果ret的大小没有4字节会显示有问题或程序崩溃
*/
//ReadProcessMemory(h, buffer, &ret, 4, NULL);
//printf("%d", ret);

	HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 15052);
	DWORD* buffer = (DWORD*)0xA107BC;
	DWORD ret;
	ReadProcessMemory(h, buffer, &ret, 4, NULL);
	//printf("%d", ret);
	buffer = (DWORD*)(ret + 0x60);
	ReadProcessMemory(h, buffer, &ret, 4, NULL);
	buffer = (DWORD*)(ret + 0x14c);
	ReadProcessMemory(h, buffer, &ret, 4, NULL);
	printf("人物状态标志:%d\n", ret);
}

 

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

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

相关文章

硬盘分区读不出来的危机与数据拯救指南

在数字时代&#xff0c;硬盘作为我们存储珍贵数据的“保险箱”&#xff0c;其稳定性和可访问性至关重要。然而&#xff0c;当硬盘分区突然读不出来时&#xff0c;这份安全感瞬间化为泡影&#xff0c;让人心急如焚。本文将深入探讨硬盘分区读不出来的原因、提供两种实用的数据恢…

使用ssh服务器管理远程主机

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、配置网卡服务 1、配置网卡参数 2、创建网络会话 3、绑定两块网卡 二、远程控制服务 1、配置sshd服务 2、在Windows连接 3、安全密钥…

云原生必知必会-docker安装

文章目录 一、docker安装二、centos7 安装docker-compose三、修改docker的镜像源四、docker异常处理&#xff08;没有那个文件或目录&#xff09;五、配置虚拟机上docker的代理总结 一、docker安装 # 安装上传下载工具 上传命令rz -bey&#xff0c;下载命令sz 文件名 yum -y i…

自定义刷题工具-python实现

背景&#xff1a; 最近想要刷题&#xff0c;虽然目前有很多成熟的软件&#xff0c;网站。但是能够支持自定义的导入题库的非常少&#xff0c;或者是要么让你开会员&#xff0c;而直接百度题库的话&#xff0c;正确答案就摆在你一眼能看见的地方&#xff0c;看的时候总觉得自己…

Xubuntu24.04之设置高性能模式两种方式(二百六十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

ArkUI开发学习随机——B站视频简介页面,美团购买界面

案例一&#xff1a;B站视频简介页面 代码&#xff1a; build() {Column(){Column(){Stack(){Image($r("app.media.genimpact")).width(200).height(125).borderRadius({topLeft:5,topRight:5})Row(){Image($r("app.media.bz_play")).height(24).fillColor…

虚拟机如何选择处理器和内核数量,实现最佳性能

一、基本概念 处理器数量指的是&#xff1a;虚拟的CPU数量。 每个处理器的内核数量指的是&#xff1a;虚拟CPU的内核数。 处理器内核总数处理器数量✖每个处理器的内核数量 此处虚拟机的处理器内核总数对应于真实物理机&#xff08;或者叫宿主机&#xff09;的CPU线程数&#x…

Python编程学习笔记(3)--- 操作列表

1、遍历列表 遍历列表可以采用for循环的方法&#xff0c;需要对列表中的每一个元素都执行相同的操作。 具体事实如下&#xff1a; name ["ada","cdb","dbc","bad","jinb"] for Name in name:print(Name)运行结果&#x…

灵活多变的对象创建——工厂方法模式(Python实现)

1. 引言 大家好&#xff0c;又见面了&#xff01;在上一篇文章中&#xff0c;我们聊了聊简单工厂模式&#xff0c;今天&#xff0c;我们要进一步探讨一种更加灵活的工厂设计模式——工厂方法模式。如果说简单工厂模式是“万能钥匙”&#xff0c;那工厂方法模式就是“变形金刚”…

Windows10 企业版 LTSC 2021发布:一键点击获取!

Windows10企业版 LTSC 2021是微软发布的长达5年技术支持的Win10稳定版本&#xff0c;追求稳定的企业或者个人特别适合安装该系统版本。该版本离线制作而成&#xff0c;安全性高&#xff0c;兼容性出色&#xff0c;适合新老机型安装&#xff0c;力求带给用户更稳定、高效的操作系…

应急响应——勒索病毒

先上搜索引擎上搜 也可以用360来杀 但是都无法解密 可以解密的&#xff1a; linux

db期末复习自用[应试向 附习题]

第一章 数据库系统实现整体数据的结构化&#xff0c;主要特征之一&#xff0c;是db区别于文件系统的本质区别。 数据库系统三个阶段&#xff1a;人工、文件、数据库系统。 数据库管理系统的功能&#xff1a;数据库定义、操纵 、&#xff08;保护、存储、维护&#xff09;、数…

Kubernetes 为pod指定DNS

在k8s里面&#xff0c;默认创建pod会给pod默认分配一个默认的dns&#xff0c;这个dns是哪来的呢&#xff1f;可不可以改成其他的dns呢&#xff1f; 先进入到pod里面来&#xff0c;可以看到这里面默认设置的DNS服务器&#xff0c;这个服务器地址为10.96.0.10。这个地址是k8s自动…

Linux基本命令的使用示例

目录 1实现效果&#xff1a;在downloads目录下创建1个空文件夹empty&#xff0c;创建1个空文件lake.txt&#xff0c;输入任意数据保存后退出 2实现效果&#xff1a;搜索包含关键字"泉眼"的行 3实现效果&#xff1a;重命名文件夹empty为full&#xff0c;复制文件cc…

C语言入门基础题:奇偶 ASCII 值判断(C语言版)和ASCII码表,什么是ASCII码,它的特点和应用?

1.题目描述&#xff1a; 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES &#xff0c;否则&#xff0c;输出 NO例如&#xff0c;字符 A 的 ASCI 值是 65 &#xff0c;则输出 YES &#xff0c;若输入字符 B(ASCII 值是 66)&#xff…

解决:Flink向kafka写数据使用Producer精准一次(EXACTLY_ONCE)异常

在使用flink向kafka写入数据报错&#xff1a;Caused by: org.apache.kafka.common.KafkaException: Unexpected error in InitProducerIdResponse; The transaction timeout is larger than the maximum value allowed by the broker (as configured by transaction.max.timeou…

Linux Mac 安装Higress 平替 Spring Cloud Gateway

Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…

分享一个 EF6 分页查询数据的 IQueryable 扩展方法

前言 不废话&#xff0c;直接上方法。_ IQueryable 扩展方法 方法一 /// <summary> /// 由其它 Reponsitory 提供数据源&#xff0c;分页查询数据 /// </summary> /// <typeparam name"T"></typeparam> /// <typeparam name"S&quo…

java算法day9

232.用栈实现队列 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值 解决栈和队列的基本数据结构 Queue&#xff08;队列&#xff09; 在java中是一个接口。定义的方法&#xff1a; //boolean add(E e): 将指定的元素插入此队列&#xff08;如果…

开源数据 | 语音对话大模型高品质数据集——MagicHub多方言语音数据集推荐

近日&#xff0c;法国知名开源AI研究实验室Kyutai推出了一款具备看、听、说多模态大模型——Moshi。Moshi功能与GPT-4o相似&#xff0c;可以听取人的语音提问后进行实时推理回答内容。然而&#xff0c;Moshi最吸引人的是全面开源&#xff0c;并可以支持在端侧运行。这将大大提振…