C语言 植物大战僵尸修改阳光值 代码实现
本文章函数介绍部分大量引用寻梦&之璐的一篇文章
FindWindow
GetWindowThreadProcessId
OpenProcess
ReadProcessMemory
WriteProcessMemory
具体代码实现
FindWindow
函数功能
函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串,这个函数不搜索子窗口。
第一个是要找的窗口的类,第二个是要找的窗口的标题。
函数声明
FindWindowW(_In_opt_ LPCWSTR lpClassName,_In_opt_ LPCWSTR lpWindowName);
在搜索的时候不一定两者都知道,但至少要知道其中的一个。
第一个参数
lpClassName,输入参数,指向一个以null结尾的、用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在lpClassName的低位字节中,lpClassName的高位字节置零。
第二个参数
如果该参数为null时,将会寻找任何与lpWindowName参数匹配的窗口。
返回值
如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为NULL。可以通过调用GetLastError函数获得更加详细的错误信息。
GetWindowTreadProcessId
函数功能
该函数返回创建指定窗口线程的标识和创建窗口的进程的标识符,后一项是可选的。得到窗口句柄后我们可以通过GetWindowsTreadProcessId来获得窗口所属进程ID和线程ID,从而判断创建窗口的进程和线程。
- 进程ID是系统内唯一标识,可以根据ID找到进程句柄
- 根据线程ID可以找到线程句柄
函数声明
GetWindowThreadProcessId(_In_ HWND hWnd,_Out_opt_ LPDWORD lpdwProcessId
);
第一个参数
输入参数,hWnd,窗口句柄。
第二个参数
输出参数,lpdwProcessld,接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝,输出参数是进程ID地址。
返回值
返回值为运行窗口的线程标识,返回的是窗口所属线程ID
OpenProcess
函数功能
根据进程ID打开对应进程,并返回进程的句柄。
函数声明
第一个参数
输入参数,dwDesiredAccess 想拥有的该进程访问权限。
PROCESS_ALL_ACCESS //所有能获得的权限
PROCESS_CREATE_PROCESS //需要创建一个进程
PROCESS_CREATE_THREAD //需要创建一个线程
PROCESS_DUP_HANDLE //重复使用DuplicateHandle句柄
PROCESS_QUERY_INFORMATION //获得进程信息的权限,如它的退出代码、优先级
PROCESS_QUERY_LIMITED_INFORMATION /获得某些信息的权限,如果获得
PROCESS_QUERY_INFORMATION,也拥有PROCESS_QUERY_LIMITED_INFORMATION权限/
PROCESS_SET_INFORMATION //设置某些信息的权限,如进程优先级
PROCESS_SET_QUOTA //设置内存限制的权限,使用SetProcessWorkingSetSize
PROCESS_SUSPEND_RESUME //暂停或恢复进程的权限
PROCESS_TERMINATE //终止一个进程的权限,使用TerminateProcess
PROCESS_VM_OPERATION //操作进程内存空间的权限(可用VirtualProtectEx和WriteProcessMemory)
PROCESS_VM_READ //读取进程内存空间的权限,可使用ReadProcessMemory
PROCESS_VM_WRITE//读取进程内存空间的权限,可使用WriteProcessMemory
SYNCHRONIZE //等待进程终止
第二个参数
输入参数,bInheritHandle表示所得到的进程句柄是否可以被继承
第三个参数
输入参数,dwProcessId被打开进程的PID
返回值
如果函数调用成功将返回一个进程句柄值,否则将返回NULL
注意:在使用完所获得的进程句柄后一定要调用==CloseHandle(handle)==来关闭进程的句柄。
ReadProcessMemory
函数功能
读取进程内存
函数声明
第二个参数就是基址,第三个参数用来存放基址的值,因为基值是固定的,但基址的值是不固定的,用这个值加上偏移就是一级偏移地址。
参数
hProcess
目标进程的句柄,该句柄必须对目标进程具有PROCESS_VM_READ 的访问权限。
lpBaseAddress
从目标进程中读取数据的起始地址。 在读取数据前,系统将先检验该地址的数据是否可读,如果不可读,函数将调用失败。
lpBuffer
用来接收数据的缓存区地址。
nSize
从目标进程读取数据的字节数。
lpNumberOfBytesRead
实际被读取数据大小的存放地址。如果被指定为NULL,那么将忽略此参数。
返回值
如果函数执行成功,返回值非零。
如果函数执行失败,返回值为零。
WriteProcessMemory
该函数与readProcessMemory的参数基本相同,只不过第三个参数lpBuffer为要写入进程的内容。
具体代码实现
#include<stdio.h>
#include<windows.h>
#include<stdbool.h>
int main(void) {HWND hwnd=FindWindow(NULL, L"植物大战僵尸中文版");//获取窗口句柄if (hwnd == NULL) {printf_s("获取窗口句柄失败");}printf_s("窗口句柄=%d ",(int)hwnd);HWND ProcessID = NULL;GetWindowThreadProcessId(hwnd, &ProcessID);//获取进程ID,系统内进程唯一标识if (ProcessID == NULL) {printf_s("获取进程ID失败");}printf_s("ProcessID=%d ", (int)ProcessID);HWND HProcess = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);//根据进程ID获取进程访问权限和句柄if (HProcess == NULL) {printf_s("获取进程句柄失败");}int jizi = 0X006AA00C;//基址int jiziNuber = 0;//基址值int dwSize = 0;//保存实际读取字节大小ReadProcessMemory(HProcess, jizi, &jiziNuber, sizeof(int), dwSize);//读取基址,dwSize可以用NULL替代int firstSize = 0X768;//一级偏移int firstSizeNuber = 0;//一级偏移值ReadProcessMemory(HProcess, jiziNuber + firstSize, &firstSizeNuber, sizeof(int), dwSize);//一级偏移,dwSize可以用NULL替代int cecondSize = 0X5560;//二级偏移int cecondSizeNuber = 0;//二级偏移值ReadProcessMemory(HProcess, firstSizeNuber + cecondSize, &cecondSizeNuber, sizeof(int), dwSize);//二级偏移,dwSize可以用NULL替代printf("%d", cecondSizeNuber);int sunNuber;//保存新阳光值printf("输入新的阳光值\n");scanf_s("%d", &sunNuber);WriteProcessMemory(HProcess, (LPVOID)(firstSizeNuber + cecondSize), &sunNuber, sizeof(int), dwSize);//写入数值CloseHandle(HProcess);return 0;
}
C语言 植物大战僵尸修改阳光值 代码实现相关推荐
- ce逆向修改——植物大战僵尸针对“阳光值”
ce逆向修改--植物大战僵尸 一.实验目的 为熟悉CE的使用和对软件逆向分析有进一步的了解. 二.实验设备 Cheat Engine 6.8.植物大战僵尸 三.实验内容 1.针对"阳光值&q ...
- vs c/c++ 用win32api写出植物大战僵尸的阳光值修改器
一.工具如下: 1.植物大战僵尸1(直接下载逗游游戏盒可以直接下载,网上资源很乱) 2.vs2017(使用vs win32的接口) 3.cheat engine(附下载链接https://www.cr ...
- CE实战:植物大战僵尸修改阳光并制作辅助(小试牛刀)
该教程为新手入门教程,大牛借过不要浪费时间 在学习CE基础篇内容时,我们一直是对CE提供给我们的Tutorial-i386.exe来完成练习的,是不是感觉没有啥意义呢,接下来的实战篇,将带领你把这些关 ...
- C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问题
C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址 C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现 C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问 ...
- C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址
C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址 C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现 C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问 ...
- C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现
C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址 C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现 C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问 ...
- CE实战:修改植物大战僵尸中阳光数值
CE实战:修改植物大战僵尸中阳光数值 游戏版本:植物大战僵尸中文版( PlantsVsZombies ) Cheat Engine 版本:Cheat Engine 7.0 一.打开游戏 二.打开CE并 ...
- c语言游戏call调用,C语言-植物大战僵尸-刷僵尸call;fps游戏CS-方框透视(矩阵+传统)...
C语言-植物大战僵尸-刷僵尸call:fps游戏CS-方框透视(矩阵+传统)前言:大家好,我是向上先生,嘿嘿~最近在学习逆向.反汇编等等,首先我在非常感谢52pojie这个平台,差不多很多学习资源都是 ...
- 汉化版植物大战僵尸修改器
1,自己用c#调用api写了一个植物大战僵尸修改器: 2,可以修改阳光值,金钱,花肥,杀虫剂,树肥,巧克力等属性: 3,自动拾取(冒险模式有效),无等待建造: 4,可以选择不同模式的跳关: 5,僵尸游 ...
- VB版 植物大战僵尸修改器
植物大战僵尸这个小游戏做的还真不错,我看到了几个版本的植物大战僵尸修改器,如C++版,C#版,所以就改写了一个VB版本的,以下是源码 '界面中有两个按钮,分别是cmdSunUnlimited(capt ...
最新文章
- 只有这种AI芯片才能拯救人工智能?
- vue axios拦截器的封装
- linux中系统调用和库函数的区别
- break和continue特殊玩法“标签”
- .NET Core 控制台应用程序使用异步(Async)Main方法
- HTML5本地存储之Web Storage篇
- scp带密码后台传输
- python修改python unittest的运行顺序
- linux运维、架构之路-Kubernetes本地镜像仓库+dashboard部署
- android 大牛播放组件,大牛直播Android播放端SDK说明
- python教程 马哥_python教程马哥
- 诺基亚、罗永浩,中国手机2014八大关键词
- LVGL|lvgl中文教程手册(lvgl中文文档学习教程)
- python plot画图另存jpg_Python Plot+Bokeh画图并保存为图片或网页
- 动态规划:走楼梯问题——01
- 诛仙服务器技能修改,诛仙玩家浅析诛仙3技能修改所带来的轰动
- 【简单详细】为Unity游戏制作开场动画video,新手必看
- 微信公众号的纯文本链接设置
- 【数据库】多表查询二----嵌套查询(子查询)
- PostgreSQL全局替换字符串函数