|
http://bbs.csdn.net/topics/240047505
求实例:
打开计算器,输入1234,运行这个程序,计算器刚输入的1234变为5678。(要求直接写内存,不要模拟键盘输入。) (求这个程序) 查了好多资料,都是说可以用OpenProcess,ReadProcessMemory、WriteProcessMemory,但是我自己试了读不到,所以只好厚颜求助高手顺手做一个完整的例程以供学习。 我用ce跟了一下,计算器当前显示的字符的临时缓冲在0x01014dd4这个位置,如果高手懒得去找地址在哪里,就直接用这个地址做:0x01014dd4。 unicode格式: 01014dd4 31 00 32 00 33 00 34 00 00 00 1 2 3 4 谢谢了。 100分,只求实例,不用再告诉我其他方面的道理,谢谢! 第一个能编译运行的回答给全分。 |
7
4
|
#1 得分:1回复于: 2008-07-01 14:24:38
好好睡觉,好好玩。该玩什么玩什么。
|
|
|
7
4
|
#2 得分:0回复于: 2008-07-01 14:25:32
你这个修改,比改股票的价格还难。
|
|
|
|
#3 得分:1回复于: 2008-07-02 02:23:52
写游戏外挂的吧,关注一下
|
|
#4 得分:20回复于: 2008-07-02 12:26:34
计算器当前显示的字符的临时缓冲在0x01014dd4这个位置
0x01014dd4 在不同的pc不同的环境下此地址可能不一样 01014dd4 31 00 32 00 33 00 34 00 00 00 他应该是字串格式,可能是getWindowText..的临时缓存,真实的变量(储存原始输入数据)地址并不一定在这里,即使改掉这里也只是显示界面上面的被改掉,而真实的数据还是原来的 源码网上很多 基本过程大概都是这样,找到目标进程-->提升权限-->打开目标进程-->读写目标进程内存-->关闭打开进程的操作句柄-->权限复原
更详细的解释你可以去http://hi.baidu.com/pop4u/blog/item/35c83af3a24ca554342accfc.html看 |
||
|
#5 得分:0回复于: 2008-07-02 13:48:12
谢谢楼上的回答,你说明了怎么注入一个进程,之后没有谈到改动部分,麻烦继续后部分好吗?
如题,我是求实例。 另外,很多人都认为0x01014dd4这个地址是变化的,我想说明一下:我用这个版本的xp,安装了不同配置的机器,都是0x01014dd4,我认为这个地址应该跟 计算器 的版本有关系。 谢谢了。 |
|
#6 得分:0回复于: 2008-07-02 13:54:11
“01014dd4 31 00 32 00 33 00 34 00 00 00 他应该是字串格式,可能是getWindowText..的临时缓存,真实的变量(储存原始输入数据)地址并不一定在这里,即使改掉这里也只是显示界面上面的被改掉,而真实的数据还是原来的 ”
的确是这样的,这个字符串是显示的用的,但是,每次点 +-*/ 时,计算器确实从这里取数去运算的,所以也会起到改变结果的作用。 你也知道,我只是想通过一个最常见的方式来学习怎么改内容。 谢谢你的细心。 |
|
#7 得分:0回复于: 2008-07-04 13:59:20
期待高手。
知道自己的要求有点过了,还是希望有高手帮助。 再加200分,另外开贴给分。 短信给我答案都可以。 谢谢了。 |
|
#8 得分:30回复于: 2008-07-06 08:48:56
我是一个比较在乎分的人,你这样说却实诱惑住了我。 看看这个是不是你所需要的: http://www.mwymwy.cn/jsq.rar |
|
#9 得分:1回复于: 2008-07-06 10:29:23
第一次看到黑蝴蝶出手,吼吼,还真能修改,看来黑蝴蝶是个多面手啊,调试也是专业人士……
|
|
#10 得分:5回复于: 2008-07-06 11:09:05
直接写到输入栏里了,
|
|
#11 得分:0回复于: 2008-07-06 14:17:22
写的不完美,不能直接参与计算.稍后放一个完美的.
|
|
#12 得分:0回复于: 2008-07-06 14:20:00
引用老头子的一句名言:naive..
|
|
#13 得分:0回复于: 2008-07-06 15:16:28
马甲暴露了……
|
|
#14 得分:0回复于: 2008-07-06 16:23:27
http://www.mgnet.cn/CalcEdit.rar
看看完美版的.说明下这个不是模拟按键实现的,也不是修改内存实现的.要代码再说. |
|
#15 得分:0回复于: 2008-07-06 16:37:31
另外可以直接实现显示是12345但实际值是67890或其它任何值
|
|
#16 得分:1回复于: 2008-07-06 18:59:18
要是直接修改计算器的话,倒是简单
|
|
#17 得分:1回复于: 2008-07-06 20:29:23
路过~俺对分数不咋敏感的
|
|
#18 得分:1回复于: 2008-07-06 21:38:17
期待哪位高手能说说实现原理.
另:经实测两个高手的实例都仅对xp下的计算器有效,但对于其它系统的计算器无效(且出现未知错误) |
|
#19 得分:0回复于: 2008-07-06 21:42:45
可以做成任何系统下都有效的,这个不是问题.默认支持系统就是XP SP3
|
|
#20 得分:0回复于: 2008-07-07 04:27:56
感谢大家的关注,2个 exe 我都运行过了,确实是我需要的。
愤怒的黑蝴蝶 和 惊动党中央 是不是同一个人啊?有点纳闷.... 如果不是同一人,按照承诺,我只能把分全部给蝴蝶的,惊动党中央 就白忙。 分由蝴蝶来分配吧,此贴100作为顶贴分,分数是给另外的三贴300的分,应该没问题吧? 给答案的方式随便你安排吧,短信都行。 谢谢了。 |
|
#21 得分:0回复于: 2008-07-07 04:34:56
发表于:2008-07-06 16:23:2714楼 得分:0
http://www.mgnet.cn/CalcEdit.rar 看看完美版的.说明下这个不是模拟按键实现的,也不是修改内存实现的.要代码再说. 555555555.....刚看到这句话——“也不是修改内存实现的...”,有点不是很符合要求哦。 |
|
#22 得分:0回复于: 2008-07-07 04:37:20
蝴蝶你的是通过修改内存的吧?
如果确定是,我先给你分吧。 |
|
#23 得分:0回复于: 2008-07-07 09:23:49
我和“惊动党中央”不是同一个人,我不认识他,他的实现原理可能与我不同。
你说按道理应该把分给我,不过他的EXE效果比我的好(他的能参与计算),所以,这个贴子我最多只能30%分,70%的分给他,不能让他白忙。 希望他能贴出代码,我也学习一下! 首先肯定的一点是,他绝对不是用keybd_event来实现的,但有可能是用SendMessage发送按键消息,比如WM_KEYDOWN或WM_CHAR消息,如果是这样的话,那么他的代码还没有我的精短。这种代码,我觉得我应该拿到70%的分。 |
|
#24 得分:1回复于: 2008-07-07 09:48:06
路过帮顶
|
|
#25 得分:0回复于: 2008-07-07 10:43:00
我从来不喜欢用SendMessge来实现这类东西,我使用的是远程执行方式CreateRemoteThread来实现,用SendMessge应该也能实现只是这样有局限性,所以我原则用了远程执行方式来完成.另外分数我不是那么看的重,给不给楼主说了算.
代码贴出:
|
||
|
#26 得分:0回复于: 2008-07-07 10:45:38
上面有些参数是精心构造的,如果不同版本的计算器有些值需要修改,其实可以做成自动适应所有版本计算器方法是定位计算器特征码实现,具体实现方式有一大堆这里就不说了.
|
|
#27 得分:0回复于: 2008-07-07 10:54:27
另外不明白你为什么要直接修改内存实现想达到什么目的,因为不清楚你的目的所以无法根据你的要求实现,但结果就是你要的.
|
|
#28 得分:0回复于: 2008-07-07 14:55:33
mark
|
|
#29 得分:0回复于: 2008-07-07 15:09:13
上面这些意思含义如下:
|
||||
|
#30 得分:0回复于: 2008-07-07 16:59:18
“另外不明白你为什么要直接修改内存实现想达到什么目的,因为不清楚你的目的所以无法根据你的要求实现,但结果就是你要的.”
晕死,我没事改计算器的数字干啥,我是打算学习修改内存啊,你看标题,还有题目要求啊。 谢谢大家了。 我的目的好像表达够清楚啊..... |
|
#31 得分:0回复于: 2008-07-07 17:02:23
我昨晚已经确定了 蝴蝶 也不是修改内存的,因为我用CE去跟踪,发现内存没变(当时有发话上来,可是系统说我发言太频繁,不给贴。)。——不符合要求。
如果你们2个都不是通过修改内存的,我想我不能把分全给你们的。 |
|
#32 得分:0回复于: 2008-07-07 17:09:19
刚看了 惊动党中央 的代码,觉得是修改内存啊,注入、远程执行、修改,为什么说不是呢?
应该是你的最正确啊,我不明白你说的不是修改内存这个说法,指点指点。 |
|
#33 得分:0回复于: 2008-07-07 17:18:14
你所说的直接修改是直接修改显示的结果,我这个远程注入执行并没有直接去修改那个结果,而是间接去让计算器自己修改了.
|
|
#34 得分:0回复于: 2008-07-07 17:19:03
他那个应该是修改EDIT上层的显示界面.
|
|
#35 得分:0回复于: 2008-07-07 17:21:53
如果你需要纯粹直接修改那么更简单.
1.EnabledDebugPrivilege 2.OpenProcess 3.WriteProcessMemory 就完了 需要说明的是那个直接内存地址的数据类型应该是WideChar,一个字符占两个byte |
|
#36 得分:0回复于: 2008-07-07 17:33:07
谢谢 惊动党中央,我就是需要你说的那种直接修改的,麻烦给个新代码。
另外如果你方便的话,先去我那3个贴留留名,我好放分,谢谢了。 |
|
#37 得分:0回复于: 2008-07-07 17:35:15
太佩服 惊动党中央 了,call $100264B这个都找得出来?
是不是 跟踪哪个修改了,然后找到call函数地址? |
|
#38 得分:0回复于: 2008-07-07 17:55:23
如果你直接修改那个地址显示上是不会变的,但实际值的确是变成你修改的值,参与运算的话就是用你修改的值
|
|
#39 得分:0回复于: 2008-07-07 18:35:17
|
||
|
#40 得分:0回复于: 2008-07-07 18:46:34
上面那个代码有点问题,应该用这个
|
||
|
#41 得分:0回复于: 2008-07-08 01:05:13
谢谢 惊动党中央,你的答案就是我要的,我也已经放分了。
辛苦了,谢谢! 还有个事情很不好意思请你指教:我从c过来,觉得c操作 *char几乎是无所不能,到delphi几年了,都没碰过hex的操作,能不能继续麻烦你帮写一个ReadProcessMemory,把刚写进去的内容读到buffer里面,再逐个hex显示在一个memo里面。 例如: ff ff ff ff 01 00 00 00 00 00 00 00 01 00 00 00 xx xx xx ... 我能理解c里面的alloc,而在delphi里面觉得有点恐慌,而且stream的操作好像限制很多,方法也很多,希望能顺便学习学习。 这个贴的分数也就剩下这个问题了。 谢谢了! |
|
#42 得分:0回复于: 2008-07-08 01:08:06
读指定地址之后 一个段的长度,或者256个字节,刚忘了说长度。
|
|
#43 得分:0回复于: 2008-07-08 08:40:22
你要的实际是把内存数据显示HEX和ASCLL出来吧
|
||
|
#44 得分:0回复于: 2008-07-08 08:46:20
谢谢你,我想要的是从ReadProcessMemory得到的buffer内容,怎么转到你这个函数的buffer的过程。
因为ReadProcessMemory读出来之前,必须先分配内存这些动作,我想学这个。 麻烦你了! |
|
#45 得分:36回复于: 2008-07-08 08:51:01
Var
mem:pointer; 如果是其它进程数据就用ReadProcessMemory把内存数据读到MEM里面 然后: Memo.lines:= MemoryToHex('Mem:', mem^ ,Size); 如果是本进程数据那么直接 显示就行. |
|
#46 得分:0回复于: 2008-07-08 08:51:41
用GetMem分配一片足够的空间,MEM指向他.
|
|
#47 得分:0回复于: 2008-07-08 09:32:45
我试了ReadProcessMemory,读出了数据,是cal.exe的内容,但是位置不是我指定的。
所以想请教一下ReadProcessMemory的例程啊, 拜托你了,谢谢。 |
|
#48 得分:0回复于: 2008-07-08 09:34:33
?
|
|
#49 得分:0回复于: 2008-07-08 09:38:06
读和写一样啊
|
||
|
#50 得分:0回复于: 2008-07-08 09:42:31
你试了没?进出的内容不一样,我的是这样。
|
本帖子已过去太久远了,不再提供回复功能。
delphi lazarus opengl
网页操作自动化, 图像分析破解,游戏开发

