複製鏈接
請複製以下鏈接發送給好友

內存截取

鎖定
內存截取是軟件從內存中讀取\獲取自己想要知道的信息返回給用户的一種內存讀寫的用法。
中文名
內存截取
用    途
讀取\獲取內存信息
常用於
外掛、盜號、插件等開發
屬    性
電子技術

內存截取概念

常用於外掛、盜號、插件等開發當中。

內存截取實例代碼

常見的內存讀寫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 .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;
}