看流星社区

 找回密码
 注册账号
查看: 3967|回复: 5

memcpy和WriteProcessMemory的疑惑

[复制链接]

该用户从未签到

发表于 2011-3-24 11:13:45 | 显示全部楼层 |阅读模式
完美无限视野有个疑惑。
要修改无限视野:

   1. DWORD pid;
   2.         ::GetWindowThreadProcessId(hwnd,&pid);
   3.         HANDLE h_process = ::OpenProcess(PROCESS_ALL_ACCESS,false,pid);
   4.         int *value = (int *)SEE_ADDRESS;//无限视野地址
   5.         int change = 1317602164;
   6.         ::WriteProcessMemory(h_process,value,&change,sizeof(int),NULL);

这样可以达到目的。

用指针和memcpy却不行,一运行就报错退出
代码如下:
   1.         int *value = (int *)SEE_ADDRESS;//无限视野地址
   2.         int change = 1317602164;
   3.         memcpy(value,&change,sizeof(int));
   4.       或者 *(int *)SEE_ADDRESS = 1317602164;

用指针或memcpy均报错,这两种方法和上面的效果应该一样,不知道怎么不能运行,不知道怎么回事?

该用户从未签到

发表于 2011-3-24 11:14:16 | 显示全部楼层
int change = 1317602164;
memcpy((DWORD*)SEE_ADDRESS,&change,4);
是不是字节数错了。

该用户从未签到

发表于 2011-3-24 11:14:36 | 显示全部楼层
void *memcpy(
  void *dest,
  const void *src,
  size_t count  
);

dest
New buffer.

src
Buffer to copy from.

count
Number of characters to copy.

如果我发的这些你还看不懂的话,我也没办法了,好好再看看指针

该用户从未签到

发表于 2011-3-24 11:14:52 | 显示全部楼层
不是你当前运行的程序,而是游戏程序,哪能随便让你copy, windows是不允许的。
这是关键。
至于是不是你memcpy用错,没看。

该用户从未签到

发表于 2011-3-24 11:15:08 | 显示全部楼层
弄清楚你那是你程序的地址空间还是游戏的地址空间,OpenProcess(PROCESS_ALL_ACCESS,false,pid);  写的对应进程的
memcpy(value,&change,sizeof(int)); 如果没有注入到对应进程,是对当前进程的操作, 可能会违规访问。
注意memcpy(value,&change,sizeof(int)); 的用法和参数。

该用户从未签到

发表于 2011-3-24 11:15:23 | 显示全部楼层
读写内存前,要先检查该内存空间可以讲写不?而且还应该加入异常处理.
另外就是注意你的读写地址和数据是否准确.

现在的人写辅助,怎么都喜欢不加判断,直接就开始读写内存了?
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-16 20:44

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表