Windows XP日志文件格式分析

  • 格式:doc
  • 大小:38.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows XP日志文件格式分析

摘要:系统日志文件记录着系统中特定事件的相关活动信息,系统日志文件是计算机取证最重要的信息来源。Windows系统对日志文件进行保护不允许对日志文件进行修改,只允许对日志进行清空操作以保证日志文件的完整性。详尽描述了日志文件的格式,在此基础上找到了手工修改和删除日志记录的方法,并在Windows XP SP3下得到了验证。

关键词:计算机取证;事件日志;系统安全文件格式;Windows XP

日志文件是Windows系统中一个比较特殊的文件,它记录着Windows系统中所发生的一切,如各种系统服务的启动、运行、关闭等信息。Windows日志包括应用程序、安全、系统等几个部分,应用程序日志、安全日志和系统日志对应的文件名为AppEvent.evt、

SysEvent.evt。这些文件受到“Event Log(事件记录)”服务的保护只能被清空,但是不能删除某一条记录。

应用程序日志、安全日志、系统日志、DNS日志等默认存放位置:%systemroot%\\system32\\config,默认文件大小512KB。

安全日志:%systemroot%\\system32\\config\\SecEvent.EVT

系统日志:%systemroot%\\system32\\config\\SysEvent.EVT

应用程序日志:%systemroot%\\system32\\config\\AppEvent.EVT

可以在注册表中修改这些LOG文件的默认存放位置:

HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\ \Eventlog

2日志文件的数据结构

2.1日志文件头结构分析

Windows MSDN中日志文件头的结构体数据类型如下:typedef struct _EVENTLOGHEADER {

ULONG HeaderSize; //文件头的大小,是固定值(0x30)

ULONG Signature; //特定码值,总是(0x654c664c)

ULONG MajorVersion; //主版本号,总是1

ULONG MinorVersion; //次版本号,总是1

ULONG StartOffset; //第一条(最早)日志记录的偏移量

ULONG EndOffset; //文件尾的文件内偏移量

ULONG CurrentRecordNumber; //将要产生记录的记录号ULONG OldestRecordNumber;//第一条(最早)记录的记录号

ULONG MaxSize; //日志文件的总大小,这里是64k (0x10000)

ULONG Flags; //日志文件的状态标志

ULONG Retention; //文件创建时的保留值,与注册表关联。

ULONG EndHeaderSize; //文件头的大小,文件头结束。

}EVENTLOGHEADER, *PEVENTLOGHEADER

为了更为直观地展现出日志文件头的储存结构我们用winhex打开一个日志记录为空的日志文件,没有事件记录,只有文件头和文件尾。如图1所示。

可以看到前三行共48个字节是文件头部分,接下来的40个字节是文件尾部分,之间没有事件记录。文件头部分其内容和日志文件头结构体相一致。在这里由于日志文件的内容是空的,所以StartOffset(第一条(最早)日志记录的文件内偏移量)和EndOffset(文件尾的文件内偏移量)相同都是0x30。这是一个空日志文件,由于没有事件记录所以OldestRecordNumber(第一条(最早)日志记录的记录号)为00 00 00 00。

图1文件头和文件尾

2.2日志文件尾结构分析

Windows MSDN中日志文件尾的结构体数据类型如下:

typedef struct _EVENTLOGEOF {

ULONG RecordSizeBeginning;//文件尾大小,固定值(0x28)

ULONG One; //标识符,总是(0x11111111)

ULONG Two; //标识符,总是(0x22222222)

ULONG Three; //标识符,总是(0x33333333)

ULONG Four; //标识符,总是(0x44444444)

ULONG BeginRecord; //第一条(最早)日志记录的偏移量

ULONG EndRecord; //将要产生新的一条记录的偏移量,即当前文件尾的偏移量

ULONG CurrentRecordNumber; //将要产生的记录的记录号

ULONG OldestRecordNumber; //第一条(最早)日志记录的记录号,如果事件日志为空时这里的值是0

ULONG RecordSizeEnd; //文件尾大小,是固定值(0x28)} EVENTLOGEOF, *PEVENTLOGEOF;

在图1中所示的日志文件,是把日志里的事件记录清空后得到的空日志文件,所以文件尾中的OldestRecordNumber值是1而不是0,EndRecord值0x f4 71 05 00和CurrentRecordNumber值0x 74 06 00 00都是日志事件记录清空前的值,系统并没有将其立即更新,而是等到再写入新事件记录时再更新。如果清空日志之前再产生一条记录的话,那么它的文件内偏移量将是0x f4 71 05 00记录号将是0x 74 06 00 00,即第1652个记录(0x674=1652)。

2.3日志事件记录结构分析