这个问题在这里已有答案:
我有一个XML文件,其中包含通常与勒索软件和恶意软件相关的文件名和文件扩展名。
使用Python,我想解析“Pattern Value”以简单地打印“Pattern Value”中包含的值。目标是输出到一个简单的文本文件,每行显示一个文件名或文件扩展名。
我试图在Notepad ++中使用宏,但这是一个失败。我是一个Python noob,我想用Python完成这个
以下是XML文件:
<?xml version="1.0" ?>
<Root >
<Header DatabaseVersion = '2.0' ></Header>
<QuotaTemplates ></QuotaTemplates>
<DatascreenTemplates ></DatascreenTemplates>
<FileGroups >
<FileGroup Name = 'Anti-Ransomware%sFile%sGroups' Id = '{367CFFB7-DDED-4AA8-8E17-203B6B97F411}' Description = '' >
<Members >
<Pattern PatternValue = '!!%sRETURN%sFILES%s!!.txt' ></Pattern>
<Pattern PatternValue = '!!!%sHOW%sTO%sDECRYPT%sFILES%s!!!.txt' ></Pattern>
<Pattern PatternValue = '!!!%sREAD%sTHIS%s-%sIMPORTANT%s!!!.txt' ></Pattern>
<Pattern PatternValue = '!!!!!ATENÇÃO!!!!!.html' ></Pattern>
<Pattern PatternValue = '!!!!!SAVE%sYOUR%sFILES!!!!.txt' ></Pattern>
<Pattern PatternValue = '!!!-WARNING-!!!.html' ></Pattern>
<Pattern PatternValue = '!!!-WARNING-!!!.txt' ></Pattern>
<Pattern PatternValue = '!!!GetBackData!!!.txt' ></Pattern>
<Pattern PatternValue = '!!!README!!!*.rtf' ></Pattern>
<Pattern PatternValue = '!!!READ_TO_UNLOCK!!!.TXT' ></Pattern>
<Pattern PatternValue = '!!!SAVE%sYOUR%sFILES!.bmp' ></Pattern>
<Pattern PatternValue = '!##%sDECRYPT%sFILES%s##!.txt' ></Pattern>
<Pattern PatternValue = '!#_DECRYPT_#!.inf' ></Pattern>
<Pattern PatternValue = '!DMALOCK3.0*' ></Pattern>
<Pattern PatternValue = '!Decrypt-All-Files-*.txt' ></Pattern>
<Pattern PatternValue = '!Please%sRead%sMe!.txt' ></Pattern>
<Pattern PatternValue = '!READ.htm' ></Pattern>
<Pattern PatternValue = '!Recovery_*.html' ></Pattern>
<Pattern PatternValue = '!Recovery_*.txt' ></Pattern>
<etc.../>
</Members>
</FileGroup>
</FileGroups>
</Root>
同样,目标是在新行上的文本文件中输出每个文件名/文件扩展名。例如
test.malware
test.ransomware
test.virus
etc
etc
etc
提前感谢您的协助
python的标准xml解析器通常是xml.etree.ElementTree
库。
基本用法是首先解析你的xml,如果你已经以某种其他方式读取了文件,那么可以从文件名或字符串中完成(或者以某种其他方式生成字符串,即:从端口读取等)。
import xml.etree.ElementTree as ET
tree = ET.parse('myxmlfile.xml')
那么你有很多选择如何找到感兴趣的元素,但我建议一些内置的搜索工具,如ElementTree.iterfind()
for element in tree.iterfind('Pattern'):
print(element.attrib)
根据结构的不同,此搜索可能不够具有选择性,但您可以先找到所需的部分(文件组的成员或非成员等),然后从那里执行搜索。