请问如何实现程序自己把配置文件写入自身? ( 积分: 50 )

  • 主题发起人 主题发起人 幽云渔者
  • 开始时间 开始时间
程序中留下内部空间,自己写啊!
例如
Procedure WriteMyINI;
Label
_P1 ,
_Proc ;
Var
Ps ,
Pe : Pointer;
_size : DWord;
Begin
Ps:=@P1;
Pe:=@_Proc
_size:=LongInt(Pe)-LongInt(Ps);
GoTo _Proc;

_P1:
Asm
// 1..16 : 256字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节

// 1..16 : 256字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节

// 1..16 : 256字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节

// 1..16 : 256字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 // 16字节
End;
_Proc:
// 上面定义了1K字节空间!你可以把数据保存在里面!呵呵!
End;
 
我只想用更新源的方法来实现这个问题,能不能实现呢?
 
更新源? 设么意思???
 
楼主的想法很天真, 理论上只有你自己写操作系统了;
借助外部程序是可以的, 上面提到的批处理是一种方法, 还有可以复杂隐秘一点的:
将B程序执行代码放到A程序中, A程序运行后, 释放B程序并隐秘运行;
A程序要修改保存的参数用临时文件保存;
B程序监视A程序运行, 如果A结束运行, B将临时参数文件内容写到A程序文件中, B退出.
 
以上大家所说无非都是文件的切割与合并。。。,运行文件前还要把文件分离出来。。。如果可以不分离就运行最好了

新世纪 的方法可能更隐秘

wql的方法很感兴趣 可否提供更多代码
 
你把参数保存为ini文件格式的字符串。运行时读取到stringlist内,然后程序内使用一个TMemIniFile来读写参数,
ini:= TMemIniFile.creater;
ini.SetStrings(stringlist);

这样就不用分离参数为单独的文件了,全部内存操作。
至于写入参数,我觉得我上面帖子提到的不失为一个可行的方法。既然操作系统本身都是用这样的方法来替换运行中的文件,那么估计是没有更好的方法了。
 
可执行文件一运行就被操作系统作为内存映射文件锁住了的,只能读,不能写。除非你更改操作系统,否则是不可能直接改写自身的。
 
不用浪费时间解释了,楼主是不会相信的,你看他说
"只有想不到,没有办不到的事,这种程序肯定是可以实现的,只是你我的水平有限而已。"

他既然那么肯定,就让他在死胡同里钻下去吧.
 
想知道结果,顶下
 
这几天一直没时间上网,看到这么多哥们顶贴,真是感动。
ufo提供的想法不错,但主要的还是如何能把参数写到程序中。
我还要听课。。。。。
 
何必呢 用注册表不是方便多了啊
 
to :迷 路 人
用注册表是容易,但很多杀毒软件都能监控注册表的修改,加密效果不是很好。
 
姑且不论你要这样做是否有好的加密效果。
可行的方法是这样的:
1。用MoveFileExW 把当前运行的文件 [red]移动[/red] 到一个临时目录
2。再把这个文件从临时目录 [red]拷贝[/red] 到当前运行目录
3。现在,当前运行目录的这个可执行文件已经是可以修改了。
4。用流载入这个可执行文件,在其尾部添加数据吧,尾部添加的数据不影响文件运行。
5。当然要注意临时文件的清除,每次程序启动时,查找一下临时目录下是否有特定文件,有就删除。
6。程序启动时,可以载入可执行文件,然后读取尾部的数据就是了。
不知道如何读取尾部的数据?
可以看看我公布的一个源码:http://ufo2003.ys168.com/
在“我的源码”文件夹下,“CatalogMake.rar”就是了,这个程序是运行时读取自身尾部的数据,并显示为图片,类似数码相册的东东,几年前写的,代码比较乱。
 
后退
顶部