Windows XP日志文件格式分析
- 格式:doc
- 大小:38.00 KB
- 文档页数:9
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日志事件记录结构分析