Commit b933bc98eea3aedced9baeaa17e616178c301a75

Authored by Philippe Lagadec
1 parent a136731b

olevba: improved auto-executable macros detection with regex

Showing 1 changed file with 7 additions and 4 deletions
oletools/olevba.py
@@ -746,13 +746,16 @@ def detect_autoexec(vba_code): @@ -746,13 +746,16 @@ def detect_autoexec(vba_code):
746 :param vba_code: str, VBA source code 746 :param vba_code: str, VBA source code
747 :return: list of str tuples (keyword, description) 747 :return: list of str tuples (keyword, description)
748 """ 748 """
749 - #TODO: use regex to find keywords with word boundaries 749 + #TODO: merge code with detect_suspicious
750 # case-insensitive search 750 # case-insensitive search
751 - vba_code = vba_code.lower() 751 + #vba_code = vba_code.lower()
752 results = [] 752 results = []
753 for description, keywords in AUTOEXEC_KEYWORDS.items(): 753 for description, keywords in AUTOEXEC_KEYWORDS.items():
754 for keyword in keywords: 754 for keyword in keywords:
755 - if keyword.lower() in vba_code: 755 + #TODO: if keyword is already a compiled regex, use it as-is
  756 + # search using regex to detect word boundaries:
  757 + if re.search(r'(?i)\b'+keyword+r'\b', vba_code):
  758 + #if keyword.lower() in vba_code:
756 results.append((keyword, description)) 759 results.append((keyword, description))
757 return results 760 return results
758 761
@@ -765,12 +768,12 @@ def detect_suspicious(vba_code): @@ -765,12 +768,12 @@ def detect_suspicious(vba_code):
765 :param vba_code: str, VBA source code 768 :param vba_code: str, VBA source code
766 :return: list of str tuples (keyword, description) 769 :return: list of str tuples (keyword, description)
767 """ 770 """
768 - #TODO: use regex to find keywords with word boundaries  
769 # case-insensitive search 771 # case-insensitive search
770 #vba_code = vba_code.lower() 772 #vba_code = vba_code.lower()
771 results = [] 773 results = []
772 for description, keywords in SUSPICIOUS_KEYWORDS.items(): 774 for description, keywords in SUSPICIOUS_KEYWORDS.items():
773 for keyword in keywords: 775 for keyword in keywords:
  776 + # search using regex to detect word boundaries:
774 if re.search(r'(?i)\b'+keyword+r'\b', vba_code): 777 if re.search(r'(?i)\b'+keyword+r'\b', vba_code):
775 #if keyword.lower() in vba_code: 778 #if keyword.lower() in vba_code:
776 results.append((keyword, description)) 779 results.append((keyword, description))