替换运行中的文件(深入浅出).doc_第1页
替换运行中的文件(深入浅出).doc_第2页
替换运行中的文件(深入浅出).doc_第3页
替换运行中的文件(深入浅出).doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

替换运行中的文件替换运行中的文件 深入浅出深入浅出 文章作者 Dancefire at 263 dot net 这是今天瞎琢磨的一点收获 一 引入一 引入 凡事总喜欢刨根问底 一直问自己为什么 问到实在没什么可问了为止 当然也有问到自己是在懒得再问了为止的时候 因为一个软 件的自动更新老出问题 有时候出现无法自动更新 分析后发现原来是在替换正在运行的程序时出了问题 无知的我就开始对替换正在 运行中的程序的方法进行分析 虽大言不惭自称深入浅出 其实只不过对一个问题想深入进去 分析到自己因技术不佳无法继续分析的时候 浅浅的出来而已 但是 仍旧希望这篇文章能够对和我一样思考这个问题的人有一点点帮助 言归正传 首先从 xfocus 的 bgate 的文章 在 Win2000 XP 上安静地替换正在使用的系统文件 中获得启发 他对替换正在使用的系统文件进行了研究 分析了微软的一个工具 zap 这个工具可以替换系统文件 经过分析后 这个工具其实是 先把正在使用的文件移动到一个临时目录中去 然后再把这个文件删除 但是标记为下次启动的时候删除 此时系统文件目录已经腾出 了空间 这样再把新的文件移动过来就可以了 实现部分代码示意如下 if szFileToDel 1 sprintf cTempPathName c szFileToDel 0 else GetModuleFileName NULL cFileName 0 x100 sprintf cTempPathName c cFileName 0 if GetTempFileName cTempPathName 0 cTempFileName 0 return FALSE if MoveFileEx szFileToDel cTempFileName MOVEFILE REPLACE EXISTING 0 return FALSE if MoveFileEx cTempFileName NULL MOVEFILE DELAY UNTIL REBOOT 0 return FALSE if MoveFileEx szSrcFile cTempPathName 0 return FALSE 其中 winbase h define MOVEFILE REPLACE EXISTING 0 x00000001 define MOVEFILE COPY ALLOWED0 x00000002 define MOVEFILE DELAY UNTIL REBOOT0 x00000004 define MOVEFILE WRITE THROUGH0 x00000008 二 二 MoveFileEx 分析分析 为了了解 MoveFileEx 到底是如何在下次重新启动的时候进行的文件移动操作的 我查阅了操作系统源代码 1 MoveFileEx 实际上是调用的 MoveFileWithProgressW 只不过 NULL 了两个回调参数 2 MoveFileWithProgressW 中针对 dwFlag MOVEFILE DELAY UNTIL REBOOT 的 调用了 BasepMoveFileDelayed 函数 3 BasepMoveFileDelayed 是通过修改注册表的方法 让操作系统重新启动时进行文件操作的 它修改的键值是 HKEY LOCAL MACHINE SYSTEM CurrentControlSet Control Session Manager PendingFileRenameOperations 这是一个 REG MULTI SZ 的键值 格式是 szDstFile 0 0 szSrcFile 0szDstFile 0 0 szSrcFile 0 szDstFile 0 0 有些文章中所说的源文件和目标文件中间是换行 这并不是最合理的 虽然也可以 中间是 Unicode 的 0 也就是 00 00 而且需要注意的是 如果指定了 MOVEFILE REPLACE EXISTING 属性的话 目标文件前会加注一个叹号 这个键值我是在分析完源代码后 才发现原来 MSDN 中已经给出这个键值了 后来我打开我的这个键值 发现里面有一堆 还没有来得及删除的文件 在等着我下一次重新启动的时候删除呢 根据关于 MOVEFILE DELAY UNTIL REBOOT 的解释 操作系统会在系统重新启动的时候 在 Autochk 检查完成后 并且在建 立任何 PageFile 文件之前 立即进行指定的文件移动 而且要确保所要操作的文件能够被 LocalSystem 或者管理员组所操作 我同时也注意到了另外一个我不熟悉的问题 就是为什么文件被移动了 但是应用程序还可以继续执行 而删除则不行 我没有细考 虑这个问题 但是我感觉一定是有什么东西没有变化 比如某种链接 虽然位置变了 但是链接依旧能够跟踪到映像的位置 所以所有 指向该链接的操作都是生效的 但是删除文件的时候 该链接就会被删除 从而会导致操作失败 为了避免这种失败 所以禁止删除正 在被占用的文件 三 操作系统启动过程中相关操作三 操作系统启动过程中相关操作 关注了一下 NT 的启动过程 想了解系统在启动的时候是如何执行上面提到的移动或者删除行为的 在初始化内核阶段 ntoskrnl exe 从 NTLDR 手中接管了控制权 在最后一步 Session Manager 启动了 Windows XP 的高级子 系统以及服务 Session Manager 启动控制所有输入 输出设备以及访问显示器屏幕的 Win32 子系统以及 Winlogon 进程 初始化内 核完毕 Session Manager 实际上就是 smss exe 我们经常可以在内存进程中看到他的身影 反汇编的时候 在 sub 48584D01 中看到 XP 有考虑识别的 CPU 有 0 x86 1 MIPS 2 ALPHA 3 PPC 4 IA64 5 ALPHA64 other UNKNOWN 我在 smss exe 里面找到了 PendingFileRenameOperations 可见应该是此文件负责了在引导的时候执行其中的文件移动操作 只可惜 我没有找到何处调用了 PendingFileRenameOperations 反汇编功底不佳啊 从 中看到一段关于 Session Manager 调用 PendingFileRenameOperations 的话 After you pass the point in the log where boot and system driver initialization is complete you ll begin to see records created by the smss exe process which is called the Session Manager Session Manager is the first user mode process launched during a boot You ll see it immediately check to see if there are any rename operations it should perform before the system is up and running by looking at the value HKLM System CurrentControlSet Control Session Manager PendingFileRenameOperations Next you ll see it determine what DOS device mappings it should create e g COM1 LPT1 what environment variables are defined what DLL s it knows about standard DLLs in the system32 directory and which protected subsystems it should start e g OS 2 POSIX Session Manager typically launches Chkdsk autocheck exe which is specified in the Session Manager s BootExecute value along with direction to run other boot time native applications After Autocheck finishes Session Manager starts Winlogon and the Win32 subsystem CSRSS EXE Both of these generate interleaved Registry accesses as they start up concurrently Winlogon can be seen querying the Default key s display settings including colors and mouse settings under HKU Default Control Panel The Default key s contents are user preferences that are active when no one is logged in and Winlogon uses them for the screen on which it displays the logon dialog box 不过这个和微软所说的先 Autochk 然后再 PendingFileRenameOperations 不同 从另一份文档中 Smss 的主线程进行以下的初始化步骤 1 创建 LPC 端口对象 SmApiPort 和两个等待客户请求的线程 客户请求包括装载一个新的子系统或者创建一个会话等 2 为 MS DOS 设备名 如 COM1 和 LPT1 定义符号链接 3 如果安装了终端服务 Terminal Services 在对象管理器的名字空间创建 Sessions 目录 4 运行 HKLM SYSTEM CurrentControlSet Control Session Manager BootExecute 定义的程序 典型的是运行 Autochk Chkdsk 在引导其间的版本 5 按照 HKLM SYSTEM CurrentControlSet Control Session Manager PendingFileRenameOperations 的指令 进行延 迟文件改名操作 挂起文件删除在 PendingFileRenameOperations2 6 打开已知的 DLL 7 创建另外的分页文件 8 初始化注册表 配置管理器刷新注册表 为 HKLM SAM HKLM SECURITY 和 HKLM SOFTWARE 关键字装载注册文件 HKLM SYSTEM CurrentControlSet Control hivelist 在硬盘上搜索注册表文件 配置管理器在 Winnt System32 Config 寻找 9 创建系统环境变量 10 装载 Win32 子系统内核模式部分 Win32k sys Smss 在 HKLM SYSTEM CurrentControlSet Control Session Manager 下寻找 Win32k sys 和其它要装载组件的路径 确定它们的位置 Win32k sys 中的初始化代码使用视频驱动程序 屏幕的 分辨率转换到缺省概貌文件定义的值 因此 屏幕从引导视频驱动程序使用的 VGA 模式转到系统选择的缺省的分辨率 11 启动子系统进程 包括 Csrss 12 启动登陆进程 Winlogon 13 为调试事件信息创建 LPC 口 DbgSsApiPort 和 DbgUiApiPort 并创建监听这些口的线程 这个算是描述最清楚的了 四 总结四 总结 至此 对替换正在使用中的文件有了初步的理解 既 MoveFileExW MoveFileWithProgressW BasepMoveFileDelayed HKLM System CurrentControlSet Control Session Manager PendingFileRenameOperations 然后 ntldr 引导 ntoskrnl exe 结果引导权 启动 smss exe Session Manager 在 Autochk 之后 检查 PendingFileRenameOperations 然后执行其中的文件替换操作 最后 smss 启动 Winlogon 进程 允许用户登录 因此此种方法可以替换几乎所有的系统文件 因为 smss 是系统的第一个 UserMode 的进程 此时被使用的文件极少 不可能有人 在它之前占用文件 如果是替换系统文件的话 比如 smss exe 就使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论