找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3165|回复: 4

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

[复制链接]
发表于 2014-3-22 13:06:37 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
原文出处:
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.点击“写内存”按钮
0.png
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”,再点击“写内存”按钮
1.png
5.点击“计算器”界面的菜单“帮助”->“关于”,计算器出错退出
6.点击“记事本”界面的菜单“帮助”->“关于”,记事本出错退出

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

使用道具 举报

发表于 2014-3-24 00:47:39 | 显示全部楼层
实验2是何解?意思是映射到所有进程空间里面去了?
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2014-3-24 01:50:17 | 显示全部楼层
夜雨 发表于 2014-3-23 16:47
实验2是何解?意思是映射到所有进程空间里面去了?

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

使用道具 举报

发表于 2014-4-23 09:28:27 | 显示全部楼层
写时拷贝,真没听说过。
如果改一个进程,所有的进程都受到牵连,
那是不是能做全局Hook API了?
回复 赞! 靠!

使用道具 举报

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

恐怕能。
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-21 20:03 , Processed in 0.038894 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表