windows xp日志文件格式分析
日志文件是windows系统中一个比较特殊的文件,它记录着windows系统中所发生的一切,如各种系统服务的启动、运行、关闭等信论文联盟息。windows日志包括应用程序、安全、系统等几个部分,应用程序日志、安全日志和系统日志对应的文件名为、 。这些文件受到“event log(事件记录)”服务的保护只能被清空,但是不能删除某一条记录。 应用程序日志、安全日志、系统日志、dns日志等默认存放位置:%systemroot%\\system32\\config,默认文件大小512kb。 安全日志:%systemroot%\\system32\\config\\ 系统日志:%systemroot%\\system32\\config\\ 应用程序日志:%systemroot%\\system32\\config\\ 可以在注册表中修改这些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日志事件记录结构分析 windows msdn中日志事件记录的结构体数据类型如下: typedef struct _eventlogrecord { dword length; //该记录的大小 dword reserved; //固定值,总是(0x654c664c) dword recordnumber; //记录号,当前是第几条记录。 dword timegenerated;//时间代码,从1970年到现在的秒数 dword timewritten; //时间代码,从1970年到现在的秒数 dword eventid; //事件id号 word eventtype; //事件类型 word numstrings; //消息量,事件包含多少条消息。
转贴于论文联盟word eventcategory; //事件种类 word reservedflags; //事件的保留标记 dword closingrecordnumber; //事件的结束记录数 dword stringoffset; //事件消息的偏移量 dword usersidlength; //用户安全标识符大小,没有则为0 dword usersidoffset; //用户安全标识符的偏移量 dword datalength; //对事件进行详细描述的数据的长度 dword dataoffset; //对事件进行详细描述的数据的偏移量 } eventlogrecord, *peventlogrecord; 现在我们用winhex打开文件,以其中一个事件记录为例来分析事件记录的存储结构。 由文件头部分的内容可以看出这个日志文件有3条事件记录,因为currentrecordnumber值为4(0018h 04 00 00 00)。文件的总大小为(0020h 00 00 01 00)0x10000即64k,第一条事件记录从0030h处开始,大小为对212(0xd4)个字节,我们就以这条记录为例来分析。 0030h d4 00 00 00 length 该记录的长度为212个字节 0034h 4c 66 4c 65 reserved 保留值 0038h 01 00 00 00 recordnumber记录号,当前是第1条记录 003ch d4 44 9d 4c timegenerated 时间代码 0040h d5 44 9d 4c timewritten 时间代码 0044h fb 43 00 40 eventid 事件id号为17403(0x43fb) 0048h 04 00 01 00 eventtype 事件类型的代码有1表示错误,2表示警告,4表示信息,8成功审核等,这里的代码为4,表示信息。高位字是消息量numstrings 004ch 02 00 00 00 eventcategory 事件类别为2,高位字是reservedflags事件的保留标记 0050h 00 00 00 00 closingrecordnumber事件的结束记录数其值为0 0054h 7a 00 00 00 stringoffset事件消息的偏移量(指本事件记录内的偏移量,本记录开始于30h,所以事件消息的文件内偏移量应为aa) 0058h 00 00 00 00 usersidlength 用户安全标识符的大小,如果没有则为0 005ch 7a 00 00 00 usersidoffset 用户安全标识符的偏移量 0060h 46 00 00 00 datalength 对事件进行描述的数据长度 0064h 86 00 00 00 dataoffset 对事件描述的数据偏移量 0068h—0087h的内容是信息来源,每个字母占用两个字节空间 0088h—00a7h的内容是计算机名 00a8h—00b5h服务闲置时间45856秒 00b6h—00fbh事件的描述数据大小为0x46字节 00fch 00 00 00 00描述数据结束 0100h d4 00 00 00 事件记录的长度,事件记录内容结束。 3手工删除修改事件记录方法实现 对windowsxp日志的文件头,文件尾和单条事件记录的结构和存储方式都已经了解透彻了,根据日志文件的结构来删除记录。在事件服务(eventlog)已启动的情况下,由于系统对日志文件进行了保护,一般情况下是无法修改这些论文联盟文件的,我们先把日志文件备份出来对某些记录进行删除,然后用修改后的日志文件覆盖原有的日志文件来达到日志内容修改的目的。了解了日志文件的结构及系统的检查验证机制后理论上是可以随便更改事件记录内容的,但是由于涉及到很多的偏移量值,有的东西修改起来比较麻烦。 4结束语 本文详尽描述了windows xp日志文件的结构,日志查看器在打开日志文件时的文件完整性验证机制,在掌握了日志文件结构及验证机制的基础上,借助winhex对日志事件记录进行删除及修改的具体方法。该方法能够自由删除某一条或者几条系统日志记录,而且不留下痕迹,但是该方法仍然不能绕过系统对当前日志文件的保护。 转贴于论文联盟
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。