如何修改EXE文件的代码?谢谢回复!!!
解决方案 »
- 不知道过程怎么写到dll里,求教
- 很有规律的数据怎么用代码实现
- 请教使用cxGrid的CardView时,如何去掉字段标题上用于筛选的小三角?
- 在哪有介绍做报表的书(或说明)下载。
- 如何使可执行文件打开自己读取内容?
- 西安的DELPHI!!!
- 请问:现在Delphi7的最高版本是多少,哪里有下载? 我现在的版本是Buile:4.453
- 2:0高兴呀!
- 又是一个奇怪的问题??
- PARADOX的数据库了的字段问题
- 为什么我在delphi2006中用quickreport组件时,将报表导出为pdf时,中文字有重叠的地方,而数字和字母很正常!
- ~~最后可用的35分了~问一个关于记录循环判断的问题~!!
以上是只是原理。晕
function Button3Click(sss:string):boolean; //sss是修改的文件var
buffer:char;
F:file;
begin
result:=true;
try
Assignfile(F,sss);
FileMode:=2;
Reset(F,1);
Seek(F,63993);//定位到某地址
buffer:=char($75);
Blockwrite(F,buffer,1); //写入
Seek(F,64105);
buffer:=char($C1);
Blockwrite(F,buffer,1);
Seek(F,64135);
buffer:=char($9E);
Blockwrite(F,buffer,1);
Closefile(f);
except
result:=false;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
TempName: string;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
Sr: TSearchRec;
size: Longint;
begin
FindFirst(ParamStr(0), $27, Sr);
size := Sr.Size;
FindClose(Sr);
StatusBar1.SimpleText := '本程序大小为 ' + IntToStr(size) + ' 字节';
end;procedure TForm1.Button1Click(Sender: TObject);
var
Dir: PChar;
Ch: array[0..3] of Char;
Stream1, Stream2: TMemoryStream;
begin
GetMem(Dir, 254);
GetTempPath(254, Dir);
TempName := StrPas(Dir) + 'o.o.0.o.o.exe';
CopyFile(PChar(ParamStr(0)), PChar(TempName), False);
Stream1 := TMemoryStream.Create;
Stream2 := TMemoryStream.Create;
Stream1.LoadFromFile(TempName);
//在尾部加入4个随机字节
Randomize;
Ch[0] := Chr(Random(256));
Ch[1] := Chr(Random(256));
Ch[2] := Chr(Random(256));
Ch[3] := Chr(Random(256));
Stream1.Seek(0, soFromEnd);
Stream1.Write(Ch, 4);
//修改偏移48的一个字节,记录程序运行次数
Stream1.Seek(0, soFromBeginning);
Stream2.CopyFrom(Stream1, 48);
Stream1.Seek(48, soFromBeginning);
Stream1.Read(Ch, 1);
Ch[0] := Chr(1 + Ord(Ch[0]));
Stream2.Write(Ch, 1);
Stream1.Seek(49, soFromBeginning);
Stream2.CopyFrom(Stream1, Stream1.Size - 49);
Stream2.SaveToFile(TempName);
Stream1.Free;
Stream2.Free;
FreeMem(Dir);
repeat
Close
until FileExists(TempName);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
WinExec(PChar(TempName + ' ' + ParamStr(0)), SW_SHOWNORMAL);
end;end.