200分,不会都入来看一下,UP都有分! (200分)

  • 主题发起人 主题发起人 lfpsoft
  • 开始时间 开始时间
L

lfpsoft

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将一个DCU文件的里面几个字节更改?
即是我知道的十六进制代码为:AA 78 DD BB CC
我想将它改为:AA 65 DD 12 CC.
请给代码!
 
有的话,也给我发一份 EMAIL:adslink@163.com
 
这么快就出4.2了?我也要一份!
email:workid@163.com
我这有4.1的破解,好像 www.playicq.com 上也有。
 
原来的问题我已解决,现在更改!
 
提供一种思路,把文件装载在tmemorystream中,然后把内容进行转化为16进制字符,然后替换,
反之,也可把要查找的16位字符转为普通字符,查找替换,然后保存流为文件即可。
 
以标准文件方式打开DCU,读入byte型数组中,到里面去查你要找的16进制数(一个字节一
个字节找),找到后更改其内容,再写入文件即可,如果只是一次性改动,可使用UltraEdit
去改,更方便。
 
我对这方面不熟悉啊!
我就是想实现这个功能,并不是使用UltraEdit
 
procedure ChangeSomeBytes(const FileName, Src, Tar: String);
var
S: String;
vFile: TFileStream;
Bytes: LongInt;
begin
vFile:= TFileStream.Create(FileName, fmOpenReadWrite+fmShareExclusive);
Bytes:= vFile.Size;
SetLength(S, Bytes);
vFile.ReadBuffer(S[1], Bytes);
S:= StringReplace(S, Src, Tar, [rfReplaceAll]);
vFile.Seek(0, soFromBeginning);
vFile.WriteBuffer(S[1], Bytes);
vFile.Free;
SetLength(S, 0);
end;

调用方法:
//
ChangeSomeBytes(MyDCUfile, #$AA#$78#$DD#$BB#$CC, #$AA#$65#$DD#$12#$CC);
//
 
好像不得呀,运行了,但文件还是没有变化。
我用UltraEdit看了。
 
那就稍微改一下:
procedure ChangeSomeBytes(const FileName, Src, Tar: String);
var
S: String;
vFile: TFileStream;
Bytes: LongInt;
begin
vFile:= TFileStream.Create(FileName, fmOpenRead);
Bytes:= vFile.Size;
SetLength(S, Bytes);
vFile.ReadBuffer(S[1], Bytes);
vFile.Free;
S:= StringReplace(S, Src, Tar, [rfReplaceAll]);
vFile:= TFileStream.Create(FileName, fmOpenWrite);
vFile.WriteBuffer(S[1], Bytes);
vFile.Free;
SetLength(S, 0);
end;
 
我也想知道
 
我用另外的方法搞掂了。!
 
后退
顶部