-
-
[原创]PE文件编译时间戳
-
发表于:
2021-4-20 10:26
7626
-
在威胁情报研究与追踪中,PE文件的编译时间戳可以帮助我们获取一些额外的信息,如果要对编译时间戳进行了解,首先要对PE文件结构有一些了解。
要查看提取编译时间这些信息,已经有相当多的工具使用。不过,采用一些市面上的安全工具获取PE文件的编译时间戳时会存在“陷阱”。其中一些工具将时间戳显示为UTC格式,有些将它们本地化为使用者的时区(最终为本地时间),其实就会因为时区转换的问题而导致与真实时间相差几个小时,这里可以参考VirusTotal站点的案例,比如这个站点上都是以UTC+0作为当前页面显示时间,所以并不是纪录提交者的当前本地时间,假设刚刚凑巧提交者与站点所在的服务器位于同一时区(比如大家都在同一国家)时页面显示的就是真正的时间,所以就不可避免的产生了“误报”,这类误报其实对病毒分析研究基本影响不大,因为并没有超出达到几天的时间,可以适当地忽略。
UTC称为协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8,经常见到的就是东八区时间。
UTC时间:这套时间系统被应用于许多互联网和万维网的标准中,例如,网络时间协议就是协调世界时在互联网中使用的一种方式。
了解了以上的相关概念后,就回到利用工具获取时间的问题上。刚刚也提到了一些安全工具对于时间显示的标准不同,所以凡是遇到疑问需要查证与测试时,还是需要先找到最初源头的官方文档进行查询,避免一开始就弄错了方向。
根据PE结构文档手册,编译时间戳定义为:
日期和时间戳值,根据系统时钟,该值以自世界协调时间1970年1月1日午夜(00:00:00)以来经过的秒数表示。可以使用C runtime(CRT)time函数来打印时间戳。
提供的一种测试方法:
如果将PE文件内的时间戳字段值设置为全零后,利用安全工具读取显示的结果是1970-01-01 00:00:00,则当前使用的工具正在使用UTC时间。如果不是,那么使用的是本地时间。
快速测试表明:
DIE、IDA、Efd、PE Studio使用当地时间
PE Bear、PPEE、VirusTotal使用UTC时间
而经典的010 Editor编辑器获取的时间也为UTC格式,如下VirusTotal站点给出的PE头信息也使用的是UTC格式,非国内所处的UTC+8(东八区)。
接下来介绍下通过时间戳来进一步挖掘威胁情报的案例,相关资料来源于互联网,安天已经将此申请了专利,具体详情可以自行下载查阅。比如我们在威胁追踪以及APT研究挖掘过程中,如果运气好且利用的方法得当,假设获取了大量的相关攻击样本,此时数据分析处理的优势就得派上用场了。通过对大量捕获的相关攻击样本的自带的PE文件编译时间就可在一定程度上来定位攻击者所处的世界时区,从而去推断背后的攻击者或者组织所在的活动区域。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)