首页
社区
课程
招聘
[原创]物理HOOK
发表于: 2012-7-8 16:04 35285

[原创]物理HOOK

2012-7-8 16:04
35285
收藏
免费 0
支持
分享
最新回复 (69)
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
51
看看怎么个Hook法,mark一下
2012-8-5 12:30
0
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
正解
2012-8-12 13:31
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
53
注意操作系统的写时复制机制
2012-8-12 14:14
0
雪    币: 38
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
mark……学习ing
2012-11-17 07:31
0
雪    币: 102
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
路过,发现好帖,于是顶之
2012-11-17 10:51
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
56
好像蛮好看的..
2012-11-17 10:59
0
雪    币: 211
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
57
我来淡一下个人看法:
这一个问题是关于内存copy by written的问题,其实这不算bug,只不过半斤你研究时现解不对导致的问题,因为你下int 3断点时,使用的方法不对,导致破坏了这一种机制的产生,打比方,window的进程是独立的,意思就是说,他的独立性是针对进程内部的程序来说的,你要是在他程序里面使用mov byte ptr[7743F8EB],0cch,这样的代码来加入int 3断点的,你就可以看到他只会修改一个进程的内容,另外的进程不受影响,另外如果其它进程需要修改它产生同样的效果,可以用函数WriteProcessMemory,这样也可以成功产生相同的效果,但你使用的windbg的内存修改内存的办法,这样他只不过是简单地直接把0xcc写到了物理页内存上,那样就变为全局断点了,我猜测windbg修改这一个int 3断点时,根本没有触发0x0e异常,也不会触发到copy write的处理过程。
2012-11-19 14:51
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
58
NICE!
不知在R3下,能实现COW的效果吗?
2012-11-22 00:16
0
雪    币: 211
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
59
R3下是可以实现,你进程内直接用mov byte ptr[7743F8EB],0cch来写断点,就可以产生了。
2012-11-22 14:03
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
60
[QUOTE=cpu;1119982]R3下是可以实现,你进程内直接用mov byte ptr[7743F8EB],0cch来写断点,就可以产生了。[/QUOTE]

CPU您好,你误解我的意思了,我是说,R3下,能否实现,COW.

我的意思是说自己编程实现. 修改一进程的USER32内存,能实现修改所有进程中的USER32中的数据.

并不是在WINDBG下实现修改.
2012-11-22 23:56
0
雪    币: 211
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
61
RING3下好象不成,RING0才可以,因为RING3修改时,会产生异常的,系统对于系统的dll有保护,虽然你可以用API改变内存地址的属性,但还是突破不了。
2012-11-23 11:17
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
62
看来我在WINDBG中修改的.并不是R3下实现的了.
谢谢啦.
2012-11-23 11:30
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
分析得很精僻,可惜看不太懂,留个脚印,收下以后看
2012-11-25 21:19
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
64
由于是用windbg连接虚拟机中的操作系统内部的调试模块,实质上还是R0中完成的写内存,更改物理内存的的任务.如果LZ用windbg调试主系统的进程那就是纯R3了.
2012-11-25 21:41
0
雪    币: 123
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
先回复,再学习!
2012-11-27 08:38
0
雪    币: 435
活跃值: (1212)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
66
不可能,r3下关不掉写保护,必然触发写异常,继而触发cow
2012-11-27 08:52
0
雪    币: 31
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
67
我估计,系统有一个函数,和硬盘还原原理差不多,当某个DLL物理地址被更改时,在别处写下更改值,当当前进程再次读取时.读取新址.但是你直接把虚拟机系统中断了.系统没办法运行.不能知道你修改了哪个.所以直接当作你没修改处理.而已经加载过的程序不影响,我也不太清楚,或许系统在每个进程空间有备份.新建的进程,他就会读取源地址,但是物理地址已经在系统不知情的状态下被更改,所以...
2012-11-28 10:13
0
雪    币: 408
活跃值: (156)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
68
大概明白了楼主的意思,其实,楼主第一次是用OD修改,引发了COW,实际上修改的是map以后的物理代码,但是映射是在同一个虚拟地址上,第二次是wdg来修改的,未触发COW,直接改的物理内存实体的代码,然后根据这个修改的内存映射到不同进程的虚拟地址中。
2012-11-28 12:30
0
雪    币: 615
活跃值: (172)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
69
在OD里修改页面触发PAGE_WRITECOPY,代码将引起代码访问违规,系统在页交换文件中创建该页面的私有副本,修改的是页交换文件上数据,所以其它进程不受到影响~

转换公式,我们就按照虚拟机的小内存(10/10/12)的方式来转换.

重点看二进制. Binary:  01110111 01000011 11111000 11101011

我们将这32位线性地址,按10/10/12 方式拆分为.

01110111   01000011   11111000   11101011   // 拆分前
0111011101   0000111111   100011101011      // 拆分后

0001 1101 1101   // 前10位重组后为  0x1DD
0000 0011 1111   // 中10位重组后为  0x3F
1000 1110 1011   // 后12位重组后为  0x8EB



小内存也不一定是10/10/12 方式拆分,
也可能是2/9/9/12拆分,
当然也有大页面的10/22等其它拆分方式,
不同的线性地址拆分方法是不一样的,
如果笼统认为10/10/12 方式拆分那算出来的物理地址不一定正确~
2012-11-28 14:36
0
雪    币: 88
活跃值: (578)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
make
2021-1-5 02:16
0
游客
登录 | 注册 方可回帖
返回
//