首页
社区
课程
招聘
内存补丁
2006-5-27 07:36 6061

内存补丁

2006-5-27 07:36
6061
我昨天做了个内存补丁,老出问题,详细如下:
我在游戏的一个位置插入跳转,把游戏的原指令放到一个空内存中执行,执行完游戏指令后,我把寄存器入栈保护,然后执行我插入的指令,然后将入栈的寄存器出栈,再将程序跳回原处。
地址          指令
6C342FE0     JMP 6C379D00   (替换原指令,让程序跳转到空内存中执行)
6C342FE5     NOP
6C342FE6     NOP
6C342FE7     NOP
'==========================================
6C379D00     MOV EAX,[ESI+ECX*4-0C]
6C379D04     MOV [EDI+ECX*4-0C],EAX (这两条是程序的原来指令)
6C379D05     PUSH EBP(将寄存器入栈保护)
6C379D06     PUSH ESI
6C379D07     PUSH EDI
6C379D08     PUSH EAX
6C379D09     PUSH EBX
6C379D0A     PUSH ECX
6C379D0B     PUSH EDX
6C379D0C     MOV [6C379DF0],EAX (这是我插入自己的指令)
6C379D11     POP EDX(寄存器出栈)
6C379D12     POP ECX
6C379D13     POP EBX
6C379D14     POP EAX
6C379D15     POP EDI
6C379D16     POP ESI
6C379D17     POP EBP
6C379D18     JMP 6C342FE8 (跳回去)
我想让大家帮我看下,到底问题出在哪?如果没有MOV [6C379DF0],EAX这条指令,程序一切正常,加了这条指令后就出错,可以帮我检查一下吗,最好能告诉我为什么,谢谢了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞7
打赏
分享
最新回复 (10)
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2006-5-27 08:09
2
0
检查一下6C379DF0的区段是否可读可写。
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljkbbc 2006-5-27 09:46
3
0
问个白痴级的问题,怎么看内存是否可以读写?
我用WriteProcessMemory写入与程序自己写入有什么区别?
雪    币: 207
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
njzzzzzz 2006-5-27 09:58
4
0
还有你修改的是不是DLL文件,要注意重定位
如果你用OD跟,你确定6C379D0C     MOV [6C379DF0],EAX (这是我插入自己的指令)这条指令没有错,但程序运行到这会出错,就说明那段内存是不可读写的
雪    币: 288
活跃值: (415)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
Pr0Zel 7 2006-5-27 10:06
5
0
除了要注意该内存是否可读与可写外,
还有注意一下你打开进程时(OpenProcess)
用的参数是否是PROCESS_ALL_ACCESS,
不然的话也会出错的

另:一系列保存寄存器可以用pushad与popad来代替
这样少写几行指令了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
UniPho 2006-5-27 10:08
6
0
用PE工具看,如果不可读写,就更改区段标志
入栈,出栈用
pushad
popad
好像比较方便
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljkbbc 2006-5-27 10:47
7
0
我把MOV [6C379DF0],EAX这条指令去掉后,其它指令依然不变的话(地址和跳转指令的机器码相应改变),工作是正常的呀,为什么只是加了这条指令后就出错.哎,晕了....OpenProcess的权限就是PROCESS_ALL_ACCESS,我检查了三遍,而且如果不是,就不会有这样的事情了,那会是从一开始就错误.MOV [6C379DF0],EAX的指令也没有错误.用OD反编回来的是DB (机器码16进制数),我查了相关资料,说这是OD脱壳的后遗症,于是我用CE查看,代码没错。头大..。
我修改的就是DLL的文件,DLL文件重定位是什么意思,怎么操作的。而且这需要重定位吗??
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljkbbc 2006-5-27 13:47
8
0
问题已经得到解决,非常感谢大家,兴奋之余,激情付诗一首,如下:

沁园春.血
                ---作者:萨达姆
    美 国 风 光, 千 里 兵 疯, 万 里 血 漂。
望 纽 约 内 外,废 墟 莽 莽;白 宫 上 下,顿 时 逃 逃。
你 舞 战 斧,我 施 冷 枪,真 主 上 帝 试 比 高。
须 晴 日,看 曼 哈 顿 岛,分 外 萧 条。
石 油 如 此 稀 少,引 无 数 枭 雄 竞 折 腰。
惜 阿 尔 道 夫,功 亏 一 篑;东 条 英 机, 两 弹 魂 消。
一 代 天 骄,拉 登 老 弟,只 识 驾 机 撞 世 贸。
俱 往 矣,数 风 流 人 物,还 看 锦 涛 。
雪    币: 235
活跃值: (41)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
alpsdew 4 2006-5-28 22:24
9
0
楼主能说下到底怎么解决了么?
是重定位的问题么?
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ahaisoft 2006-5-29 11:47
10
0
是啊,楼主说说怎么解决的吧.
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ljkbbc 2006-5-29 11:49
11
0
我是发现我MOV的地址不可写,所以重新找了一段内存MOV进去就可以了
游客
登录 | 注册 方可回帖
返回