​
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>BOOL FindFirst(DWORD dwValue);//对目标进程空间进行查找
BOOL FindNext(DWORD dwValue);//对目标空间进行2,3,4。。查找//查找数据的地址列表
DWORD g_arList[1024];
int g_nListCnt;//有效的地址个数
HANDLE g_hProcess;// 目标进程的句柄void ShowList();//用来进行交互显示的//我们用来进行修改目标进程的值
BOOL WriteMemory(DWORD dwAddr, DWORD dwValue);
int main(void) {//首先,我们可以通过CreatePorcess把我们的目标进程Testor.exe拉起来//进而,我就可以访问Testor进程空间了char szFileName[] = "02Testor.exe";STARTUPINFO si;memset(&si, 0, sizeof(si));PROCESS_INFORMATION pi;BOOL bRet = ::CreateProcess(NULL,szFileName,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi);g_hProcess = pi.hProcess;//首先,我们需要将当前的memchange程序接收一个目标值,//并将这个目标值进行搜索比对int iVal;printf("请输入您要修改的变量数值\n");scanf("%d", &iVal);//进行第一次查找FindFirst(iVal);//进行交互显示ShowList();while (g_nListCnt > 1) {printf("请再一次输入您要修改的变量数值\n");scanf("%d", &iVal);//进行下一次搜索FindNext(iVal);ShowList();}//希望用户将修改的新数值输入,我们进行修改替换printf("目标地址是%p\n", g_arList[0]);printf("请输入新数据\n");scanf("%d", &iVal);//写入新数值,修改完毕if (WriteMemory(g_arList[0], iVal)) {printf("修改成功");}system("pause");return 0;
}BOOL CompareAPage(DWORD dwBaseAddr, DWORD dwValue) {BYTE arBytes[4096];if (!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))return FALSE;//当前页面可以读DWORD* pdw;for (int i = 0; i < (int)4 * 1024 - 3; i++) {pdw = (DWORD*)&arBytes[i];if (pdw[0] == dwValue) {if (g_nListCnt >= 1024)return FALSE;g_arList[g_nListCnt++] = dwBaseAddr + i;}}return TRUE;
}
BOOL FindFirst(DWORD dwValue) {const DWORD dwOneGB = 1024 * 1024 * 1024;const DWORD dwOnePage = 4 * 1024;if (g_hProcess == NULL)return FALSE;DWORD dwBase = 640 * 1024;BOOL bRet = FALSE;for (; dwBase < 2 * dwOneGB; dwBase += dwOnePage) {CompareAPage(dwBase, dwValue);}return TRUE;
}BOOL FindNext(DWORD dwValue) {//保存一下有效地址个数int nOrgCnt = g_nListCnt;g_nListCnt = 0;BOOL bRet = FALSE;//假定查找失败DWORD dwReadValue;for (int i = 0; i < nOrgCnt; i++) {if (::ReadProcessMemory(g_hProcess, (LPVOID)g_arList[i],&dwReadValue, sizeof(DWORD), NULL)) {if (dwReadValue == dwValue) {g_arList[g_nListCnt++] = g_arList[i];bRet = TRUE;}}}return bRet;
}void ShowList() {for (int i = 0; i < g_nListCnt; i++) {printf("%p\n", g_arList[i]);}
}BOOL WriteMemory(DWORD dwAddr, DWORD dwValue) {return ::WriteProcessMemory(g_hProcess, (LPVOID)dwAddr, &dwValue, sizeof(DWORD), NULL);
}​

Windows内存修改初篇相关推荐

  1. windows平台下的进程内存修改

    Windows内存修改 你可能用过金山游侠,GameMaster8,Cheat Engine,那你有没有想过自己实现一个简易的内存修改工具?本文将介绍在Windows平台下实现一个简易内存修改工具的方 ...

  2. 游戏外挂原理解析与制作 - [内存数值修改类 篇四]

    前三篇的博文结合了C#的Demo对内存数据修改一类的挂剖析了原理,利用C#语言调用Windows API,我们其实已经写出了一个简单的内存扫描工具,但是它存在一些缺陷,比如说只能所搜索单一类型数值(整 ...

  3. win10下使内存修改可用与关闭windows defender

    win10下修改游戏常常会遇到修改器打不开或者一修改内存就出错的问题,实际上是因为win10系统设置默认执行数据保护造成的. 比如轩辕剑系列的箭情内存修改器.至愚修改器都会有这样的问题. 为了备忘,现 ...

  4. Windows编程_Lesson008_内存_内存修改器

    内存修改器 修改指定进程名字中的指定值所在的地址,进而改变这个值. 单线程版本 #include <Windows.h> #include <stdio.h> #include ...

  5. 网络安全学习第15篇 - 游戏内存修改

    请依据实验文档<游戏辅助的实现>中的内容,自行编写一个游戏内存数据修改程序,使其可以对某款游戏的某一项或某几项数值进行修改.有余力的同学可以任选一款游戏尝试修改. 实验报告的最后请简述,作 ...

  6. Windows内存管理机密+揭穿内存优化工具的骗局

    原文:The Memory-Optimization Hoax:RAM optimizers make false promises 作者:Mark Russinovich 译者:盆盆   我们在浏览 ...

  7. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  8. linux 和windows 内存管理区别

    linux 和windows 内存管理区别 在 80 年代初,IBM 推出的 IBM PC 机采用了 Intel 16 位的 8088 处理器,该处 理器可以访问最多 1MB 的存储器.当应用程序需要 ...

  9. 关于IC卡密钥理解和修改(简易篇)

    关于IC卡密钥理解和修改(简易篇) 常用的IC卡由于结构简单,使用方便,价格低,越来越受到普通应用的欢迎.本文主要描述普通IC卡的密钥相关的知识. 关于IC卡的读写,必须使用IC卡读写器, 我们推荐使 ...

最新文章

  1. 【Ubuntu】ubuntu工具 记录shell终端的内容到文件中:script
  2. RecyclerView.Adapter:全能notify解决方案
  3. 5新标签中超链接_一环路新标签——“市井生活圈” 正在更新中......
  4. SAP CRM product customizing下载的第二个队列
  5. get占位符传多个参数_mybatis多个参数(不使用@param注解情况下),sql参数占位符正确写法...
  6. c语言ue,小话C语言中的cotinue和break
  7. 使用VS2012遇到的问题
  8. TCP如何保障可靠性
  9. Java写file文件上传,在线预览思路
  10. orcale自定义数组并向数组中查询插入数据
  11. 常用Windows 运行命令
  12. oracle怎么关联表查询语句,Oracle数据库的多表关联查询SQL语句
  13. 什么是503服务不可用错误(以及如何解决)?
  14. 计算机软件服务费入哪个科目,软件服务费计入什么科目?
  15. Linux系统编程:IPC信号量
  16. mysql spring lobhandler_Spring 让 LOB 数据操作变得简单易行()
  17. NVIDIA RTX A6000深度学习训练基准
  18. LRM-00101: unknown parameter name 'location' LRM-00101: unknown parameter name 'valid_for' 粗心引起问题一例
  19. 契约锁电子签助力拍卖业务网上签约,保全证据、不可抵赖,成交快
  20. 应广单片机定时器中断配置

热门文章

  1. 当HTTP状态代码不足时:处理Web API错误报告
  2. java ee基础知识_Java EE:基础知识
  3. jvm开源_开源JVM Sampling Profiler
  4. java8 javafx_Java8中的外观(JavaFX8)
  5. Java:GraalVM数据库流性能
  6. 通过投影增强数据模型
  7. 垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?
  8. powermock模拟对象_使用PowerMock测试对象的内部状态
  9. 带Lambda表达式的Apache Wicket
  10. Spring WebApplicationInitializer和ApplicationContextInitializer的混淆