20170723Windows12_2_内存修改器

来源:互联网 发布:mysql linux 编辑:程序博客网 时间:2024/05/17 03:48

内存修改器:

内存修改器作业布置:

1:内存修改器用于修改进程所在内存里面的数据,例如修改游戏内存里面的数据,达到无限金币,植物大战僵尸无线阳光等。
2:以植物大战僵尸为例:阳光值的数据存储在内存里面,需要用到阳光值的时候,进程肯定会去这里面取,我们可以查找这个值的所在地,然后修改。这需要修改其他进程的内存里面的东西,有一下几个问题和步骤:
1:我们写的进程要去修改其他进程的内存,是不可能的,每个进程都是黑盒子,需要特殊的方法来操作(百度很多种方法,注入,远程读取……)。
2:需要尽可能快速地扫描4GB的内存,当然,我们可以根据4GB如何分配的去扫描应该扫描的区域,不应该全部扫描。我们一次是扫描不出来结果的,我们需要不停地判断,筛选出具体的要修改的地址。
3:在该扫描的区域,可能会扫描出很多个符合条件的数据,比如1000个,不可能每一个数据都是阳光值的数据,首先我们应该等阳光值变化后,看这1000个数据哪一个是符合这个变化的,如果还有50个符合,在继续找,直到找到特定的一个为止。找的过程必须比较快。

4:找到内存位置后,还需要了解读写权限,要能够写入,读取才行。在商业中,内存扫描后,修改等是不值钱的,最重要的是快速的扫描,这是非常重要的。

作业讲解:

1:两个进程的内存是非共享的,要访问其他进程的内存,有一下几种方式:

    1:把自己变成和目标进程一样的进程,需要用dll,目前未学到。

    2:ReadProcessMemory(),可以读取系统里面任何一个进程的内存,不管这个进程处于什么状态。

        1:需要传递目标进程的HANDLE,可以使用ToolHelp遍历,获取,可以拿到目标进程的HANDLE,其次,CreateProcess也可以得到进程的HANDLE,OpenProcess也可以。

        2:第二个参数位首地址:这个地址很重要,不应该从0开始,肯定不再空指针异常区,应该从0x10000开始,在Win98里面有可能变得不同。应该判断,从哪里开始。

        3:结束地址,需要传递结束地址,结束地址不可能在内核区里面,也在一定范围里面。

        4:buff,这个buff 的大小不可以随便定,大小不好会导致速度非常慢,大小合适,速度才会更快。一般情况下,这个最好为一个一个页面的大小(一般为4KB)。这样页面交互次数会更小,一次读取多个页面大小并不能减小页面交互次数。

        注意:这样的扫描,比对会非常慢,一个进程的内存不肯呢个都用了2GB,我们只需要扫描里面有效的部分,这会使我们扫描的速度变得更快。杀毒软件的核心就在于判断有效区域,否则,会相当慢。




原创粉丝点击