Overwrite running exe ? 可以加分。。(100分)

K

kcahcn

Unregistered / Unconfirmed
GUEST, unregistred user!
XP下覆盖正在运行的EXE。(2K应该一样)<br>先声明一下,如果此问题很简单或者有人讨论过这问题,请见谅。本人想知道答案<br>我所知道的就是:在win32不能覆盖正在运行的EXE。<br>如果想覆盖的话,系统会弹出吓人的 Error Copying File or Folder 的 MessageBox...<br>&nbsp; &nbsp;:废话。这谁都知道。<br>跟我做这个小实验:<br>覆盖一个系统exe(在system32)。正在运行不行。没错吧?<br>把一个exe(随便任何exe,最好很小的exe)的名字改为system32的一个exe(比如taskmgr.exe)<br>覆盖一个不在运行状态的系统exe(比如说taskmgr.exe)。<br>覆盖后立即运行。你看到的当然不是原来的系统exe。<br>过一会儿系统会覆盖“正在运行”的taskmgr.exe (假的exe),但系统不会关闭其进程!!!<br>打开taskmgr.exe(真的exe)。<br>两个进程taskmgr都在。用process view或别的能显示进程的目录(path)。<br>两个进程的path是windows/system32。<br>就是说系统覆盖了一个其进程没被关闭的exe。<br>覆盖不在运行的系统exe并且立即运行。利用这个主意可以做什么。。。<br>能知道怎么覆盖正在运行的exe又会导致什么。。。<br>-----<br>本人关于“覆盖正在运行的exe"这个问题一无所知。请多多执教。<br><br>CIONO1
 
比较困难
 
[:D][:D][:D]<br>终于发现了<br>looooooooool<br>试试看这个 <br>假设c:/a.exe正在运行。我们先改它的名字,加上".tmp"<br>再复制h:/a.exe到c然后运行<br>系统就是这么做。做上次我说的实验时仔细看system32会看到一个.tmp文件<br>renamefile('c:/a.exe','c:/a.exe.tmp');<br>if(not CopyFile('h:/a.exe',<br>&nbsp;'c:/a.exe',false)) &nbsp;then<br>begin<br>ShowMessage('error');<br>exit;<br>end;<br>winexec('c:/a.exe',SW_SHOW);<br><br><br>CIONO1
 
其实不用那样<br>运行一个exe然后改名字也可以!!!<br>windows允许改正在运行的exe的名字。<br>
 
现在我们知道系统会修改被替换的文件名,我猜测系统用 ReadDirectoryChanges 来检测<br>系统文件是否被修改过。那么hook 它就能知道哪个进程在起作用了,你试试看,我陪同事<br>买东西去了。晚上我会在的。<br><br><br>I am not C.I.O. Creator ,But i am CIONO_0<br><br>
 
EXE 改名运行可以伪造系统进程,这着着实难防,鬼知道哪些系统进程会在什么时候启动,<br>打开进程查看器,看到满眼系统进程,我是不会深究到底它是真的系统进程还是假的系统<br>进程的。为什么 Windows NT 内核也还留着这个特征啊。<br>普通 EXE 文件之所以不能在执行中被物理地删除的原因,我查了一下基本是 2 个原因:<br>一个是文件本身被 PE 装载器装载时引用的文件 Handel ,这个在 NT 中和其他被打开的<br>哪怕是文本文件一样是被保护的。另一个是装载 EXE 文件时使用内存映像文件句柄。用来<br>访问编程时直接联编在 EXE 文件中的数据。不知道对不对。用 Delphi 直接尝试清除这两<br>个东西,好象有点难度,如果使用控制台程序会不会好一点,至少可以绕过窗口这一块。<br>发这一篇是纠正我上次说的Atom问题,但我不清楚搞掉了这两个东西,虽然 EXE 文件被物<br>理删除了,但由于缺少内存映像文件句柄,无法访问程序内部的数据了,这个程序还有什么<br>用?
 
顶部