请输入您要查询的百科知识:

 

词条 内存截取
释义

一.概念

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

二.实例代码

常见的内存读写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;
}

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/1 13:04:56