让可执行文件可以保存信息在自身中!!!

时间:2022-12-30 08:31:11
平时写程序时常会用到一些配置项,
比如设置字体/设置颜色/默认路径/安全密码等等,

一般的做法都是用配置文件(如 .ini)或注册表,
感觉这样做很有弊端,比如说,换台电脑又要重新配置/或者连同配置文件拷贝,

时常造成一些不便。

所以,想请教大家:
有没有办法可以把配置的相关信息都放在本身的exe文件中,这样,只需要拷贝一个文件即可,

有了解这方面信息的请指导一二,先谢过了!

16 个解决方案

#1


感觉有点难,EXE在执行的过程中是不能被修改的。

#2


自我理解是,一般软件都将配置信息保存在外部文件中,执行时读取配置信息。

当然可以为用户提供选项,如:勾选相应选项,执行不同操作等,但下一次执行exe,还将是默认操作。

exe属于PE文件,能捆绑文件,很多病毒都这样做的,但满足上述要求,还期待高手解答。

#3


可以,但是比较麻烦,而且涉及到不少类似病毒的操作,会被杀毒软件报毒。

#4


引用 3 楼 lisunlin0 的回复:
可以,但是比较麻烦,而且涉及到不少类似病毒的操作,会被杀毒软件报毒。


在不考虑杀毒软件的情况下,

可以详细点说说大概怎样做吗?

或者给点相关资料也行,

#5


可以在程序的最后添加一个数据附加段,来填写你的配置,不过这样的话,你需要动态去获取便宜读取数据

#6


感觉要沉了…………

#7


帮顶……

原先看过一篇文章,讲可黑客程序的,在exe文件尾部写入信息。

第一种方法,用UltraEdit软件,把exe程序尾部增加一部分空间。

CFile openoriginalfile;  
openoriginalfile.Open(originalfile, CFile::modeReadWrite);  
openoriginalfile.Seek( -sizeof(NAMES), CFile::end );             //这个NAMES就是我要保存的配置的一个struct,下面的n是具体的NAMES的对象  
openoriginalfile.Write( &n, sizeof(NAMES) );  
openoriginalfile.Close();  


整个过程不需要得到原文件的长度,而且也能保证写到最后。相应的,读取的代码如下:

CFile myfile;  
myfile.Open(myfilename, CFile::modeRead);  
myfile.Seek( -sizeof(NAMES), CFile::end );  
myfile.Read( &n, sizeof(NAMES) );  


貌似灰鸽子的配置信息就是写入资源里的。

其实还有一种简单的方法就是,编程时先留好空间。然后直接找到对应的字节,替换之。原理行得通,没弄过这块儿,希望对你有帮助,同时等待高手……

#8


该回复于2011-01-10 15:28:01被版主删除

#9


该回复于2011-01-11 08:46:13被版主删除

#10


open file用正规的麻烦的API也是可以写的,叫Volume Shadow Copy Service.lz找下Microsoft VSSSDK.

#11


主程序a.exe将要写的信息写入同目录ini
配置信息写完后,通过资源生成预先配置程序b.exe

当主程序a响应WM_CLOSE时候,ShellExecute打开b并向b.exe发生自定义消息。
b接到自定义消息后,找不到A窗口句柄时,读取ini并在a中预留位写入配置信息

当关闭b时,删除ini,并通过生成bat方式实现自删除

#12


5 楼的方法应该可以,楼主试试,

#13


11楼的做法是主流做法,看看WinRAR , 将数据文件和执行文件放入同一个可执行文件,点击运行后,在当前程序目录下建一个run的目录,解压到所有文件到run目录,并锁定文件(防止别人误删),并执行可执行文件, 在可执行文件执行完后,将run下的文件重新打包,替换之前的文件.

#15


让可执行文件可以保存信息在自身中!!!  关注

#16


引用 11 楼 gudufuyun 的回复:
主程序a.exe将要写的信息写入同目录ini
配置信息写完后,通过资源生成预先配置程序b.exe

当主程序a响应WM_CLOSE时候,ShellExecute打开b并向b.exe发生自定义消息。
b接到自定义消息后,找不到A窗口句柄时,读取ini并在a中预留位写入配置信息

当关闭b时,删除ini,并通过生成bat方式实现自删除

尝试

#1


感觉有点难,EXE在执行的过程中是不能被修改的。

#2


自我理解是,一般软件都将配置信息保存在外部文件中,执行时读取配置信息。

当然可以为用户提供选项,如:勾选相应选项,执行不同操作等,但下一次执行exe,还将是默认操作。

exe属于PE文件,能捆绑文件,很多病毒都这样做的,但满足上述要求,还期待高手解答。

#3


可以,但是比较麻烦,而且涉及到不少类似病毒的操作,会被杀毒软件报毒。

#4


引用 3 楼 lisunlin0 的回复:
可以,但是比较麻烦,而且涉及到不少类似病毒的操作,会被杀毒软件报毒。


在不考虑杀毒软件的情况下,

可以详细点说说大概怎样做吗?

或者给点相关资料也行,

#5


可以在程序的最后添加一个数据附加段,来填写你的配置,不过这样的话,你需要动态去获取便宜读取数据

#6


感觉要沉了…………

#7


帮顶……

原先看过一篇文章,讲可黑客程序的,在exe文件尾部写入信息。

第一种方法,用UltraEdit软件,把exe程序尾部增加一部分空间。

CFile openoriginalfile;  
openoriginalfile.Open(originalfile, CFile::modeReadWrite);  
openoriginalfile.Seek( -sizeof(NAMES), CFile::end );             //这个NAMES就是我要保存的配置的一个struct,下面的n是具体的NAMES的对象  
openoriginalfile.Write( &n, sizeof(NAMES) );  
openoriginalfile.Close();  


整个过程不需要得到原文件的长度,而且也能保证写到最后。相应的,读取的代码如下:

CFile myfile;  
myfile.Open(myfilename, CFile::modeRead);  
myfile.Seek( -sizeof(NAMES), CFile::end );  
myfile.Read( &n, sizeof(NAMES) );  


貌似灰鸽子的配置信息就是写入资源里的。

其实还有一种简单的方法就是,编程时先留好空间。然后直接找到对应的字节,替换之。原理行得通,没弄过这块儿,希望对你有帮助,同时等待高手……

#8


该回复于2011-01-10 15:28:01被版主删除

#9


该回复于2011-01-11 08:46:13被版主删除

#10


open file用正规的麻烦的API也是可以写的,叫Volume Shadow Copy Service.lz找下Microsoft VSSSDK.

#11


主程序a.exe将要写的信息写入同目录ini
配置信息写完后,通过资源生成预先配置程序b.exe

当主程序a响应WM_CLOSE时候,ShellExecute打开b并向b.exe发生自定义消息。
b接到自定义消息后,找不到A窗口句柄时,读取ini并在a中预留位写入配置信息

当关闭b时,删除ini,并通过生成bat方式实现自删除

#12


5 楼的方法应该可以,楼主试试,

#13


11楼的做法是主流做法,看看WinRAR , 将数据文件和执行文件放入同一个可执行文件,点击运行后,在当前程序目录下建一个run的目录,解压到所有文件到run目录,并锁定文件(防止别人误删),并执行可执行文件, 在可执行文件执行完后,将run下的文件重新打包,替换之前的文件.

#14


#15


让可执行文件可以保存信息在自身中!!!  关注

#16


引用 11 楼 gudufuyun 的回复:
主程序a.exe将要写的信息写入同目录ini
配置信息写完后,通过资源生成预先配置程序b.exe

当主程序a响应WM_CLOSE时候,ShellExecute打开b并向b.exe发生自定义消息。
b接到自定义消息后,找不到A窗口句柄时,读取ini并在a中预留位写入配置信息

当关闭b时,删除ini,并通过生成bat方式实现自删除

尝试