网络安全学习第15篇 - 游戏内存修改
请依据实验文档《游戏辅助的实现》中的内容,自行编写一个游戏内存数据修改程序,使其可以对某款游戏的某一项或某几项数值进行修改。有余力的同学可以任选一款游戏尝试修改。
实验报告的最后请简述,作为游戏开发厂商,应该如何对抗本次实验所采用的辅助技术。
要求提交实验报告、编译好的exe程序以及cpp源代码。
实验文档与工具.rar
游戏内存修改的原理:
有以下步骤:
FindWindow(NULL, L"shooting")->GetSafeHwnd();
函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
GetWindowThreadProcessId(hWnd, &Pid);
函数功能:GetWindowThreadProcessId是一种计算机函数,功能是找出某个窗口的创建者(线程或进程),返回创建者的标志符,函数原型是DWORD GetWindowThreadProcessId。
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
函数功能:OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
result = WriteProcessMemory(hProcess, (LPVOID)Address, &Score, 4, 0);
函数功能:WriteProcessMemory是计算机语言中的一种函数。此函数能写入某一进程的内存区域(直接写入会出Access Violation错误),故需此函数入口区必须可以访问,否则操作将失败。
总结就是:获得窗口句柄->获得该窗口的进程(在内存中)->打开进程->修改内存
//自定义内存修改
void CXianjianModiferhsb20190625Dlg::OnBnClickedButton2()
{CString Cstr;GetDlgItemText(IDC_EDIT4, Cstr);int fix = _ttoi(Cstr);CString Cstr2;GetDlgItemText(IDC_EDIT4, Cstr2);int address = _ttoi(Cstr2);DWORD Pid;HANDLE hProcess = 0;DWORD Address = address;DWORD Score = fix;DWORD result;HWND hWnd = FindWindow(NULL, L"shooting")->GetSafeHwnd(); ;if (hWnd != 0) {GetWindowThreadProcessId(hWnd, &Pid);hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);if (hProcess == 0) {//printf("Open process failed.");MessageBox(L"Open process failed.", L"提示", MB_OK);//return 0;}result = WriteProcessMemory(hProcess, (LPVOID)Address, &Score, 4, 0);if (result == 0) {//printf("Modify failed.");MessageBox(L"Modify failed.", L"提示", MB_OK);}else {//printf("Modify Success.");MessageBox(L"Modify Success.", L"提示", MB_OK);}}else {//printf("Failed");MessageBox(L"Failed", L"提示", MB_OK);}
}//默认内存修改
void CXianjianModiferhsb20190625Dlg::OnBnClickedButton3()
{CString Cstr;GetDlgItemText(IDC_EDIT4, Cstr);int fix = _ttoi(Cstr);CString Cstr2;GetDlgItemText(IDC_EDIT4, Cstr2);int address = _ttoi(Cstr2);DWORD Pid;HANDLE hProcess = 0;DWORD Address = 0x0019FD48;DWORD Score = fix;DWORD result;HWND hWnd = FindWindow(NULL, L"shooting")->GetSafeHwnd(); ;if (hWnd != 0) {GetWindowThreadProcessId(hWnd, &Pid);hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);if (hProcess == 0) {//printf("Open process failed.");MessageBox(L"Open process failed.", L"提示", MB_OK);//return 0;}result = WriteProcessMemory(hProcess, (LPVOID)Address, &Score, 4, 0);if (result == 0) {//printf("Modify failed.");MessageBox(L"Modify failed.", L"提示", MB_OK);}else {//printf("Modify Success.");MessageBox(L"Modify Success.", L"提示", MB_OK);}}else {//printf("Failed");MessageBox(L"Failed", L"提示", MB_OK);}}
通过此次学习了游戏内存修改,内存游戏修改的原理大概如下:
获得窗口句柄->获得该窗口的进程(在内存中)->打开进程->修改内存
作为游戏开发厂商,应该如何对抗本次实验所采用的辅助技术:
我认为防御游戏内存修改,就应该使发布同一种游戏的每一个游戏的内存地址都不变,可以通过随机添加注释对游戏内存地址进行偏移。这样,同一个游戏内存修改器只可以使用者自己游戏内存,而对于别人的游戏内存修改不能起到相应的作用,虽然可以通过使用CheatEngine找到要修改的每一个游戏内存地址,可是无疑增大游戏外挂开发者的成本,这样就可以有一定限度地做到防御游戏外挂开发者的作用了。
通过此次试验,收益良多。
网络安全学习第15篇 - 游戏内存修改相关推荐
- 只需要一点点C++基础,新手也可以制作单机游戏内存修改器
声明:本文只是为了初学C++的,能够做出一些实用的东西,跳出管理系统的束缚,提升学习的兴趣,在这里选取了单机游戏,请不要尝试在线游戏,违发而已未必可行. 序:首先我们需要一个Qt+VS环境 Qt从ht ...
- 【术】游戏内存修改器原理及游戏敏感数值加密建议
介绍市面上主流游戏内存修改器的原理,对症下药,让游戏从数据加密层面上更好的抵御这类内存修改器. 主流游戏内存修改器有三大内存搜索功能: 1. 基础数值搜索 2. 模糊搜索 3. 反加密搜索 基础数值搜 ...
- 【CE】游戏内存修改 植物大战僵尸 太阳数量
游戏版本:植物大战僵尸中文版( PlantsVsZombies ) https://www.jb51.net/game/73344.html Cheat Engine 版本:Cheat Engine ...
- 手机html5游戏内存修改,一种防止游戏被内存修改器修改的方法
一种防止游戏被内存修改器修改的方法 [技术领域] [0001]本发明涉及游戏数据处理领域,尤其涉及一种防止游戏被内存修改器修改的方法. [背景技术] [0002]目前,电子游戏越来越受到大家的喜爱,丰 ...
- ce游戏内存修改器(Cheat Engine)
ce修改器(Cheat Engine)一款专门修改内存修改编辑的游戏工具它包括16进制编辑,反汇编程序,内存查找工具 新版6.1 版的CE与6.0 最大的区别就是添加了修改器制作工具,比之前 5.6. ...
- andorid平台游戏内存修改器的开发思路
实现一个linux下的命令行内存修改器,然后安卓程序调用这个外置命令 1. 对指定andorid程序的内存进行扫描,把符合条件的数据都列表显现. 这个研究下/proc/pid/maps文件结构,主要分 ...
- 手机html5游戏内存修改,《手机游戏存档修改通用教程1 - 基础篇》
之前发过一些修改游戏存档的帖子,大家都这个都比较感兴趣,但一直以来,大家都是照着教程一步步去修改,很多时候并不明白为什么要这样改.发贴人是怎么知道改哪个地方的?正所谓"授人以鱼不如授人以渔& ...
- 网络安全学习第4篇-使用特征码和MD5对勒索病毒进行专杀,并对加密文件进行解密
请使用IDA或其它分析工具分析本次的样本文件,写一个简要的行为分析报告,并编写一个针对于这次样本的专杀(恢复)程序. 要求: 1.样本分析只要说明主要行为即可.提示:sub_401320主要用于文件加 ...
- 网络安全学习第6篇 - 爆破及PE文件解释
1.请采用暴力破解的方式去尝试破解crack.exe文件(在实验报告中说明破解原理即可,无需提交破解后的文件) 2.请依据参考文档中的内容编写一个小程序,使其可以实现如下功能: ①判断一个文件是否为P ...
最新文章
- hdu 4503 找全是朋友或全不是朋友
- 数据治理的理论实践与发展趋势
- Nginx学习之三-ngx_http_request_t结构体
- C# winform 窗体接收命令行参数自动登录进行系统,模拟600个WCF客户端的并发压力测试...
- 这是不是帮女朋友拍照时的你?哈哈哈哈
- hopper_如何利用卫星收集的遥感数据轻松对蚱hopper中的站点进行建模
- mysql online ddl 5.6_MySQL 5.6的Online DDL功能测试
- django与grpc融合的过程
- ug装配绕轴旋转_UG绘制小吊扇模型,建模装配还能运动起来
- iPhone Objective-C EXC_BAD_ACCESS问题
- Loadrunner11破解完成添加License失败
- MSP430FR5994LannchPad开发笔记之三:MSP430的IO复用以及如何去获取IO复用功能
- 已知xyz yzz 532Java_已知 xyz+yzz=532 ,其中 x 、 y 、 z 为数字,编程求出 x 、 y 、 z 的值。_学小易找答案...
- h5(html5)入门
- (HBuilder X) 从下载HBuilderX到生成app.apk
- FPGA数字信号处理(二)并行FIR滤波器Verilog设计
- 育儿说: 每天给孩子吃牛肉, 坚持半年有什么效果? 医生说了大实话
- 学python多大年龄可以学车_考驾照要多大年龄?
- 一键式打造 DAO,M-DAO 或成 Web3 新宠儿
- 使用Cello部署HyperLedger超级账本