0xAA55 发表于 2014-3-22 13:06:37

【转载】【科普】COPY-ON-WRITE是什么?

原文出处:
http://www.vbasm.com/thread-7933-1-1.html

在众多32位的ARK里,IceSword有一个神奇的功能,叫做“禁用COPY-ON-WRITE”。
但是这个功能似乎很冷门,后来兴起的新ARK(如XUETR等)都不再提供。
其实COPY-ON-WRITE在特殊场合还是有一定用处的,只不过很多人不知道而已。
下面就讲讲COPY-ON-WRITE的作用,以及禁用COPY-ON-WRITE的效果(以下演示皆基于WIN7X64系统)。

第一个实验:
1.运行calc.exe、notepad.exe、WIN64AST 1.03或后续版本
2.获得shell32!ShellAboutW的地址(选中CALC.EXE,按下右键,选择“读写进程内存”)
3.对calc.exe进程的函数首地址写入0xCC(填写“地址”和“长度”文本框,长度为1,内存内容为cc)
4.点击“写内存”按钮

5.点击“计算器”界面的菜单“帮助”->“关于”,计算器出错退出
6.点击“记事本”界面的菜单“帮助”->“关于”,记事本正常运行
总结:虽然修改了CALC.EXE里ShellAboutW函数的机器码,但是并没有影响到NOTEPAD.EXE,这就是COPY-ON-WRITE的作用。

第二个实验:
1.运行calc.exe、notepad.exe、WIN64AST 1.03或后续版本
2.获得shell32!ShellAboutW的地址(选中CALC.EXE,按下右键,选择“读写进程内存”)
3.对calc.exe进程的函数首地址写入0xCC(填写“地址”和“长度”文本框,长度为1,内存内容为cc)
4.先选中“禁用C.O.W”,再点击“写内存”按钮

5.点击“计算器”界面的菜单“帮助”->“关于”,计算器出错退出
6.点击“记事本”界面的菜单“帮助”->“关于”,记事本出错退出

总结:禁用COPY-ON-WRITE后,修改一个进程某个函数的机器码,会影响所有的进程。做完第二个实验后,你再运行任何程序,只要调用到shell32!ShellAboutW,进程都会马上崩溃。

夜雨 发表于 2014-3-24 00:47:39

实验2是何解?意思是映射到所有进程空间里面去了?

0xAA55 发表于 2014-3-24 01:50:17

夜雨 发表于 2014-3-23 16:47
实验2是何解?意思是映射到所有进程空间里面去了?

对,因此两个程序都因为执行了莫名其妙的断点中断而崩溃。

233 发表于 2014-4-23 09:28:27

写时拷贝,真没听说过。
如果改一个进程,所有的进程都受到牵连,
那是不是能做全局Hook API了?

0xAA55 发表于 2014-4-23 11:30:17

233 发表于 2014-4-23 01:28
写时拷贝,真没听说过。
如果改一个进程,所有的进程都受到牵连,
那是不是能做全局Hook API了? ...

恐怕能。
页: [1]
查看完整版本: 【转载】【科普】COPY-ON-WRITE是什么?