当前位置:在线查询网 > 在线百科全书查询 > 内存截取

内存截取_在线百科全书查询


请输入要查询的词条内容:

内存截取




一.概念


内存截取,故名思意,软件从内存中读取\\获取自己想要知道的信息返回给用户的一种内存读写的用法。常用于外挂、盗号、插件等开发当中。

二.实例代码


常见的内存读写API有ReadProcessMemory。

实例:

截取UC密码(演示内存截取用)

/*----------------------------我是分割线-----------------------
此程序只为演示内存截取,BUG多多,截取密码最好是与HOOK相结合。
----------------------------我是分割线-----------------------*/
#include <stdio.h>
#include <windows.h>
#include <Tlhelp32.h>
//懒得重复写弹框,自定义一个函数实现,其实还是调用MessageBox
void MyMessageBox(char* lpText)
{
MessageBox(NULL,lpText,"Error",0);
}
//读取内存,所需参数为进程句柄和要读取的基址
char* MyReadMemory(HANDLE hProcess,LPCVOID lpBaseAddress)
{
char *CountPt=new char[MAX_PATH];
ReadProcessMemory(hProcess,lpBaseAddress,CountPt,strlen(CountPt)+1,NULL);
return CountPt;
}
//获取进程PID,所需参数为进程名
DWORD GetProcessID(char* ProcessName)
{
PROCESSENTRY32 pe32;
//获取进程快照
HANDLE Procnap= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(Procnap==INVALID_HANDLE_VALUE)
{
return 0;
}
//枚举快照中的第一个进程
BOOL pdnap=Process32First(Procnap,&pe32);
while(pdnap)
{
BOOL ReValue=true;
//如果当前进程不是要找的进程名则查找下一个,这里为uc.exe
if(strcmp(pe32.szExeFile,ProcessName)!=0)
{
pdnap=Process32Next(Procnap,&pe32);
}
//否则查到到,返回进程PID
else
{
return pe32.th32ProcessID;;
}
}
return 0;
}
int main()
{
//进程名
char *ProcName="uc.exe";
DWORD Pid;
//获取进程PID
Pid=GetProcessID(ProcName);
if(Pid==0)
{
MyMessageBox("GetProcessID Error!");
return 0;
}
//打开进程
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
if(hProcess==NULL)
{
MyMessageBox("GetProcessID Error!");
return 0;
}
LPCVOID lpNameBase=(LPCVOID)0x01BA9FAA; //固定地址,包含UC号码,昵称和状态
LPCVOID lpPassBase=(LPCVOID)0x01BFEF68; //密码动态地址,各位自己调出来
//读取内存中的内容
char* Countpt=MyReadMemory(hProcess,lpNameBase);
char* MyPass=MyReadMemory(hProcess,lpPassBase);
MyMessageBox(Countpt);
MyMessageBox(MyPass);
return 0;
}

相关分词: 内存 截取