首页
社区
课程
招聘
求助! 内存补丁
发表于: 2009-4-25 16:49 3750

求助! 内存补丁

2009-4-25 16:49
3750
请问,用OD加载一个程序后,如果进行内存补丁编写,实现如下功能:
读取主程序DATA段地址A开始的N个字节,写入内存中偏移地址为B的空间中
请各位知晓的帮忙,用哪几条汇编指令完成这个功能.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
你是用OD来操作进程的内存,还是要自己写Loader来实现?

OD的话,直接在数据窗口定位到地址A,选中要复制的字节,右键,二进制复制;然后来到地址B,右键,二进制粘贴,即可。

如果是自己写程序,无非是ReadProcessMemory和WriteProcessMemory两个API,外加OpenProcess或CreateProcess来获取进程对象的句柄。

推荐用CREATE_SUSPENDED标志来CreateProcess,然后执行内存的操作,最后ResumeThread即可。这样程序出错的概率小一点,前提是你知道自己在做什么。
2009-4-25 18:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我只是想直接在原程序内打补丁,把一段解密后的数据代码动态地拷贝到程序的某个虚拟内存中. 这段数据代码我已经带狗跟踪到,而且加到程序的DATA段.
我想实现的功能就是在原程序无狗执行到解密结束后,把正确的解密数据复制到程序正确解密后应该放的内存段.
我用OD调试程序,手动替换解密后数据,程序已经可以正确执行. 不过想把程序patch下,让他可以自己完成数据替换工作,这样可以独立运行了.
讲得有点不清楚,抱歉.
2009-4-25 18:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这样说好了, 就是如何把程序数据段的一部分数据(比如字符串,但内容很多)读到指定的内存中去.
用什么指令实现?
2009-4-25 18:46
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
这样啊,最简单的实现方式就是 将 A 这个地址 放ESI寄存器,将 B 这个地址放EDI寄存器,将要拷贝的字节数放ECX寄存器,然后用REP MOVSB实现拷贝。再加上寄存器保存,代码看上去是这样的:

push esi
push edi
push ecx
mov  esi,  A
mov  edi,  B
mov  ecx, 0xXXXX
rep  movsb
pop  ecx
pop  edi
pop  esi

把这段代码补在原来程序中.text节末尾的有大量的0的位置,在你找到的解密完成后的那个代码位置,用JMP指令跳出来执行,执行后再跳回去。因为JMP指令可能会破坏原来的若干条指令,所以你在补丁代码还要补上与原来功能等效的代码(这是打代码补丁的常规方法)。
2009-4-25 18:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=书呆彭;611659]这样啊,最简单的实现方式就是 将 A 这个地址 放ESI寄存器,将 B 这个地址放EDI寄存器,将要拷贝的字节数放ECX寄存器,然后用REP MOVSB实现拷贝。再加上寄存器保存,代码看上去是这样的:

push esi
push edi
push ecx
mov  esi,  A
mov  edi,  B
mov  ecx, 0xXXXX
rep  movsb
pop  ecx
pop  edi
pop  esi

把这段代码补在原来程序中.text节末尾的有大量的0的位置,在你找到的解密完成后的那个代码位置,用JMP指令跳出来执行,执行后再跳回去。因为JMP指令可能会破坏原来的若干条指令,所以你在补丁代码还要补上与原来功能等效的代码(这是打代码补丁的常规方法)。[/QUOTE]

就是要这个东西,我的汇编太菜,搞不定.
多谢书呆彭!
2009-4-25 18:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我用PUSHAD保存所有寄存器值,做完我的工作后,再用POPAD恢复原有寄存器值,是不是也可以?
2009-4-25 19:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
程序终于可以工作了,谢谢.
2009-4-25 19:55
0
雪    币: 112
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主,请教下这个汇编代码怎么嵌入程序呢??
2009-7-5 21:04
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个直接——aS
m嵌入就可以啊
2009-7-20 16:46
0
游客
登录 | 注册 方可回帖
返回
//