
    Ziu:                        S r SrSSKrSSKrSSKrSSKr\R                  R                  \R                  R                  \R                  R                  \
5      5      5      r\R                  R                  \R                  R                  \S5      5      r\\R                  ;  a  \R                  R                  S\5        SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  \R2                  " S
5      rSrS\-  r\R:                  " S5      rSr\R:                  " S\-   5      r Sr!\R:                  " S\!-   5      r" " S S\#5      r$ " S S\#5      r% " S S\#5      r& " S S\#5      r' " S S\#5      r( " S S\#5      r)S r*\+S:X  a  \*" 5         gg) a  
mraptor.py - MacroRaptor

MacroRaptor is a script to parse OLE and OpenXML files such as MS Office
documents (e.g. Word, Excel), to detect malicious macros.

Supported formats:
- Word 97-2003 (.doc, .dot), Word 2007+ (.docm, .dotm)
- Excel 97-2003 (.xls), Excel 2007+ (.xlsm, .xlsb)
- PowerPoint 97-2003 (.ppt), PowerPoint 2007+ (.pptm, .ppsm)
- Word/PowerPoint 2007+ XML (aka Flat OPC)
- Word 2003 XML (.xml)
- Word/Excel Single File Web Page / MHTML (.mht)
- Publisher (.pub)

Author: Philippe Lagadec - http://www.decalage.info
License: BSD, see source code or documentation

MacroRaptor is part of the python-oletools package:
http://www.decalage.info/python/oletools
z0.56.2    Nz..)xglob)tablestream)olevba)TYPE2TAG)
log_helpermraptorz,https://github.com/decalage2/oletools/issueszPlease report this issue on %sa  (?i)\b(?:Auto(?:Exec|_?Open|_?Close|Exit|New)|Document(?:_?Open|_Close|_?BeforeClose|Change|_New)|NewDocument|Workbook(?:_Open|_Activate|_Close|_BeforeClose)|\w+_(?:Painted|Painting|GotFocus|LostFocus|MouseHover|Layout|Click|Change|Resize|BeforeNavigate2|BeforeScriptExecute|DocumentComplete|DownloadBegin|DownloadComplete|FileDownload|NavigateComplete2|NavigateError|ProgressChange|PropertyChange|SetSecureLockIcon|StatusTextChange|TitleChange|MouseMove|MouseEnter|MouseLeave|OnConnecting))|Auto_Ope\bz;(?:\bOpen\b[^\n]+\b(?:Write|Append|Binary|Output|Random)\b)z(?i)\b(?:FileCopy|CopyFile|Kill|CreateTextFile|VirtualAlloc|RtlMoveMemory|URLDownloadToFileA?|AltStartupPath|WriteProcessMemory|ADODB\.Stream|WriteText|SaveToFile|SaveAs|SaveAsRTF|FileSaveAs|MkDir|RmDir|SaveSetting|SetAttr)\b|z(?:\bDeclare\b[^\n]+\bLib\b)z(?i)\b(?:Shell|CreateObject|GetObject|SendKeys|RUN|CALL|MacScript|FollowHyperlink|CreateThread|ShellExecuteA?|ExecuteExcel4Macro|EXEC|REGISTER|SetTimer)\b|c                        \ rS rSrSrSrSrSrg)Result_NoMacro   r   greenzNo Macro N__name__
__module____qualname____firstlineno__	exit_codecolorname__static_attributes__r       j/var/www/eduai.edurigo.com/question_generate/ques_gen_env/lib/python3.13/site-packages/oletools/mraptor.pyr
   r
      s    IEDr   r
   c                        \ rS rSrSrSrSrSrg)Result_NotMSOffice      r   zNot MS Officer   Nr   r   r   r   r   r      s    IEDr   r   c                        \ rS rSrSrSrSrSrg)Result_MacroOK      cyanzMacro OKr   Nr   r   r   r   r   r      s    IEDr   r   c                        \ rS rSrSrSrSrSrg)Result_Error   
   yellowERRORr   Nr   r   r   r   r#   r#      s    IEDr   r#   c                        \ rS rSrSrSrSrSrg)Result_Suspicious      red
SUSPICIOUSr   Nr   r   r   r   r)   r)      s    IEDr   r)   c                   *    \ rS rSrSrS rS rS rSrg)MacroRaptor   z;
class to scan VBA macro code to detect if it is malicious
c                     [         R                  " U5      U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        / U l        g)zO
MacroRaptor constructor
:param vba_code: string containing the VBA macro code
F N)r   vba_collapse_long_linesvba_codeautoexecwriteexecuteflags
suspiciousautoexec_matchwrite_matchexecute_matchmatches)selfr4   s     r   __init__MacroRaptor.__init__   sX     66x@

"!r   c                    [         R                  U R                  5      nUbE  SU l        UR	                  5       U l        U R                  R                  UR	                  5       5        [        R                  U R                  5      nUbE  SU l	        UR	                  5       U l
        U R                  R                  UR	                  5       5        [        R                  U R                  5      nUbE  SU l        UR	                  5       U l        U R                  R                  UR	                  5       5        U R                  (       a+  U R                  (       d  U R                  (       a  SU l        ggg)z?
Scan the VBA macro code to detect if it is malicious
:return:
NT)re_autoexecsearchr4   r5   groupr:   r=   appendre_writer6   r;   
re_executer7   r<   r9   )r>   ms     r   scanMacroRaptor.scan   s    
 t}}-= DM"#'')DLL	*OODMM*=DJ wwyDLL	*dmm,=DL!"DLL	*==dlldjj"DO /9=r   c                     SnXR                   (       a  SOS-  nXR                  (       a  SOS-  nXR                  (       a  S-  nU$ S-  nU$ )Nr2   A-WX)r5   r6   r7   )r>   r8   s     r   	get_flagsMacroRaptor.get_flags   sI    3.

+- +.-r   )
r5   r:   r7   r<   r8   r=   r9   r4   r6   r;   N)	r   r   r   r   __doc__r?   rI   rP   r   r   r   r   r/   r/      s    "#.r   r/   c            
      
   Sn Sn[         R                  " US9nUR                  SSSSS9  UR                  S	S
SSSSS9  UR                  SSSSSSS9  UR                  SSSSU SS9  UR                  SSSSSS9  UR                  5       u  p4[	        U5      S:X  a  [        S [        -  5        [        S![        -  5        [        [        5        UR                  5         [        S"5        [        [        [        [        [        4 H'  n[        S#UR                  UR                   4-  5        M)     ["        R$                  " 5         [        S [        -  5        [        S![        -  5        [&        R(                  " UR*                  S$9  [,        R(                  " 5         [.        R0                  " [.        R2                  / S%Q/ S&QS'9nS(nSn[4        R6                  " XCR8                  UR:                  UR<                  S)9 GH  u  pnU	(       a  U
R?                  S*5      (       a  M&  U	(       a	  U
< S+U	< 3OU
n[A        U[B        5      (       a_  [        nURE                  UR                   S,S,U/URF                  SSS/S-9  URE                  S,S,S,[I        U5      /SSSURF                  /S-9  GO;S.n [,        RJ                  " XU	S/9n[L        URN                     nURQ                  5       (       a  S,n URS                  5       n[U        U5      nURW                  5         URX                  (       a  [        nO[        nURE                  UR                   UR[                  5       X/URF                  SSS/S-9  UR\                  (       a3  UR^                  (       a"  URE                  S,S,S,S0UR\                  -  /5        O1[        nURE                  UR                   S,X/URF                  SSS/S-9  UR                  U:  d  GM  UnUR                  nGM     [&        R`                  " 5         [        S,5        [        S15        [        S2XxR                   4-  5        ["        R$                  " U5        g! [B         ah  n[        nURE                  UR                   S,X/URF                  SSS/S-9  URE                  S,S,S,[I        U5      /SSSURF                  /S-9   SnAGM  SnAff = f! [B         az  n[        nURE                  UR                   S,[L        URN                     U/URF                  SSS/S-9  URE                  S,S,S,[I        U5      /SSSURF                  /S-9   SnAGM\  SnAff = f)3z@
Main function, called when olevba is run from the command line
warningz3usage: mraptor [options] <filename> [filename2 ...])usagez-r
store_true	recursivez)find files recursively in subdirectories.)actiondesthelpz-zz--zipzip_passwordstrNzhif the file is a zip archive, open all files from it, using the provided password (requires Python 2.6+))rY   typedefaultrZ   z-fz
--zipfname	zip_fname*zoif the file is a zip archive, file(s) to be opened within the zip. Wildcards * and ? are supported. (default:*)z-lz
--loglevelloglevelstorezBlogging level debug/info/warning/error/critical (default=%default))rY   rX   r^   rZ   z-mz	--matchesshow_matcheszShow matched strings.r   z5MacroRaptor %s - http://decalage.info/python/oletoolsz4This is work in progress, please report issues at %sz7
An exit code is returned based on the analysis result:z	 - %d: %s)level)ResultFlagsTypeFile)r%         8   )style
header_rowcolumn_width)rW   r[   r_   /z in r2   )colorsz???)filenamedata	containerzMatches: %rz%Flags: A=AutoExec, W=Write, X=ExecutezExit code: %d - %s)1optparseOptionParser
add_option
parse_argslenprint__version__
URL_ISSUESrR   
print_helpr
   r   r   r#   r)   r   r   sysexitr   enable_loggingra   r   r   TableStreamTableStyleSlimr   
iter_filesrW   r[   r_   endswith
isinstance	Exception	write_rowr   r\   
VBA_Parserr   r]   detect_vba_macrosget_vba_code_all_modulesr/   rI   r9   rP   r=   rc   end_logging)DEFAULT_LOG_LEVELrU   parseroptionsargsresulttexitcodeglobal_resultrt   rr   rs   	full_namefiletype
vba_parserevba_code_all_modulesr   s                     r   mainr      s    "AE""/F
d<kF  H
dG.ud F  G
dL{PS M  N
dLz'Sd!e  g
dK>2  4
 '')OW 4yA~ESTDzQRgHI%'9><YjkF+!1!16;; ??@ l
 

AK
OP	
@:
MNG$4$45
k&@&@:'	)A HM%*%5%5dFWFWCJCWCWcjctct&v!	T **3//:C(I6	 dI&&!FKKb"i8 &dD$?  AKKRSY/ $dD&,,?  A H#..W`a
#JOO4 ++--')$	+5+N+N+P( &&:;%%.F+FV[['*;*;*=xS$*LL$d#C  E??w';';KKR]W__-L MN'V[["hB$*LL$d#C  Eh&"M''H{&v~ 	"I	
12	
(,>,>!?
?@HHXW   &V[["hB$*LL$d#C  ERRQ0$($fll#C  E ! )FKKb(:??2KY W(.dD$'G   IKKRSV 4(,dD&,,'G   Is2   *(Q#*S#
S-ASS
U"A.UU__main__),rR   r{   r~   ru   reospathnormpathabspathdirname__file___thismodule_dirjoin_parent_dirinsertoletools.thirdparty.xglobr   oletools.thirdparty.tablestreamr   oletoolsr   oletools.olevbar   oletools.common.log_helperr   get_or_create_silent_loggerlogr|   
MSG_ISSUEScompilerB   RE_OPEN_WRITErF   RE_DECLARE_LIBrG   objectr
   r   r   r#   r)   r/   r   r   r   r   r   <module>r      s  @    ''""277??277??83L#MNggrww||OTBCchhHHOOA{# + 7  $ 1
 ,,Y7 <
-
:
 jj M N O:: ln{| }
 1ZZ mo}~ 
V  V 6  1& 1ltl zF r   