VC++ 如何用ReadProcessMemory读取游戏内存卡无法读取中UTF-8格式的文字

1882人阅读
windows(42)
本次锻炼的本来是对ReadProcessMemory 里边的NtReadVirtualMemory 进行反汇编,为了验证反汇编成功,需要先使用NtReadVirtualMemory 的上层函数ReadProcessMemory去看看功能效果,ReadProcessMemory这个函数的声明是:
BOOL WINAPI ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T *lpNumberOfBytesRead
它的作用是将hProcess句柄所指向的线程里边部分内存数据读到我们自己临时创建的空间中(比如数组内存),而使用的时候调用是这样的:
ReadProcessMemory(appHandle, (LPVOID)address, (LPVOID) &buffer, buffersize, 0);
MSDN上的解释是:
hProcess [in]
A handle to the process with memory that is being read. The handle must have PROCESS_VM_READ access to the process.
lpBaseAddress [in]
A pointer to the base address in the specified process from which to read. Before any data transfer occurs, the system verifies that all data in the base address and memory of the specified size is accessible for read access, and if it is not accessible
the function fails.
lpBuffer [out]
A pointer to a buffer that receives the contents from the address space of the specified process.
nSize [in]
The number of bytes to be read from the specified process.
lpNumberOfBytesRead [out]
A pointer to a variable that receives the number of bytes transferred into the specified buffer. IflpNumberOfBytesRead isNULL, the parameter is ignored.
参数具体解读:
hProcess是待操作的线程的句柄,windows编程中可以设置当前线程的句柄为操作句柄:HANDLE h = GetCurrentProcess();
lpBaseAddress:任意一块内存基地址,使用h操作的时候,必须保证h对该地址有读的权限,这也是我困恼很久的原因所在,一定注意,必须有这个权限才行,否则GetLastError()会返回299,表示部分代码没有完成。
lpbuffer是准备将内存中的数据读取到哪的空间,我使用的是一个字符数组
nSize是准备从lpBaseAddress中读取数据的长度,不能超过lpbuffer,毕竟要用它来装下。
char buffer[256];
DWORD oldProtect = 0;
VirtualProtectEx( hProc, (LPVOID)0x6, PAGE_EXECUTE_READWRITE, &oldProtect );//设置具有读写权限
ReadProcessMemory( hProc, (LPVOID)0x77810F34, buffer, 256, NULL);//读取数据
VirtualProtectEx( hProc, (LPVOID)0x6, oldProtect, NULL ); //还原权限
printf(&读取到的数据是:%s\n&,buffer);
注意这个地址应该是用户可用地址范围,小于0x.
参考文献:
&&& http://blog.csdn.net/misterliwei/article/details/4469106
& /forum/windows/94611/
& http://social./Forums/vstudio/en-US/385d5ffd-e806-40a4-0f6a216/readprocessmemory?forum=vcgeneral
& /questions/1112339/writeprocessmemory-readprocessmemory-fail
&&&& /en-us/library/ms680553.aspX
&&& /en-us/library/windows/desktop/msv=vs.85%29.aspx
&&& http://www.mpgh.net/forum/31-c-c-programming/261563-readprocessmemory.html
&&&& /archive/index.php?t-94006.html
&&& /m4orz3r/item/cfbaef
&&& http://www.unknowncheats.me/forum/c-and-c/99457-use-ntreadvirtualmemory-and-ntwritevirtualmemory.html
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:354401次
积分:5593
积分:5593
排名:第4903名
原创:186篇
转载:128篇
译文:16篇
评论:27条
(1)(1)(1)(2)(4)(1)(1)(2)(7)(4)(3)(6)(2)(2)(2)(2)(8)(10)(13)(3)(3)(5)(10)(1)(17)(32)(31)(27)(48)(22)(31)(12)(17)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&2012年9月 Windows专区大版内专家分月排行榜第一2012年9月 C/C++大版内专家分月排行榜第一2012年8月 Windows专区大版内专家分月排行榜第一
2012年9月 其他开发语言大版内专家分月排行榜第二2012年8月 VC/MFC大版内专家分月排行榜第二2012年8月 其他开发语言大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。VC里的关于ReadProcessMemory 的问题~!大神进来看看! - 『编程语言讨论求助区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 1774|回复: 1
VC里的关于ReadProcessMemory 的问题~!大神进来看看!
阅读权限10
本帖最后由 贝壳里的石头 于
21:30 编辑
byte chessData[11][19];
LPVOID nbuffer=(LPVOID)&chessD
::ReadProcessMemory(processH,pbase,&nbuffer,11*19,&byread);
& && &nbuffer是不是取出从内存pbase地址开始的11*19个字节?
& && & 如果是,那它怎么就自动可以存到数组里面去了,这我很不理解啊 = =
这里附上源码:
HWND gameh=::FindWindow(NULL,&QQ游戏 - 连连看角色版&);
//获取游戏进程ID
::GetWindowThreadProcessId(gameh,&process);
//打开进程,获取进程手柄
HANDLE processH=::OpenProcess(PROCESS_ALL_ACCESS,false,process);
//获取指定内存数据
LPCVOID pbase=(LPCVOID)0x00129FB4;
byte chessData[11][19];
LPVOID nbuffer=(LPVOID)&chessD
::ReadProcessMemory(processH,pbase,&nbuffer,11*19,&byread);
m_qipan=&&;
for(int y=0;y&11;y++){
&&for(int x=0;x&19;x++){
& &itoa(chessData[y][x],&buf,16);
& &m_qipan+=
& &m_qipan+=& &;
&&m_qipan+=&\r\n&;
UpdateData(false);
基址是正确的,但是为什么我取出的值是这样
跟我看到的内存图完全不匹配,而且\r\n 貌似完全没起作用,
&&大神帮忙看看是为什么啊~~~??
(13.34 KB, 下载次数: 0)
21:28 上传
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.}

我要回帖

更多关于 游戏提示内存不可读取 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信