首页
社区
课程
招聘
[旧帖] [调查]关于钩子的质疑 0.00雪花
发表于: 2008-10-22 10:50 3293

[旧帖] [调查]关于钩子的质疑 0.00雪花

2008-10-22 10:50
3293
我们知道
kernel32和user32是系统提供api的两个文件
然后他们的代码在物理内存中是只有一份的
每一个程序靠映射把他们映射到了进程内部
可是问题来了
在进程内部
用修改函数头的方法
钩住了GetDlgItemTextA函数
可是
当程序运行后
进程内部的GetDlgItemTextA被成功挂钩
可是当其他程序调用这个函数的时候
却没有被钩
这个何解?
我们修改函数头不是修改了user32.dll吗
可为什么其他函数调用的时候没有变?
应为代码其实是只有一份的呀?
一个修改了就应该都修改了呀
搞不懂
哥哥姐姐门给个解释好吗
谢谢

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不是这个意思,每个应用程序运行后 ,kernel32之类的dll被映射到进程中的内存里,你修改了pe头部,仅仅是修改了映射到当前进程中的虚拟内存中dll中的函数头,真正的kernel32.dll没被修改。
每个进程都有4g的虚拟内存空间 ,而且和其他进程互不相关。修改了当前进程中的数据对其他进程没影响,对真正的 kernel32.dll也是么影响的
2008-10-22 12:02
0
雪    币: 270
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
这就是虚拟内存的原因。自己可以看看虚拟内存管理器的知识。
2008-10-22 14:14
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这样的(以下地址均为假设):
00401000    push  eax
00401001    push  eax
00401002    push  eax
00401003    push  eax
00401000    call     00401173(Call MessageBoxA)

00401173    jmp  7C007283(user32.MessageBoxA)

7C007283    mov   edi,edi
7C007285    push   ebp

我修改的    7C007283
应该是修改了user32.dll吧?
2008-10-22 14:48
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
顺便问下知道一个线程的线程名
如何得到它的PID?
2008-10-22 14:51
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE][引用:
最初由 烁皓发布  
这就是虚拟内存的原因。自己可以看看虚拟内存管理器的知识。...
这样的(以下地址均为假设):
00401000    push  eax
00401001    push  eax
00401002    push  eax
00401003    push  eax
00401000    call     00401173(Call MessageBoxA)

00401173    jmp  7C007283(user32.MessageBoxA)

7C007283    mov   edi,edi
7C007285    push   ebp

我修改的    7C007283
应该是修改了user32.dll吧?
/QUOTE]
没明白什么意思
根据线程的句柄获取进程id可以调用GetProcessIdOfThread()
原形如下 :DWORD GetProcessIdOfThread(HANDLE Thread);
查msdn吧
2008-10-22 15:09
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这些DLL的页面都有COPY_ON_WRITE属性,当向其中写入的时候,Windows会复制一份,在复制的那一份里面满足你的写要求.公共的部分不受影响.
2008-10-23 13:05
0
游客
登录 | 注册 方可回帖
返回
//