首页
社区
课程
招聘
[求助]如何在运行的进程中加载新的函数以替换旧函数
发表于: 2008-4-9 21:19 5404

[求助]如何在运行的进程中加载新的函数以替换旧函数

2008-4-9 21:19
5404
请教各位大虾:

比如我有一个进程在反复调用函数
int fun()
{
int a,b;
a=1;
b=2;
return a+b;
}
怎样在程序运行期间把fun改写成,而不中断程序
int fun()
{
int a,b;
a=1;
b=2;
return a*b;
}
如果想用通过VirtualAllocEx、WriteProcessMemory等函数修改进程的空间是否可行?或者还有其它的途径?最好给一段具体代码。谢谢。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看反汇编代码

把ADD的opcode改为 MUL的opcode
2008-4-10 09:00
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可以的 VirtualAllocEx修改代码段的保护属性 再用WriteProcessMemory搜索到Opcode地址修改即可。
不过要考虑保证修改该函数必须是独占的。否则会引起歧义。
2008-4-10 10:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢啊。我举例没说太清楚,我的本意是说远程加载一个全新的函数(除了函数名不变,函数体全部修改),以替换旧函数,不仅是改变一个符号。

场景和需求:
自己编写一个MFC的A进程,里面包含了一个定时一秒反复调用的函数fun:
int fun()
{
int a,b;
a=1;
b=2;
return a+b;
}
在A程序运行期间,外部编写全新的fun(示例如下,函数名不变,函数体全部替换)通过外部进程B注入到A的进程空间,使A在收到B注入的新函数后的下一个秒周期,调用新的函数,而不中断进程。
int fun()
{
int cc,dd;
cc=9;
dd=3;
return cc/dd;
}

是不是可以申请一段内存,加载新函数,然后改变指令跳转地址调用新的函数?
2008-4-10 12:38
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
5
完全正确
VirtualAllocEx分配一片内存
WriteProcessMemory修改函数代码即可

你去看看apihook的实现代码吧
2008-4-10 13:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
可以的,在内存中找到函数的地址,改成你现在函数的地址就可以了.这种方法在外挂中介绍的比较多
2008-4-10 13:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
收到   
2008-4-10 21:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
能给点更详细的信息么,最好vc下的
2008-4-12 11:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大哥阿,找不到apihook 2.0 的源代码。看过一个hookapi.cpp,在xp下运行不了。。。
2008-4-13 20:59
0
游客
登录 | 注册 方可回帖
返回
//