[读取目标内存和修改目标内存]

来源:互联网 发布:人工智能高清免费视频 编辑:程序博客网 时间:2024/05/23 01:36

 

 

写这篇的文章的初衷是,当时看到这种类型的觉得有意思。然后从网上看了很多前辈的文章,理了下思路。

留下此文,给那些后来的人留恋。天火玄月  //2013 /10/08 ,于广州。

 

 

CString DlgName="Step 2";
byte input12=8;
DWORD m_num=0;

 

 

//读取目标程序的内存数据
void CRMDlg::OnButton1()
{         
 
  // 1、FindWindow               //获取窗口句柄
  //2、GetWindowThreadProcessId //获取窗口进程ID
  //3、OpenProcess              //打开指定进程
  //4、ReadProcessMemory        //读指定进程 内存数据
 //获取窗口句柄、

     ((CEdit*)GetDlgItem(IDC_EDIT2))->GetWindowText(DlgName);
  if(DlgName=="\0")
  MessageBox("输入的窗口名为空");

 HWND gameh=::FindWindow(NULL,DlgName);
//获取窗口进程ID
 DWORD processid;
 ::GetWindowThreadProcessId(gameh,&processid);
 if(processid<1)
     MessageBox("窗口没找到");
 //打开指定进程
 HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,false,processid);
 //读指定进程 内存数据
    DWORD byread;
 LPCVOID pbase=(LPCVOID)0x00962858;//读取当前的指针,强制转换为LPCVOID指针
  LPVOID  nbuffer=(LPVOID)&m_num;   //保存当前的指针,强制转换为LPVOID指针
 ::ReadProcessMemory(processH,pbase,nbuffer,4,&byread);

 //可以这样例如int a=123456;要显示123456可以使用itoa(a,new char,10)将a转化为char*类型,作为textout的参数就可以了
   //  MessageBox(itoa(processid,new char ,10),itoa(m_num,new char ,10));
  UpdateData();

 GetDlgItem(IDC_SHOW1)->SetWindowText(itoa(m_num,new char ,10));
  UpdateData(false);

}

 

 

//修改目标程序的内存数据

 


void CRMDlg::OnButton2()
{
HWND gameh=::FindWindow(NULL,DlgName);
if (gameh==0) { return;} //没有找到游戏窗口
LPVOID  acode=&m_input;
DWORD pid;
::GetWindowThreadProcessId(gameh,&pid);
DWORD byWriteSize;
HANDLE hp=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
//::WriteProcessMemory(hp,(LPCVOID)(0x00962858),(LPVOID)(acode),1,byWriteSize);//写入NOP代码
   ::WriteProcessMemory(hp,(LPVOID)0x00962858,&m_input,2,&byWriteSize);
 
}

//刷新窗体名称 。

void CRMDlg::OnChangeEdit2()
{
 CString tt="TEst";
((CEdit*)GetDlgItem(IDC_EDIT2))->GetWindowText(tt);
 SetWindowText(tt+"0");

 
}

原创粉丝点击