2012-08-15 61 views
1

我正在嘗試編寫一個py腳本來解析regshot文件,其中包含註冊表添加和修改等項目,並使用已知良好註冊表的白名單來解析它,以查找任何不同的註冊表。然後將這些不同的以與它們在regshot .txt文件中顯示的確切形式相對應的文本文件。python解析文件到文件和輸出文件

例如:

HKLM \ SOFTWARE \項目建立在微軟\的Windows \ CurrentVersion \運行\ blahblah

我該怎麼辦呢?

我不知道從哪裏開始,如果我應該使用正則表達式。

+0

什麼是「良好」註冊表?如果你的意思是以「hklm」開頭,你可以使用str類型的* startswith *方法。如果一個「良好的註冊表」以「blahblah」結尾,那麼... *以**結尾。如果它是「currentversion」,你可以在*中使用*(檢查http://docs.python.org/library/stdtypes.html#string-methods)否則,你可能不得不使用正則表達式 – BorrajaX 2012-08-15 23:05:57

+2

我會建議不要假設這裏的每個人都瞭解你的源數據格式和目標,並建議你包含一些你正在做的事情的例子。 – jdi 2012-08-15 23:24:26

+0

通過regshot你的意思是這個程序的輸出? http://sourceforge.net/projects/regshot/ – 2012-08-16 05:45:25

回答

0

如果您的「已知良好註冊表」的定義包含可表達爲正則表達式的註冊表項的類,則使用正則表達式,例如:與「hklm \ software」下包含「currentversion」的所有註冊表項匹配的registry_entry \ micrsoft \「可以定義爲

re.match('^hklm\software\micrsoft\[^\\]*\currentversion', registry_entry) 

如果您只需要匹配子字符串,則不需要正則表達式。在這種情況下,一個簡單的「如果x在Y」會做,例如:

if 'hklm\software\micrsoft\' in registry_entry 

但是,如果你的「已知良好註冊表」簡直是特定的註冊表項的列表,然後更簡單的比賽將例如:

registry_entries = [r'hklm\software\micrsoft\windows\currentversion\run\blahblah', r'hklm\software\micrsoft\windows\currentversion\skip\blahblah'] 
known_good_registries = [r'hklm\software\micrsoft\windows\currentversion\run\blahblah', r'hklm\software\micrsoft\windows\currentversion\jump\blahblah'] 

for entry in registry_entries: 
    match = False 
    if entry in known_good_registries: 
     match = True 
    if not match: 
     print 'registry entry not in known good list: ', entry 
+0

一套在這裏可能會更有效率。 – jdi 2012-08-16 00:56:02

+0

好吧,所以我可以將它匹配到註冊表的一部分,以切出不重要的東西,如果有3次運行 – 2012-08-16 12:47:19