免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
接下来会写C/C++代码,C/C++代码不是很难,然后为了快速掌握逆向这个技能,我不会写C/C++语言基础的教学,也不需要学,跟着下方写的代码直接抄,然后跟着文字描述理解一下代码实现的功能,就可以了,当后面抄的C/C++代码多了自然就会C/C++语言了(这样学会的C/C++会导致基础非常不扎实,如果不想浪费时间,那就等学会了逆向(逆向是思路并不是写代码,所以直接抄C/C++代码)再回头看C/C++基础)
上一个内容:1.x86游戏实战-认识CE
效果图:
首先打开Visual Studio 2022
然后选择单击下图红框,创建新项目
然后选择c++
然后选择控制台应用
然后设置项目名称、位置(意思是代码存放位置)、解决方案名
下图是为了展示项目名称与解决方案名称的区别,然后点创建
项目名称与解决方案名称的区别,解决方案这个概念它是用来概括项目的,多个项目组合起来就可以叫做一个解决方案,一个项目也可以叫解决方案,不理解也没事,不重要
项目创建好,如下图红框位置,它有一段代码,这段代码不重要
然后上一个内容中CE读取了游戏中的数据,这种操作叫做跨进程读取,那么这种操作怎么实现的?
涉及两个函数,OpenProcess 和 ReadProcessMemory
OpenProcess用来打开一个进程
ReadProcessMemory用来读取指定进程中的内存
在攻防对抗中,防的一方一般会给 OpenProcess 函数做拦截,让它返回一个无权限的句柄,后面会写如何提权 ,这句话看到这里可能不懂,看完下方的代码里写的文字就会懂了
需要的东西
Pid
测试读取的数据
代码:
然后有一个东西,鼠标单击 函数,然后按F1键
会打开函数的说明
下图的说明是中文的,也有可能是英文的,如果是英文的那就用浏览器的翻译工具进行网页翻译
然后下图红框,函数说明里会有这种[in] [out]这种东西,[in]的意思是我们给函数传递的东西,[out]的意思是给函数一个内存地址,然后函数会给这个内存地址里写东西,写的东西是什么就看看说明
// ConsoleApplication4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include "Windows.h"
int main()
{
/*
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* buffer = (DWORD*)0x60BAA6A0;
DWORD ret;
/*
h要读取谁的内存
buffer内存地址
ret内存地址的数据
4读取4个字节
NULL没用
ReadProcessMemory(h, buffer, &ret, 4, NULL); 这一句的意思是,从h的内存中的0x60BAA6A0位置开始读取4字节,放到ret它里面,如果ret的大小没有4字节会显示有问题或程序崩溃
*/
ReadProcessMemory(h, buffer, &ret, 4, NULL);
printf("%d", ret);
}