首页
社区
课程
招聘
[求助]如何hook目标进程某个api?如 MessageBoxA
发表于: 2009-3-10 12:33 3446

[求助]如何hook目标进程某个api?如 MessageBoxA

2009-3-10 12:33
3446
首先,这是个exe,loader性质的,我没有源码。

我在这个exe里用OD写了十几行代码获取了api MessageBoxA 的地址,然后将这个api的段首跳到loader领空内的空白00处,补上被跳转替换掉的代码,然后在跳回api的第6个字节继续执行,这样对这个loader来讲,修改是成功的,loader功能正常!

但是:
loader的目标程序启动后,我发现他的api MessageBoxA的段首依然是原来的字节,并没有被修改成跳转。我觉得这个大概是全局hook和局部hook的区别?

问题:
我怎么将目标进程里的api MessageBoxA改成跳转到loader领空内的空白00处

这是个exe,loader性质的,我没有源码。

不知道我说明白了没有

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
目标进程是不能“跳转”到loader进程中的。

每个进程有自己地址空间,而系统dll是以写时复制方式映射到进程的地址空间的。

写时复制也就意味着,你所做的修改是在进程自身的一份“私有拷贝”上进行的,对其它进程无影响。

程序要修改其它进程的地址空间,只能通过ReadProcessMemory和WriteProcessMemory这类API来进行。
2009-3-10 18:57
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢版主!!

我怎么通过ReadProcessMemory和WriteProcessMemory来写目标进程地址空间内的api?
这问题等于是要写目标进程的dll了。

如果上面的问题解决了,那个api段首改成跳转也只能跳转到目标进程的领空或者user32.dll的领空,所以我怎么找00的空地呢?目标进程的00空地不好找,因为不同进程空地地址不一样;如果找user32.dll的00空地,他的空地VA是否一致?有无跨平台的问题?还是说自己申请一段空间出来才比较保险?
2009-3-10 19:41
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
4
如果熟悉shellcode和远程操作,可以VirtualAllocEx一段内存,用它来实现。

如果不熟悉这种方法,那就写一个dll,让进程加载dll,而主要的工作在dll里来干就行了。
2009-3-10 20:35
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
目标文件一般有自校验,我不太敢修改目标文件以注入dll。。。
继续钻研。。
谢谢版主
2009-3-10 20:51
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我是菜鸟,什么是hook?
2009-3-11 22:16
0
游客
登录 | 注册 方可回帖
返回
//