一个简单的游戏修改器的源代码 |
您所在的位置:网站首页 › gg修改器的文件夹 › 一个简单的游戏修改器的源代码 |
#include#include #include using namespace std; typedef struct Node //定义一个结构体 { DWORD Add; struct Node* pNext;}node;node* pHead = NULL, *pEnd = NULL; HANDLE hMyAllProce;DWORD m_page = 4*1024; //每页4kb void ShowAllProcess(); //显示所有进程 BOOL OpenMyProcess(); //打开自己需要的进程 void FirstFind(); //第一次找的函数,第一次找 是在内存里面找void FindPage(DWORD m_begin,DWORD m_value); //第一页查找的函数 void ShowList(); //显示出找到数据所连成的链表void FindNext(); //下一次找 BOOL WriteMyprocess(); //对找到的数据进行修改 int main(){ char flag; ShowAllProcess(); if (OpenMyProcess()) { FirstFind(); ShowList(); while (1) { cout WriteMyprocess(); break; } } } system("pause");; return 0;}void ShowAllProcess(){ int flag = 0; PROCESSENTRY32 pr ={sizeof(PROCESSENTRY32)}; //定义一个结构体 目的是为了存储快照相应的值 //这个结构体有很多缺省的值 但是大小必须设定 HANDLE hMyAllProce = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//调用快照的函数 if (Process32First(hMyAllProce,&pr)) //Process32First是第一次获取快照的进程信息 判断能不能获取进程信息 { //有两个参数第一个是快照函数返回的句柄 第二个是 一个指向PROCESSENTRY32结构体的指针 do { flag++; cout cout FindPage(i,m_value); //每一页查询都调用按页查询函数 }}void FindPage(DWORD m_begin,DWORD m_value) //按页查询函数有两个参数 开始查询的位置和要查询的数据{ BYTE m_byte[4096]; //每次 查4k 查4096个字节 node* temp = NULL; DWORD *pm_valve = (DWORD*)m_byte; if (!ReadProcessMemory(hMyAllProce,(LPCVOID)m_begin,m_byte,4096,NULL)) //读进程函数 四个参数:从哪里读的(进程快照)从什么时候开始读 { //读到哪里 每次读多大 return; } for (DWORD i = 0;i< 1024;i++) //每个DWORD4个字节查1024次总共查4096个字节 { //如果找到所要查询的数据,把数据连入链表,下一次从链表里面读取 if(pm_valve[i] == m_value) { temp = new node; temp->Add = m_begin + i*4; temp->pNext = NULL; if (!pHead) { pHead = temp; } else { pEnd->pNext = temp; } pEnd = temp; } }} void ShowList() //显示链表{ node*temp = pHead; int m_count = 0; while(temp) { m_count++; cout if (!ReadProcessMemory(hMyAllProce,(LPCVOID)tempNext->Add,m_byte,4,NULL)) //如果不能读取进程信息就返回 { return; } if (*pm_valve!=m_value) //如果读到的数据和要求的数据不相等读下一个 { jz = tempNext; tempNext=tempNext->pNext; temp->pNext = tempNext; delete jz; } else { temp = temp->pNext; tempNext= tempNext->pNext; } } if (!ReadProcessMemory(hMyAllProce,(LPCVOID)pHead->Add,m_byte,4,NULL)) //判断第一个结点是否和所要求的数据是否相等 { return; } if (*pm_valve!=m_value) { jz = pHead; pHead = pHead->pNext; delete jz; }} BOOL WriteMyprocess() //修改进程里的数据{ DWORD m_Addr; DWORD m_Value; cout cout |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |