如何把信息写进自己里面

xiaotian2000 2001-06-24 06:34:00
如何把信息写进自己里面
就象这个程序一样,
http://go4.163.com/lovejingtao/selfmodif.exe
冰河也是这么实现的,服务器端的端口号,密码等都是写在exe里的,请问怎么实现啊!
...全文
225 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbaby 2001-09-26
  • 打赏
  • 举报
回复
关注
xiaotian2000 2001-09-26
  • 打赏
  • 举报
回复
这个问题好长时间没有解决,在顶一下了
xiaotian2000 2001-07-19
  • 打赏
  • 举报
回复
prometheusphinx(白日梦) 可以给我写个例子吗?谢谢
xiaotian2000 2001-07-19
  • 打赏
  • 举报
回复
prometheusphinx(白日梦) 可以给我写个例子吗?谢谢
要实现可以往程序里写字符串,还可以更改程序图标
dana 2001-07-17
  • 打赏
  • 举报
回复
up
wljcr 2001-07-17
  • 打赏
  • 举报
回复
?
prometheusphinx 2001-07-17
  • 打赏
  • 举报
回复
xiaotian2000所讲的程序我刚刚Down下来看了,
我原来以为很棒,看了后才知道它也要关闭后重开,
这种东东我也做过,很简单的。
prometheusphinx 2001-07-17
  • 打赏
  • 举报
回复
sephil(木牌独行侠)所讲的这种东东我用BCB, Delphi和VC都做过,
不过xiaotian2000所讲的应该不是指的这种。
xiaotian2000 2001-07-17
  • 打赏
  • 举报
回复
这个问题这么长时间还没有解决,我到不是有什么用,但是一直不能解决,就就如骨梗在喉,不吐不快,怎么办呢?
只能一再up了!
xiaotian2000 2001-07-03
  • 打赏
  • 举报
回复
难道csdn里就没有人知道吗?
xiaotian2000 2001-06-28
  • 打赏
  • 举报
回复
晕了
Sephil 2001-06-27
  • 打赏
  • 举报
回复
摘子 PMS(高山流水) 的程序,看看有没有用,是 BCB 的代码

关于自释放解密的编程算法

关于自解密释放的编程,至少需要创建两个project,假设project1编译为
main.exe,字节数为334848;project2编译为extract.exe,字节数为269824,用
copy/b main.exe+extract.exe main.exe /y
命令将extract.exe加到main.exe后面。
在project1中,用
fseek(fp0,334848,SEEK_SET);
跳过主模块的字节数,将其余部分(也就是extract.exe)写入到一个目标文件中

,比如是s.exe,然后将密码及每个文件的文件名、所在路径名、字节数、日期时

间、属性以及文件加密后的部分分别加入到s.exe中。
在project2中,用
fseek(fp0,269824L,SEEK_SET);
跳过自运行解密模块的字节长度,然后取密码及每个文件的文件名、所在路径名

、字节数、日期时间、属性以及将文件加密后的部分解密,最后写成一个个解密

后的文件。
附件中是自解密释放部分的源代码,不足之处,还请朋友们多多指教。



//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dir.h>
#include <conio.h>
#include <io.h>
#include <ctype.h>
#define PWDLEN 100 //密码长度上限

#include "extract.h"
#include "choosedir.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm5 *Form5;
//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm5::FormCreate(TObject *Sender)
{
char pathname[MAXPATH];
getcwd(pathname,MAXPATH);
Edit1->Text=StrPas(pathname); //在Edit1中显示当前路径(也是默认的文件释放路径)
Edit2->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button1Click(TObject *Sender)
{
Form6->ShowModal(); //调用选择文件释放路径的窗口
Edit1->Text=Form6->DirectoryListBox1->Directory;
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button3Click(TObject *Sender)
{
exit(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button2Click(TObject *Sender)
{
char buf[MAXDIR],fname[MAXDIR],pathname[MAXDIR],flen[15];
char year[5],month[3],day[3],hour[3],min[3],tsec[3];
char FileReadOnly,FileHidden,FileSys,FileArchive;
unsigned char ch,epasswd[PWDLEN];
unsigned char passwd[PWDLEN];
register unsigned long i,FileLength;
register int k;
int m=0,ans,flag=1;
struct ftime ft;
FILE *fp0,*fp1;
if(Edit2->Text=="")
{
Application->MessageBox("请输入密码!","出错信息",MB_OK);
return;
}
Button2->Enabled=false;
Button3->Enabled=false;
mkdir(Edit1->Text.c_str());
chdir(Edit1->Text.c_str());
if((fp0=fopen(_argv[0],"rb"))==NULL)
{
MessageBeep(0);
sprintf(buf,"无法打开文件:%s!",_argv[0]);
Application->MessageBox(buf,"出错信息",MB_OK);
return;
}
fseek(fp0,269824L,SEEK_SET); //跳过自运行解密模块的字节长度(不同环境可能会不一样)
fgets(buf,100,fp0); //取文件中的密码串
strcpy(passwd,Edit2->Text.c_str());
passwd[strlen(passwd)]='\0';
for(i=0;i<strlen(passwd);i++)
epasswd[i]=decrypt(buf[i],passwd); //将文件中加密后的密码串解密
epasswd[i]='\0';
if(strcmp(epasswd,passwd)) //将输入密码与解密后的密码串进行比较
{
MessageBeep(0);
Application->MessageBox("密码不符!请重新输入!","出错信息",MB_OK);
ActiveControl=Edit2;
return;
}
for(k=0;k<7;k++)
{
Memo1->Lines->Add(" ");
}
Memo1->Lines->Clear();
for(k=0;;k++)
{
fgets(pathname,MAXDIR,fp0); //取路径名
pathname[strlen(pathname)-1]='\0';
if(feof(fp0)) break;
if(pathname[0]!='.')
if(!DirectoryExists(pathname))
if(mkdir(pathname))
if(MakeDir(pathname)) //如果子目录不存在则创建之 {
sprintf(buf,"创建子目录:\"%s\" 时出错!",pathname);
Application->MessageBox(buf,"出错信息",MB_OK);
return;
}
fgets(fname,MAXDIR,fp0); //取文件名
fname[strlen(fname)-1]='\0';
if(strcmp(pathname,".\\")!=0)
strcat(pathname,"\\");
strcat(pathname,fname);
if(FileExists(pathname)&&flag)
{
MessageBeep(0);
sprintf(buf,"文件:%s已存在!!\n是否覆盖原文件?",pathname);
ans=MessageDlg(buf,mtConfirmation,TMsgDlgButtons() << mbYes << mbNo <<mbAbort <<mbAll,0);
if(ans==mrNo)
{
m++;
fgets(flen,100,fp0); //取字节数
flen[strlen(flen)-1]='\0';
FileLength=atol(flen);
fgets(buf,MAXDIR,fp0);
fgets(buf,MAXDIR,fp0);
for(i=0;i<FileLength+1;i++) ch=fgetc(fp0);
continue;
}
else if(ans==mrAbort)
break;
else if(ans==mrAll)
flag=0;
}
if(FileExists(pathname))
{
int Attrs=FileGetAttr(pathname);
if(Attrs & faReadOnly)
FileSetAttr(pathname,Attrs & !faReadOnly); //如是只读属性,解除之
if(Attrs & faHidden)
FileSetAttr(pathname,Attrs & !faHidden); //如是隐藏属性,解除之
if(Attrs & faSysFile)
FileSetAttr(pathname,Attrs & !faSysFile); //如是系统属性,解除之
}
if((fp1=fopen(pathname,"wb"))==NULL)
{
MessageBeep(0);
sprintf(buf,"无法打开文件:%s!\n是否继续?",pathname);
if(Application->MessageBox(buf,"出错信息",MB_YESNO)==IDYES)
{
m++;
fgets(flen,100,fp0); //取文件的字节数
flen[strlen(flen)-1]='\0';
FileLength=atol(flen);
fgets(buf,MAXDIR,fp0);
fgets(buf,MAXDIR,fp0);
for(i=0;i<FileLength+1;i++) ch=fgetc(fp0);
continue;
}
else
break;
}
sprintf(buf,"正在解密并释放文件:%s......",pathname);
Memo1->Lines->Add(buf);
fgets(flen,100,fp0); //取文件的字节数
flen[strlen(flen)-1]='\0';
FileLength=atol(flen);
int FileAttr=0;
if((FileReadOnly=fgetc(fp0))=='1') FileAttr=faReadOnly; //只读属性
if((FileHidden=fgetc(fp0))=='1') FileAttr|=faHidden; //隐藏属性
if((FileSys=fgetc(fp0))=='1') FileAttr|=faSysFile; //系统属性
if((FileArchive=fgetc(fp0))=='1') FileAttr|=faArchive; //归档属性
fgetc(fp0);
fscanf(fp0,"%s%s%s%s%s%s",year,month,day,hour,min,tsec); //取文件的日期时间
fgetc(fp0);
ft.ft_year=atoi(year);
ft.ft_month=atoi(month);
ft.ft_day=atoi(day);
ft.ft_hour=atoi(hour);
ft.ft_min=atoi(min);
ft.ft_tsec=atoi(tsec);
for(i=0;i<FileLength;i++) //根据每个文件的字节数来控制循环次数
{
ch=fgetc(fp0);
ch=decrypt(ch,passwd); //解密
fputc(ch,fp1);
}
fgetc(fp0);
setftime(fileno(fp1),&ft); //设置文件时间
fclose(fp1);
if(FileAttr!=0) FileSetAttr(pathname,FileAttr); //设置文件属性
Memo1->Lines->Add("完毕!");
}
fcloseall();
sprintf(buf,"已经解密并释放了%d个文件。",k-m);
Application->MessageBox(buf,"信息",MB_OK);
// exit(0);
}
//---------------------------------------------------------------------------
char __fastcall TForm5::decrypt(unsigned char ch,char passwd[PWDLEN])
//解密函数
//现在还不能公布解密算法,请大家谅解
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Edit2Change(TObject *Sender)
{
if(Edit1->Text!=""&&Edit2->Text.Length()>=6)
Button2->Enabled=true;
else
Button2->Enabled=false;
}
//---------------------------------------------------------------------------
//创建多层子目录,逐层创建int TForm5::MakeDir(char pathname[MAXDIR])
{
char dname[MAXDIR],buf[MAXDIR];
int i,j=0,k,pos[50];
for(i=0;i<strlen(pathname);i++)
{
if(pathname[i]=='\\')
{
pos[j]=i;
j++;
}
}
for(i=0;i<j;i++)
{
for(k=0;k<MAXDIR;k++) dname[k]='\0';
strncpy(dname,pathname,pos[i]);
if(!DirectoryExists(dname))
if(mkdir(dname))
{
sprintf(buf,"创建子目录:%s 时出错!",dname);
Application->MessageBox(buf,"出错信息",MB_OK);
return(-1);
}
}
if(!DirectoryExists(pathname))
if(mkdir(pathname))
{
sprintf(buf,"创建子目录:\"%s\"时出错!",pathname);
Application->MessageBox(buf,"出错信息",MB_OK);
return(-1);
}
return(0);
}
Luckyfeeling 2001-06-26
  • 打赏
  • 举报
回复
我认为它还是要用到外部文件,exe 文件运行是驻留在内存,否则,电脑重新启动,
内存的信息全部丢失,如果不用到外部文件,怎样保留!
我认为它可能以外部文件或注册表的方式保存!
xiaotian2000 2001-06-26
  • 打赏
  • 举报
回复
先把自己拷贝一份,修改后,把自己删掉在把拷贝拷过来,呵呵
一位网友告诉我这个原理,我也实现了
但是我还不满意!
达不到我提供的那个程序的效果
InsideDelphi 2001-06-25
  • 打赏
  • 举报
回复
估计试程序中修改了堆见的内容。
wangxd1976 2001-06-24
  • 打赏
  • 举报
回复
gz
enmity 2001-06-24
  • 打赏
  • 举报
回复
呵呵
xiaotian2000 2001-06-24
  • 打赏
  • 举报
回复
up
不需要开发,0行代码写接口服务,sql编程,只要会sql就会写接口服务,让后端变得更简单,简单4步短短5分钟,立马上手,java小白也可以写接口。订阅课程后可以免费获取发布版进行使用和测试。 0行代码写服务的需要来源案例一,当时有个项目,有400张表,都是管理系统,单表维护的内容较多,当时的项目团队是13人,前后端都写,那时候还没有springboot,用的是ssm,mybatis刚出来,有了替代hibernate的趋势,ifelse写了一堆又一堆,实体类也是,当时的后端分了7层☒,天天加班干这活,复制粘贴,很容易犯错,实体类多人引用修改,真的是废了很大的劲……案例二,也是一个比较大的项目,两千万多万那种,当时为了拿项目,需要快速实现原型给客户看,要求比较高,虽说是原型但是数据全部需要实时,这时候就需要大量编写数据接口,同样编写接口这件事难度倒是不大,但是量大,编写过程手写很容易出错……案例三,以前管理的团队主要做移动端开发,里面的项目会涉及到推送,管理系统,数据采集与同步,总之很多内容,需要前后端通吃,我不仅需要出方案,设计原型,设计数据库,出报价,沟通需求,还要写后端框架,数据接口与数据采集,开发前端(web端),移动端,管理所有项目,但是那时候招的人只会写移动端,实在是忙不过来,我就想能不能有个框架让不会写java的人能写接口,因为写移动端sqlite总是会用的,也就是说写sql不是难点……基于以上三点需求的积累,我利用业余时间写了一个后端框架,完成了这样的需求,刚开始是需要写三行代码完成一个接口,经过后面优化,现在不写代码也可以实现……  本框架涉及的知识点比较多,目前提供最基础版供大家学习和使用,后期逐步推出框架具体的教程和功能内容,下期我们讲如何在实际项目中通过部署版如何完成所需要的接口编写,欢迎大家订阅。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧