如何替换EXE文件中的指定16进制字符串?(50分)

  • 主题发起人 主题发起人 aldz
  • 开始时间 开始时间
A

aldz

Unregistered / Unconfirmed
GUEST, unregistred user!
如把 74 1B 26 01 3B 替换为 EB 1B 26 01
 
用PE来读资源改比较保险吧。
 
把文件读入到内存中,修改后在存回去。
 
我想通过编程来解决,应该不会很难吧?
watter:你说的是不是这样
var
S: TmemoryStream;
buffer:Integer;
begin
buffer:=$45678901
S:=TmemoryStream.Create;
s.LoadFromFile('explorer.exe');
s.Write(buufer,1);
s.SaveToFile('eee.exe');
s.free;


 
基本上是这样的意思,不过要先找出需要替换的字节所在的位置,替换之,继续搜寻、替换
直到文件结束。
 
还请赐教!!!
 
最简单的方法是使用16进制编辑器来查找和替换。
如WinHex等。
 
To:有故事的人

没看到帖主下面的帖子吗?要的是用程序解决,并不是使用第三方软件解决…
 
我想关键是要如何查找到需要替换的十六进制代码,我把问题细化一下:
1.把EXE文件一次性读入字符串,用StrPos/ANSIPOS定位指针位置
2.写入$EB 1B 26 01
问题我是新手,应该用什么语句才能达到这些目的
 
To:aldz
此问题本身不够明确,因为对于EXE中的字符串的替换有两大类:
1)静态替换:用16/32位工具软件对其查找替换,或用编程的方法对其查找替换;
2)动态替换:该EXE文件运行时自动实现查找替换;
方式1)很容易实现;方式2)有一定难度。
toyzn2002@yahoo.com.cn
 
buffer:Integer;
Integer写上去占4字节,这句改为下面的类型后将只占一字节
buffer: shortint
 
后退
顶部