如何访问修改其他进程的内存内容,求实例 ( 积分: 300 )

  • 主题发起人 主题发起人 jenhon
  • 开始时间 开始时间
J

jenhon

Unregistered / Unconfirmed
GUEST, unregistred user!
求实例:<br>打开写字板,输入ABCD,[red]运行这个程序[/red],写字板刚输入的ABCD变为1234。(要求直接写内存,不要模拟键盘输入。)(ABCD的位置未必在文件启始的位置,要搜索)<br><br>查了好多资料,都是说可以用ReadProcessMemory、WriteProcessMemory,但是我自己试了读不到,所以只好厚颜求助高手顺手做一个完整的例程。<br><br>(要求写得很简单,但我知道动作很复杂,请帮忙写一个。)<br><br>谢谢了。
 
写字板是Unicode字符串.搜索的时候要用Unicode搜索.
 
楼上说的关键我倒是忘了,我不是想分别出unicode和ansi码的区别,只是想学习修改内存的关键。<br><br>既然这样,我认为用写字板也是不方便,那么使用&nbsp;计算器&nbsp;来调试吧。<br><br>打开计算器,输入&nbsp;1234,&nbsp;运行程序,&nbsp;把计算器&nbsp;显示的&nbsp;1234&nbsp;改称&nbsp;5678。<br><br>楼下的帮忙写一个。<br><br>谢谢!!!
 
要定位到相对的开始位置才是难事.
 
同意楼上,但是我要求没那么高吧(自己认为),因为可以先搜出固定的相对位置,再在程序里面体现。对于&nbsp;计算器&nbsp;这样简单的程序,相对位置不会每次都变吧?<br><br>谢谢。
 
你既然不懂,但又要坚持认为,那就没办法了。<br><br>难道你的做的程序就是记事本或者计算器吗?如果不是,你怎么保证位置都是固定的?
 
而且可以明确告诉你,记事本的地址是每次都变的,因为它使用内存映象文件打开文件而读取的,如果你认为没那么高要求,就慢慢钻下牛角了。
 
问题不是这样的,回答的也带着火药味,就有些不大对了
 
大多数变量在内存中的位置肯定会变的.<br>除非是EXE文件中的全局变量.才会在数据段.位置基本固定.<br>绝大多数局部变量是在栈中,运行时刻不同栈中数据量不同.<br>动态分配的数据是在堆中.更是每次分配都没法保证它一样.<br><br>通常要搜索的话先要.<br>1.OpenProcess打开进程<br>2:调用VirtualQueryEx查询0-2Gb空间内进程分配的内存块.<br>3.ReadProcessMemory读取对方内存到本进程.<br>4.搜索你要的内容
 
谢谢大家了。<br><br>我知道白河你的意思,也谢谢你的指正。这个问题我想可以通过用ce找出基址,再去通过基址去求得具体内存位置。<br><br>我只是想知道在XP下,要打开一个进程的内存,然后搜索,修改的步骤是怎样做到的。<br><br>谢谢楼上的解答,能不能帮忙写些例程?因为不知道函数的原型,好多都报错说参数和原参不相符。<br><br>谢谢大家了。
 
建议楼主多打打基本功.原理都告诉你了,函数也告诉你了调现成API都有困难.你基本功太差了.<br>另外楼主似乎是想写外挂吧.如果是写外挂很多地址不是搜出来的.这样效率太低.一般游戏都有全局对象,位置固定的.然后依据这个访问各种数据.游戏更新的话你也要更新.<br>否则次次都搜索的话效率太低了
 
最近多加班,脾气也不好。但该告诉你的也告诉你了,如果不能自己做到的话,就算给了你代码也是没有用的。
 
白河说的对.....
 
@!$@$%#$%#<br><br>我开始也以为白河说的有道理,但是真正去跟踪一下计算器,发现不是那么回事的,计算器就1个地方存放&nbsp;我们按入的字符串:0x14DD4&nbsp;,而且是固定的,不同机器,前面加载的程序数量不同,偏移都没变化,而且这个地址都是没有其他地方指向的。<br><br>靠,没自己动手试还说大话。<br>简单问题复杂化。<br><br>原谅我说气话,我很尊重你,白河。知道你技术厉害,但是从头到尾就是看你说气话,轮我说说,总可以吧。
 
wr960204不要避重就轻,好象漏了&nbsp;VirtualProtectEx,一个页如果没有写权,怎么修改权限呢?
 
是吗?至少我的机器就不在&nbsp;0x14dd4.再说,你为什么不分析记事本看看地址变不变?<br><br>再再说,你能保证你操作的程序位置是不变的,如果是,估计你也没必要在这里问了?<br><br>还是听听&nbsp;&nbsp;wr960204&nbsp;的话吧。<br><br>页面权限可以是由段区来决定了,所以也不一定非要&nbsp;VirtualProtectEx&nbsp;不可。
 
后退
顶部