int szPassBuff;
ReadProcessMemory(hProcess,(LPCVOID)0xB7026B0,&szPassBuff,4,0);
我用cout<<"szPassBuff"<<szPassBuff<<"\t"<<"&szPassBuff"<<&szPassBuff<<endl;
地址是没有错误的,对应的10进制是200,可是为什么输出的是0和00477740呢?
我怀疑是地址错误,就换了一个地址,地址也是对的,对应的是2500,可是为什么输出的还是0和00477740呢?小弟不懂,请大神们教教啊...
ReadProcessMemory(hProcess,(LPCVOID)0xB7026B0,&szPassBuff,4,0);
我用cout<<"szPassBuff"<<szPassBuff<<"\t"<<"&szPassBuff"<<&szPassBuff<<endl;
地址是没有错误的,对应的10进制是200,可是为什么输出的是0和00477740呢?
我怀疑是地址错误,就换了一个地址,地址也是对的,对应的是2500,可是为什么输出的还是0和00477740呢?小弟不懂,请大神们教教啊...
解决方案 »
- 求CEditView的使用方法
- 辅助线程求教
- 用CPrintDialog,怎么控制打印机退纸?
- 桌面程序怎样才能防止Spy++等程序的捕捉啊
- 分明天补齐100.问 从 VC6.0 到 VC2005 的变化. 大部分的分给 最早回答的 且最详细的
- combo box的使用问题
- Charles Petzold出了新的Windows编程的书,值得买吗?
- 请问怎么重画标题条,包括最小化,最大化按钮?
- 求教一个问题从系统服务中启动进程的问题
- vc中是否提供了类似“写字板”的控件,可显示超过32K的文本。哪位大侠能详细告知,除了感谢之外,给分多多。急!!!
- MFC中的CString对于中文采用什么样的编码方式?怎样改变中文的编码方式呢?
- windows编程对话框异常出现异常。
你检查下吧
hProcess=OpenProcess(PROCESS_ALL_ACCESS, FALSE,Pid);你看看对不对?
To open a handle to another local process and obtain full access rights, you must enable the SeDebugPrivilege privilege. For more information, see Changing Privileges in a Token.
cout<<GetLastError()<<endl;
不知道对不对,它只给一个6
我进行了如下测试:
我从进程管理器中获得程序A的pid,程序A向地址xxxxxxxx写入内容,并用程序B对程序A地址xxxxxxxx进行读取
成功读取。
我的代码如下 CWnd *ieWnd;
HANDLE hProcess = NULL;
DWORD dwprocessId;
DWORD dwRdBytes;
TCHAR szText[128]; ieWnd = FindWindow(NULL,_T("我是谁"));
::GetWindowThreadProcessId(ieWnd->GetSafeHwnd(),&dwprocessId);
hProcess = ::OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ,FALSE,dwprocessId); ReadProcessMemory(hProcess,(LPVOID)0x004222e0,szText,128,&dwRdBytes);
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
static HWND Hwnd;
static DWORD Pid;
static HANDLE hProcess;
static int szPassBuff;
Hwnd=FindWindow(NULL,TEXT("植物大战僵尸中文版"));
if(Hwnd)
{
cout<<"窗口寻找成功"<<endl;
}
else
{
cout<<"窗口寻找失败"<<endl;
}
Pid=GetWindowThreadProcessId(Hwnd,&Pid);
if(Pid)
{
cout<<"PID寻找成功."<<endl;
}
else
{
cout<<"PID寻找失败."<<endl;
}
hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
if(hProcess)
{
cout<<"ID寻找成功."<<endl;
}
else
{
cout<<"ID寻找失败."<<endl;
}
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
cout<<GetLastError()<<endl;
cout<<"数据:"<<&szPassBuff<<endl;
return 0;
}前面窗口和PID的成功的,后面ID就是失败了...你们帮我改改,可以吗?
GetWindowThreadProcessId(Hwnd,&Pid);
PROCESS_ALL_ACCESS换成PROCESS_VM_READ|PROCESS_VM_OPERATION
#include<windows.h>
using namespace std;
int main()
{
static HWND Hwnd;
static DWORD Pid;
static HANDLE hProcess;
static int szPassBuff;
Hwnd=FindWindow(NULL,TEXT("植物大战僵尸中文版"));
if(Hwnd)
{
cout<<"窗口寻找成功"<<endl;
}
else
{
cout<<"窗口寻找失败"<<endl;
}
GetWindowThreadProcessId(Hwnd,&Pid);
if(Pid)
{
cout<<"PID寻找成功."<<endl;
}
else
{
cout<<"PID寻找失败."<<endl;
}
hProcess=OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION,FALSE,Pid);
if(hProcess)
{
cout<<"ID寻找成功."<<endl;
}
else
{
cout<<"ID寻找失败."<<endl;
}
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
cout<<"数据:"<<szPassBuff<<endl;
return 0;
}还有一个问题,就是我要关闭进程,这个怎么关闭?
TerminateProcess(hProcess,0);
int Num;
cin>>Num;
WriteProcessMemory(hProcess,(LPVOID)0xB92CAC0,&Num,4,0);
另外对进程使用WriteProcessMemory函数,OpenProcess打开进程时需要增加PROCESS_VM_WRITE标志即 OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,Pid)
#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
static HWND Hwnd;
static DWORD Pid;
static HANDLE hProcess;
static int szPassBuff;
int Num;
Hwnd=FindWindow(NULL,TEXT("植物大战僵尸中文版"));
if(Hwnd)
{
cout<<"窗口寻找成功"<<endl;
}
else
{
cout<<"窗口寻找失败"<<endl;
}
GetWindowThreadProcessId(Hwnd,&Pid);
if(Pid)
{
cout<<"PID寻找成功."<<endl;
}
else
{
cout<<"PID寻找失败."<<endl;
}
hProcess=OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION,FALSE,Pid);
if(hProcess)
{
cout<<"ID寻找成功."<<endl;
}
else
{
cout<<"ID寻找失败."<<endl;
}
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
cout<<"数据:"<<szPassBuff<<endl;
cout<<"输入要修改的数据:";
cin>>Num;
WriteProcessMemory(hProcess,(LPVOID)0xB92CAC0,&Num,4,0);
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
cout<<"数据:"<<szPassBuff<<endl;
TerminateProcess(hProcess,0);//结束进程
CloseHandle(hProcess);//关闭句柄
return 0;
}
目前数据是2100(10进制)
我输入数据1000
但是输出还是2100为什么?
static DWORD Pid;
static HANDLE hProcess;
static int szPassBuff;
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_CREATE:
SetTimer(hwnd,ID_Timer,200,NULL);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
Hwnd=FindWindow(NULL,TEXT("植物大战僵尸中文版"));
if(Hwnd)
{
TextOut(hdc,0,0,TEXT("窗口寻找成功."),strlen("窗口寻找成功."));
}
else
{
TextOut(hdc,0,0,TEXT("窗口寻找失败."),strlen("窗口寻找失败."));
}
GetWindowThreadProcessId(Hwnd,&Pid);
if(Pid)
{
TextOut(hdc,0,18,TEXT("PID寻找成功."),strlen("PID寻找成功."));
}
else
{
TextOut(hdc,0,18,TEXT("PID寻找失败."),strlen("PID寻找失败."));
}
hProcess=OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ, FALSE,Pid);
if(hProcess)
{
cout<<"ID寻找成功."<<endl;
}
else
{
cout<<"ID寻找失败."<<endl;
}
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}这是在win32建立的工程。
我只给窗口过程给大家看就行了
我想问问:
第一:我把数据显示在客户区里面?用TextOut还是什么函数?如果用TextOut怎么做?第二:还有我想用SetTimer来控制检测时间。可是我不知道怎么做。
如果把函数放在PAINT消息中,一旦是退出游戏的话还是显示连接成功(表示没有和计时器关联)
我应该怎么做?
我之前想过,但是不知道带代码
首先,我先打开程序,3个提示都是显示失败的,然后我打开植物大战僵尸,3个提示都显示成功
但是我不关闭程序,先关闭了植物大战僵尸,为什么PID寻找成功?其他的2个都是失败的,这是为什么呢?
static DWORD Pid;
static HANDLE hProcess;
static int szPassBuff;
HDC hdc;
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_CREATE:
SetTimer(hwnd,ID_Timer,200,NULL);
break;
case WM_TIMER:
hdc=GetDC(hwnd);
Hwnd=FindWindow(NULL,TEXT("植物大战僵尸中文版"));
if(Hwnd)
{
TextOut(hdc,0,0,TEXT("窗口寻找成功."),strlen("窗口寻找成功."));
}
else
{
TextOut(hdc,0,0,TEXT("窗口寻找失败."),strlen("窗口寻找失败."));
}
GetWindowThreadProcessId(Hwnd,&Pid);
if(Pid)
{
TextOut(hdc,0,18,TEXT("PID寻找成功."),strlen("PID寻找成功."));
}
else
{
TextOut(hdc,0,18,TEXT("PID寻找失败."),strlen("PID寻找失败."));
}
hProcess=OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_TERMINATE,FALSE,Pid);
if(hProcess)
{
TextOut(hdc,0,36,TEXT("ID寻找成功."),strlen("ID寻找成功."));
}
else
{
TextOut(hdc,0,36,TEXT("ID寻找失败."),strlen("ID寻找失败."));
}
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
TextOut(hdc,0,54,szPassBuff,sizeof(szPassBuff));
ReleaseDC(hwnd,hdc);
// TerminateProcess(hProcess,0);//结束进程
CloseHandle(hProcess);//关闭句柄
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}问一下:为什么不能这样TextOut(hdc,0,54,szPassBuff,sizeof(szPassBuff));
显示数据?
我想显示我应该怎么做啊?
ReadProcessMemory(hProcess,(LPCVOID)0xB92CAC0,&szPassBuff,4,0);
TextOut(hdc,0,54,szPassBuff,sizeof(szPassBuff));
什么不能这样TextOut(hdc,0,54,szPassBuff,sizeof(szPassBuff));
显示数据?
我想显示我应该怎么做啊?
如果是那个进程的一个地址,你需要ReadProcessMemory读到当前进程才能显示
_itow(szPassBuff,a,10);
TextOutW(hdc,0,54,a,wcslen(a));