游戏修改器

news/2024/10/17 14:25:37/

一个简单的Windows游戏修改器,可以修改CS钱数等。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <TlHelp32.h>
#include <sys\timeb.h>#define KONEK 1024
#define KPAGE 4*KONEK
#define KONEG KONEK*KONEK*KONEK
#define KFILELEN 60BOOL CompareAPage(DWORD dwBaseAddr,DWORD dwValue);
BOOL FindFirst(DWORD dwValue);
BOOL FindNext(DWORD dwValue);
BOOL WriteMemory(DWORD dwValue);
void ShowAddList(void);
void editValue(DWORD dwId);
void showAllProcess();
BOOL closeProcess(DWORD dwId);
void showMenu();
DWORD getProcessId();
DWORD GetBaseAddress(DWORD dwPID);DWORD g_dwAddList[KPAGE] = {0};
DWORD g_dwCount = 0;
HANDLE g_hProcess = NULL;
DWORD g_dwId = 0;int main(int argc,char *argv[])
{UINT uIndex = 0;DWORD dwId;while(1){showMenu();scanf("%d",&uIndex);switch (uIndex){case 1:showAllProcess();break;case 2:editValue(getProcessId());break;case 3:closeProcess(getProcessId());break;case 4:system("pause");return 0;break;case 5:DWORD dwValue = GetBaseAddress(getProcessId());printf("基址:%#08x\n",dwValue);break;}system("pause");}system("pause");return 0;
}void showMenu()
{system("cls");printf("1.进程列表\n");printf("2.修改内存\n");printf("3.结束进程\n");printf("4.退出系统\n");printf("5.得到基址\n");printf("请输入选择:");
}DWORD getProcessId()
{DWORD dwId;printf("请输入进程ID:");scanf("%d",&dwId);g_dwId = dwId;return dwId;
}void editValue(DWORD dwId)
{g_hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);if (!g_hProcess){printf("打开进程%s失败\n",dwId);return;}DWORD dwValue;printf("请输入第一次的值:");scanf("%d",&dwValue);FindFirst(dwValue);ShowAddList();printf("请输入第二次的值:");scanf("%d",&dwValue);FindNext(dwValue);ShowAddList();printf("请输入要新值:");scanf("%d",&dwValue);WriteMemory(dwValue);
}BOOL CompareAPage(DWORD dwBaseAddr,DWORD dwValue)
{BYTE bytes[KPAGE];if (!ReadProcessMemory(g_hProcess,(LPCVOID)dwBaseAddr,bytes,KPAGE,NULL)){//printf("读取内存失败\n");return FALSE;}DWORD *pdw = (DWORD*)bytes;for (int i=0;i<KONEK;i++){if (pdw[i] == dwValue){g_dwAddList[g_dwCount++] = dwBaseAddr + i*sizeof(DWORD);}		}return TRUE;
}BOOL FindFirst(DWORD dwValue)
{OSVERSIONINFO vi = {sizeof(vi)};GetVersionEx(&vi);DWORD dwBase;if (vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS){printf("Windows 98\n");dwBase = 4 * KONEK * KONEK;}else if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT){printf("Windows NT\n");dwBase = 64 * KONEK;}g_dwCount = 0;DWORD dwOld = 0;DWORD dwNew = 0;struct timeb start;struct timeb end;printf("搜索中...\n%%%02d",0.0);ftime(&start);//dwBase = GetBaseAddress(g_dwId);for (;dwBase < 2 * KONEG;dwBase+=KPAGE){dwNew = dwBase/(KONEG/50);if (dwNew != dwOld){printf("\b\b%02d",dwNew);dwOld = dwNew;}CompareAPage(dwBase,dwValue);}ftime(&end);printf("\b\b100\n搜索完成\n");printf("用时%d毫秒\n",(end.time-start.time)*1000+ end.millitm-start.millitm);return TRUE;
}BOOL FindNext(DWORD dwValue)
{DWORD dwCount = 0;DWORD dwValue1 = 0;for (int i=0;i<g_dwCount;i++){if (!ReadProcessMemory(g_hProcess,(LPCVOID)g_dwAddList[i],&dwValue1,sizeof(DWORD),NULL)){//printf("读取内存失败\n");return FALSE;}if (dwValue1 == dwValue){g_dwAddList[dwCount++] = g_dwAddList[i];}}g_dwCount = dwCount;return TRUE;
}BOOL WriteMemory(DWORD dwValue)
{for (int i=0;i<g_dwCount;i++){if (!WriteProcessMemory(g_hProcess,(LPVOID)g_dwAddList[i],(LPCVOID)&dwValue,sizeof(DWORD),NULL)){return FALSE;}}	return TRUE;
}void ShowAddList(void)
{printf("地址列表...\n");for (int i=0;i<g_dwCount;i++){printf("%#010x\n",g_dwAddList[i]);}
}BOOL closeProcess(DWORD dwId)
{BOOL bRet = FALSE;HANDLE hHandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);if (hHandle != NULL){bRet = TerminateProcess(hHandle,0);}CloseHandle(hHandle);return bRet;
}void showAllProcess()
{PROCESSENTRY32 pc;pc.dwSize = sizeof(pc);HANDLE dProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);if (INVALID_HANDLE_VALUE == dProcessSnap){printf("获得进程失败");system("pause");return ;}BOOL bMore = Process32First(dProcessSnap,&pc);while (bMore){printf("进程ID:%4d | 进程名称:%s\n",pc.th32ProcessID,pc.szExeFile);bMore = Process32Next(dProcessSnap,&pc);}CloseHandle(dProcessSnap);}//
//   函数功能: 获取exe模块的加载地址
//   参   数: dwPID:进程的pid; 
//   返 回 值: 返回exe模块基址;
//
DWORD GetBaseAddress(DWORD dwPID)
{HANDLE hModuleSnap = INVALID_HANDLE_VALUE;MODULEENTRY32 me32;// Take a snapshot of all modules in the specified process.hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );if( hModuleSnap == INVALID_HANDLE_VALUE ){printf("失败!");return 0;}me32.dwSize = sizeof( MODULEENTRY32 );if( !Module32First( hModuleSnap, &me32 ) ){CloseHandle( hModuleSnap );           // clean the snapshot objectreturn 0;}DWORD Value = (DWORD)me32.modBaseAddr;CloseHandle( hModuleSnap );return Value;
}

点击下载



http://www.ppmy.cn/news/157670.html

相关文章

CE游戏修改器制作游戏修改器教程

一、先下载CE。 二、打开CE目录下的2个文件&#xff1a; 三、附加进程(图示)&#xff1a; 操作到此就结束了。这个教程就是如此简单&#xff0c;下一关同样如此。 (就像玩游戏一样&#xff0c;完全是闯关试的操作&#xff0c;请各位按照顺序&#xff0c;一关一关的走) 按下一步…

常识——CE修改器使用

文章目录 流程&#xff1a;此处仅作软件自带教程解释使用选择需要修改的进程找到目标值的内存地址修改数据找到目标值真实静态地址&#xff0c;保存为ce文件方便下次直接使用 流程&#xff1a; 选择进程 找到目标值的动态内存地址修改数据 找到目标值真实静态地址&#xff0c;…

gg修改器

第2课_数字的类型 你想要找到游戏里的一个数字, 那么有2个是必选的. 第一,选择内存范围. 第二,选择数值类型. 内存范围,默认勾上前7种即可. 只是参考,其他的,也可能要用, 以后再说. A:Auto 搜全部&#xff0c;最耗时间。 当你完全不知道数字是什么时,就可以搜A类. 5个…

宝可梦火红存档修改器

花了好久的功夫&#xff0c;终于把宝可梦火红的存档修改器编完了。实现了包括训练师姓名、ID、金钱、宝可梦种族、技能、物品等属性的修改。我把宝可梦火红的GBA文件、模拟器&#xff0c;还有我编写的修改器都打包上传到百度网盘了。下载地址&#xff1a;链接&#xff1a;https…

英灵神殿服务器修改器,英灵神殿修改器

英灵神殿修改器是一款专门为了同名游戏而打造的专业修改器。只要下载英灵神殿修改器用户们就可以随意的按照需要来修改游戏中自己的重要属性&#xff0c;有需要就快来下载吧。 英灵神殿修改器介绍 1、为了让玩家能够简单地制作Valhallaepic&#xff0c;各种各样的属性变更的支持…

gg修改器ios版下载

gg修改器ios版下载 推荐一个修改器下载站www.miaozan.art      GameGuardian iOS – 您是否花费数月时间尝试玩游戏的所有阶段&#xff1f;您不想花钱达到最好的阶段吗&#xff1f;然后&#xff0c;游戏改装是您的最佳选择。您可以修改任何游戏以赚取无限的硬币&#xff0…

CE修改器学习历程之下载、安装和汉化

1.下载 我们到官方网站&#xff0c;切记一定要去官方网站下载&#xff0c;网址【Cheat Engine】&#xff0c;因为其他地方我怕有人给安装包加了暗门&#xff0c;到时候装上给你下载什么乱七八糟的其他东西。 2.安装 安装时选择English&#xff0c;然后OK->Next&#xff0…

资源修改器

1.简介 《命令与征服&#xff1a;红色警戒(报)3》作为经典游戏&#xff0c;是不少人儿时的记忆&#xff0c;同时也是博主童年最爱的一款游戏&#xff0c;为此最近我重新下载了该款游戏&#xff0c;红警3的下载地址如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1…