可执行文件自修改?(200分)

  • 主题发起人 主题发起人 lintel
  • 开始时间 开始时间
代码当然不能放在begin
...end里面,要写在procedure里,因为你要吧procedure的指针
入栈,
getProcAddress和offset是有区别的吧。
对于楼主的问题,应该就是吧deleteFile部分改成修改自身的代码了。
 
给大家一个思路,
普通的程序在执行时,都是映射到内存的,所以原来的文件不允许删除和修改
但是当文件在软盘或光驱上时,系统就不会建立文件映射,而是
将文件的所有数据都调入内存,不需要再进行读取,
此时,文件不知道能否删除和修改,可以在软驱中做一下试验
 
Gary Nebbett的那段程序,退出进程后删除文件?
能够让进程保留,主文件删除吗??
 
学习。我是通过地址偏移去修改的。
不过很烂而且代码不再拉。
 
另外,修改程序自身用什么写?汇编?
 
to LiChaoHui:
对软盘和光盘的确是那样,但是那样会使启动变得很慢,window之所以要用内存映射打开
可执行程序,就是为了节省打开的时间,我觉得这种方法不可取。
to jamers:
我认为不可以,而且有必要吗?如果你要修改的话可以先在内存里改,然后在关闭的时候
写回去。
 
我的方法如果可行的话,应该算是一个好方法,
既然要对程序进行修改,启动慢一点也无所谓,况且在硬盘运行时,
也不一定会慢多少,
问题是,如何使程序像在软驱或光驱中运行一样,一次调入全部内容,
不进行文件映射,倒是不容易办到的事情
 
看程序大小吧,如果2,3M的话就太慢了。如果几百k你的方法到不错。
不过要实现起来恐怕难度更大把,我暂时只知道要么让操作系统认为你的程序是在
软盘上,要么就是自己控制装载。
你不觉得我们上面讨论的方法可能更容易实现吗?
 
如果再加一个动态链接库,这部分代码写到动态库中
 
不管怎么解决,有人可以提供Demo吗?
让大家开开眼…
这好样真的是技术上的难题,呵
 
用动态连接库的话.....不如直接用临时文件算了。
 
看来 薄荷,是有了好的办法了,
不要保密啊,给大家说说,
如果你的办法好,给分也行啊!!
 
我受到删除自身的启发,有了一点点想法而已,还没有试,如果试成功了,当然会
公布了。我的初步想法是改动push deletefile;改成 push createfileA,等一系列
读写文件的api和他们的参数,不知道能不能成功。
 
这个,大家早都想到了,
不如分配一块内存,将特殊的要执行的代码复制过去,
然后跳过去,也不用入栈了,要更简单一些,而且也可以利用
Delphi来写程序
 
但是这种方法没法保存啊,你只是修改了内存里的映像而已。进程结束后还是复原了。
 
多人接受答案了。
 
后退
顶部