对指定进程的内存进行搜索
1、搜索内存的工具用的最多的 也就是CE(Cheat Engine),这款工具是 delphi 编写的, 用到的API有 OpenProcess,ReadProcessMemory,WriteProcessMemory,VirtualQueryEx 这几个API,
OpenProcess是必须的(不讲R0),MSDN上说,Read/Wirte一个进程虚拟内存时, 要先打开进程, 带有读写虚拟内存权限才行,VirtualQueryEx 函数是用来检查内存属性,因为并不是所有的内存地址都是可读可以写, 所以使用的顺序应该是,OpenProcess ->VirtualQueryEx-> ReadProcessMemory(WriteProcessMemory),
2、还有个问题, VirtualQueryEx 是检查内存属性的, 那么应该从那个地址检查呢??Windows 32位 系统, 内存寻址范围是 2 的32次方, 4G左右, 也就是要寻址4G的地址??? 这个地址非常的大, 看MSDN, 发现 内存地址分成了两部分, 用户空间 和 内核空间(本文里不讲内核空间), 各用了2G的空间, 而且用户空间是不能直接访问内核空间的, 所以确定了搜索范围是 2G 内,即 0x7FFFFFF 个地址, 好,这个范围不会错误了, 问题又来了, 2G的地址, 我怎么知道那个地址是可读, 那个地址是可写???, VirtualQueryEx函数MSDN上说了 VirtualQueryEx 是可以检查出一个内存页面的属性,也就是要读写内存,属性就得是有读写属性(PAGE_READWRITE,PAGE_WRITECOPY,PAGE_EXECUTE_READWRITE,PAGE_EXECUTE_WRITECOPY), CE是从 0x0400000这个地址开始搜索, 为什么从这个地址开始搜索呢?? 这里不多说, 请去了解下PE结构,