注册 登录
编程论坛 VB6论坛

如何用VB准确找到TimeDateStamp时间戳所在的偏移位置

yuma 发布于 2022-08-16 17:46, 1381 次点击
不同的EXE,时间戳的偏移位置居然不一样。
我想把EXE直接转换成十六进制代码,通过偏移位置修改好十六进制代码(TimeDateStamp时间戳)后,再把十六进制代码还原为EXE,达到修改的目的。(此步已编程实现)

问题是:如何能确定不同的EXE  TimeDateStamp时间戳 十六进制代码的偏移位置?

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
6 回复
#2
风吹过b2022-08-16 19:41
你只会傻傻的读吗?

PE 类型 的 EXE 结构(百度来的)为:

1、DOS头,64个字节,关注前4个字节和最后4个字节。前4个字节是文件类型标志,最后4个字节(e_lfanew)是 PE头的偏移量。
2、PE头,
前面三字段分别为:(有部分是C++ 的描述,将就的看吧)
PE头标志,4字节
WORD Machine;//运行平台
WORD NumberOfSections;//区块表的个数
DWORD TimeDataStamp;//文件创建时间,是从1970年至今的秒数

TimeDataStamp ,才是你要的。
那么这个字段在什么位置呢?
在 e_lfanew (+60H)这个位置的值 +4 +2 +2 的位置

e_lfanew (+60H) 这个位置是什么,+60H 到 +63H,4个字节,是 PE头的位置,相对文件的偏移量,
+4 是 PE标志
+2 是 Machine,这是integer 类型
+2 是 NumberOfSections
然后就是 TimeDataStamp

DOS头 到 PE头 之间是 DOS代码,DOS代码 一般是编译器给出的,但也可以你想写多长就写多长,所以PE头的位置不固定,依靠 e_lfanew 指出,而 e_lfanew 就是DOS头的最后4个字节。





[此贴子已经被作者于2022-8-16 19:54编辑过]

#3
风吹过b2022-08-16 19:45
以下数据都是按 16进制给出,除非特别注明
按你 1.exe
e_lfanew = 00 00 00 B8
e_lfanew +4 +2 +2 =00 00 00 C0

按你 2.exe
e_lfanew = 00 00 00 80
e_lfanew +4 +2 +2 =00 00 00 88
 
你看看对得上了吗?
#4
yuma2022-08-16 20:01
很复杂,知道了具体结构,感染EXE都是很容易的事。
#5
风吹过b2022-08-16 22:45
对了,你WIN10 系统,还是笔记本,装的好像是 360 杀毒,不卡吗?
WIN10,自带杀毒软件的。

然后看到五笔
#6
yuma2022-08-17 05:08
不卡,不同时开多个虚拟机不会卡。

HP笔记本,Win10系统
#7
yuma2022-08-17 20:18
以下是引用风吹过b在2022-8-16 19:45:31的发言:

以下数据都是按 16进制给出,除非特别注明
按你 1.exe
e_lfanew = 00 00 00 B8
e_lfanew +4 +2 +2 =00 00 00 C0

按你 2.exe
e_lfanew = 00 00 00 80
e_lfanew +4 +2 +2 =00 00 00 88
 
你看看对得上了吗?



你猜对了。

只有本站会员才能查看附件,请 登录
1