RenX6 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 Windows XML事件日志(EVTX)单条日志清除系列文章的第一篇,侧重于介绍evtx日志文件的基础知识和删除单条日志的实现思路与实例 0x01 简介 本文将要介绍以下内容: evtx文件格式 删除单条日志的思路 删除单条日志的实例 0x02 基础知识:evtx文件格式 可参考的资料: https://github.com/williballenthin/python-evtx evtx文件是指Windows Vista之后用于保存系统日志信息的文件 evtx文件结构包含三部分: 文件标题 大块 尾随空值 注: 文件标题保存evtx文件基本信息,值得注意的是下一个记录标识符、块数量、文件标志和校验和 大块保存日志内容,包括具体每条日志的内容和校验和,值得注意的是最后事件记录号、最后事件记录标识符、最后事件记录数据偏移量和两个校验和 尾随空值为尾随空值,用于填充文件长度,内容任意,不会影响evtx文件的有效性 (1) file header 格式可参考: https://github。com/libyal/libevtx/blob/master/documentation/Windows XML事件日志(evtx).ascii文件# 2-文件头 (2) chunks 格式可参考: https://github。com/libyal/libevtx/blob/master/documentation/Windows XML事件日志(evtx).ascii文件# 3-组块 大块包含多个事件记录,1个事件记录对应一条日志信息 (3) Event Record 格式可参考: https://github。com/libyal/libevtx/blob/master/documentation/Windows XML事件日志(evtx).ascii文件# 32-事件-记录 事件记录的内容以二进制可扩展标记语言格式保存 二进制可扩展标记语言格式可参考: https://github。com/libyal/libevtx/blob/master/documentation/Windows XML事件日志(evtx).ascii文件# 4-二进制-xml 值得注意的是EventRecordID标签,用来表示日志的顺序号 实例演示: 1、通过Windows日志查看 查看事件日志,选中一条日志,选择详细信息-XML视图 如下图 2、通过python脚本查看 安装python-evtx: 点安装python-evtx 下载脚本: https://github。com/williballenthin/python-evtx/blob/master/scripts/evtx _ record _ structure。巴拉圭 命令如下: evtx _记录_结构。py系统。evtx 1915 回显如下: 2A 2A 00 00 38 01 00 00 7B 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.8.{. 00000010: 23 EB 07 A2 D4联邦预算D3 01 0F 01 01 00 0C 01 65 CE #..e. 00000020:1B C7 EE 0D 00 00 14 00 00 00 01 00 04 00 01 00.. 00000030: 04 00 02 00 06 00 02 00 06 00 02 00 06 00 08 00 .. 00000040: 15 00 08 00 11 00 00 00 00 00 04 00 08 00 04 00 .. 00000050:08 00 08 00 0A 00 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00.. 00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .. 00000070:00 00 00 00 00 00 00 00 8B 00 21 00 04 00 00 00 00 7C 1B..|. 00000080:00 40 00 00 00 00 00 00 80 80 23 EB 07 A2 D4 FB .@.#. 00000090:D3 01 D8 01 00 00 9C 07 00 00 7B 07 00 00 00 00..{. DC E1 34 6C 11 00..4l. 00 00 00 4E.普通.. 000000 c0:00 0E 00 0E 00 42 00 61 00 63 00 6B 00 67 00 72.英国航空公司 000000d 0:00 6F 00 75 00 6E 00 64 00 20 00 49 00 6E 00 74 . 000000 E0:00 65 00 6C 00 6C 00 69 00 67 00 65 00 6E 00 74 000000 F0:00 20 00 54 00 72 00 61 00 6E 00 73 00 66 00 65 .法国石油公司 00000100:00 72 00 20 00 53 00 65 00 72 00 76 00 69 00 63。 00000110:00 65 00 63 6B 28 57 D0 8F 4C 88 0E 00 00 00 42。CK(W.L.B 0000120: 00 49 00 54 00 53 00 2F. 00000130: 15 00 00 00 38 01 00 00 .8. 记录(absolute_offset=8776) 根节点(偏移量=0x18) 流开始节点(偏移量=0x18) TemplateInstanceNode(offset=0x1c,resident=False) 替换(偏移量=0x26) UnsignedByteTypeNode(offset=0x7a)-4 无符号字节模式(偏移量=0x 7b)-0 无符号类型代码(偏移量=0x 7c)-0 convertoldtypecode(偏移=0x7e) - 7036 无符号类型代码(偏移量=0x 80)-16384 十六进制64类型代码(偏移=0x82) -0x8080000000 螺纹类型节点(偏移=0x 8a)-2018-06-04 07:21:19.394281 空类型代码(偏移量=0x92) 无符号字类型代码(偏移量=0x 92)-472 无符号字类型代码(偏移量=0x 96)-1948 无符号qword类型代码(偏移量=0x 9 a)-1915 无符号bytetypemode(offset=0 xa 2)-0 空类型代码(偏移量=0xa3) 空类型代码(偏移量=0xa3) 空类型代码(偏移量=0xa3) 空类型代码(偏移量=0xa3) 空类型代码(偏移量=0xa3) 空类型代码(偏移量=0xa3) 空类型代码(偏移量=0xa3) bxmltypecode(offset=0 xa 3)- 根节点(偏移=0xa3) 流开始节点(偏移=0xa3) 模板实例模式(offset=0 xa 7,resident=False) 替代(偏置=0xb1) WstringTypeNode(offset=0xc5) -后台智能传输服务 这一个 WstringTypeNode(offset=0x113) -正在运行 无符号字类型代码(偏移量=0x 11 b)-14 二进制的类型代码(offset=0x 11 f)-qgbjaqauwavadaaaa= 703604000 x 80800000000000001915系统in-e8c6j 8 cn 50 obkground智能传输服务正在运行qgbjafqauwavadqaaaa= 0x03 删除单条日志的思路 Windows操作系统操作系统系统在解析日志文件时,通过事件记录的尺寸(大小)长度逐个读取每一条日志的内容 如果修改某条日志的长度,使长度覆盖下一条日志,那么Windows操作系统操作系统系统在解析时,就会跳过下一条日志,相当于下一条日志被隐藏 丹斯普里兹中的事件日志编辑(事件日志)就是这个思路,只修改了长度,没有删除日志内容 实现思路如下图 010-35001 注:美元 图片来自339博客。福克斯-它。com/2017/12/08/NSAs检测和恢复复盖的跟踪/ 所以如果恢复每条日志的正确日志长度,就能够恢复出被隐藏的日志,恢复工具可使用如下python(python语言)脚本: github街339号。com/fox-it/danderpritz-evtx 当然,如果以此为基础,把指定日志的内容清空,就能够实现真正的日志删除 为了保证修改后的日志文件能够被正确识别,还需要修改多个标志位,重新计算校验和 具体修改方法如下: 页眉文件中的下一个记录标识符值减一 重新计算页眉文件中的校验和 修改事件记录:重新计算待删除事件记录前后长度,更新后续事件记录的事件记录标识符 更新埃尔夫丘克先生,修改如下内容: 上次事件记录编号 上次事件记录标识符 上次事件记录数据偏移 事件记录校验和 校验和 0x04 删除单条日志的实例 测试文件:System.evtx 下载地址: github街339号。com/3 gstudit/event log dit-evtx-evolution/blob/master/system。evtx 文件包含四条日志,下面演示如何删除第四条日志 第四条日志内容如下图 010-3500002 事件记录ID(事件记录ID)为1915 1、File header中的Next record identifier值减1 页眉文件位于文件最开始的部分 下一个记录标识符的偏移为24小时(0x 18小时),长度8 对应测试文件System.evtx,如下图 下一个记录标识符为0x77Ch,即1916 减一后为1915年,即0x77Bh 2、重新计算File header中的Checksum 计算方法:前120字节做CRC32号文件运算,偏移为124(0x7Ch),长度四 修改下一个记录标识符后的内容如下图 010-3500004 前120字节的内容为456 c 6646696 c 6500000000000000000007 b 07000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 计算CRC32号文件可使用如下python(python语言)代码: 导入二进制文件 定义crc2hex(crc): 返回%(二进制文件crc32(二进制文件a2 b _ hex(CRC))0x fff) d=' 456 c 664666 c 6500000000000000000007 b 0700000000000013000000000000000000000000000000000000000000000000 000000000000000000 0000000000000 000000000000000 00000000000000000000000000 打印(crc2hex(d)) 输出结果ccc94756号文件 所以更新后的内容是56 47 C9 CC,如下图所示。 3、修改Event Record 搜索魔术字符串0x2A0x2A0x000x00以定位不同的eventrecords。 第四条事件记录的内容如下 长度为0x138h 事件标识符是0x77Bh。 第三条事件记录的内容如下 长度为0x480h 事件标识符是0x77Ah。 修改第三个事件记录的长度以覆盖第四个事件记录。 新长度为0x138h0x480h=0x5B8h。 由于删除了最后一个日志,因此不需要更新事件记录标识符(有两个位置)。 注: 有两个位置可以修改长度,分别是第三根圆木的长度和第四根圆木的尾部。 修改后,如下图所示 注: 该测试只修改了事件记录的长度,以后可以通过修复长度来恢复日志。 当然,您可以选择清除日志内容并永久删除它。 4、更新ElfChuk 搜索魔法字符串ElfChuk 注: 可能有多个elfchuk,需要找到对应的elf chuk。 测试文件System.evtx中只有一个ElfChuk 内容如下 0 最后一个事件记录号是0x4h。 最后一个事件记录标识符是0x77Bh。 最后一个事件记录数据偏移量是0x1248h。 事件校验和是0xD3D3DE43h。 校验和为0xEB4C47BFh。 需要进行以下修改: 最后一个事件记录号减1是0x3h。 最后一个事件记录标识符减1是0x77Ah。 最后一个事件记录数据偏移量是第三个事件记录相对于ElfChuk的偏移量长度,为0xDC8h。 Event records checksum是所有事件记录内容的CRC32校验和,包含三个日志内容。用python脚本计算后,结果是0xF92FEDB9h。 Checksum是ElfChuk中0-120和128-512的CRC32校验和,结果是0x3CE0BF8h。 更新后,内容如下 另存为新文件System2.evtx 下载地址: https://github.com/3gstudent/Eventlogedit-evtx-Evolution/blob/master/system 2 . evtx 注: 为了验证尾随空值,我将第四个日志之后的所有内容覆盖到0x41(字符A),这不会影响日志文件的有效性。 2.System2.evtx已成功识别,如下图所示 0x05 小结 介绍了删除单个日志的基本知识和实现思路。一个示例演示了如何修改evtx文件并隐藏最后一个日志。 下一篇文章将介绍如何编写一个程序来自动删除指定的日志。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子