能力值:
( LV2,RANK:10 )
|
-
-
2 楼
最近我也在烦一些类似的问题
稍微有点不同的是我想知道文本框里的数据到底是放在什么区域里的?
具体位置可能不可考究,但是会在哪个区域应该可以知道吧?
帮顶一下
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
找内存地址你用ce啊
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
CE是不错的, 但我需要的是在屏幕上绘制的所有图形的数据, 这样CE只适合找单个的数据, 不太适合找大量数据吧.
是不是可以通过定位WM_PAINT这样的消息来锁定绘制消息再从其中找到数据啊.
有没有可以参考的文章啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
1、用CE找到每个数据的基址。相同的数据肯定有一个相同的基址,甚至所有的数据有一个总基址。
类似于这样:
[[[[总基址]+偏移1]+偏移2]+。。。]+X坐标偏移] //至于数据到底几级,得看楼主自己的软件
2、建一个对话框。放上静态控件,比如X坐标的.这里用IDC_XPOS
3、写程序。
DWORD dwProcessId; //PID
DWORD buff;//存放临时地址
FLOAT xpos;//存放的X坐标数据,一般为单精浮,得看你的是什么软件
TCHAR szbuff[64];
HWND hWnd=FindWindow。。。//根据程序的类名或窗口名得到窗口句柄
GetWindowThreadProcessId(hWnd, &dwProcessId);//根据窗口句柄得到PID
HANDLE hProcess=OpenProcess(PROCESS_VM_READ,FALSE,dwProcessId);//根据PID打开进程的READ权限,打开以后就可以读了.
ReadProcessMemory(hProcess,(LPCVOID)(总基址),(LPVOID)&buff,4,NULL);
ReadProcessMemory(hProcess,(LPCVOID)(buff+偏移1),(LPVOID)&buff,4,NULL);
ReadProcessMemory(hProcess,(LPCVOID)(buff+偏移2),(LPVOID)&buff,4,NULL);
.........
ReadProcessMemory(hProcess,(LPCVOID)(buff+X坐标偏移),(LPVOID)&xpos,4,NULL);
//X坐标的数据已经读到xpos里了,下面是显示
wsprintf(szbuff,(TCHAR*)_T("%d"),(int)xpos); //这儿得转换一下,不然读出来是你不认识的
SetDlgItemText(IDC_XPOS,szbuff);
OK,祝楼主好运....
这种方式适用于数据的内存地址是变化的方式,如果数据的内存地址是不变的,则更简单.去掉找基址的过程,用CE直接找到数据的内存地址,读的时候也不用从基址往下读,直接
ReadProcessMemory(hProcess,(LPCVOID)(X坐标的内存地址),(LPVOID)&xpos,4,NULL);
|