Mpj^xdZddlZGddeZGddeZGddeZGd d eZGd d eZGd deZ GddeZ GddeZ GddeZ GddeZ GddeZGddeZdZdZdZdZdZd Zd!Zd"Zd#Zd$Zd%Zd&Zd'Zd(Zd)Zd*Zy)+a6 oleform.py oleform is a python module to parse VBA forms in Microsoft Office files. Authors: see https://github.com/decalage2/oletools/commits/master/oletools/oleform.py License: BSD, see source code or documentation oleform is part of the python-oletools package: http://www.decalage.info/python/oletools Nc eZdZy)OleFormParsingErrorN)__name__ __module__ __qualname__^/mnt/ssd/data/Dropbox/adrian/scripts/msg_venv/lib/python3.12/site-packages/oletools/oleform.pyrr0sr rc0eZdZdZdZdZdZdZdZy)Maskcpt|jDcgc] }|d|zz|z c}|_ycc}w)N)range_size_val)selfvalis r __init__z Mask.__init__4s-05djj0AB1cQTlQ&B Bs3c^djfdtjDS)Nz, c3\K|]#}j|sj|%ywN)r_names).0rrs r zMask.__str__..8s$SAdiiPQlQSs,,)joinrrrs`r __str__z Mask.__str__7s!yyStzz1BSSSr cR|j|jj|Srrrindex)rnames r __getattr__zMask.__getattr__:s yy**4011r c|jSr)sizers r __len__z Mask.__len__=s yyr cR|j|jj|Srr )rkeys r __getitem__zMask.__getitem__@s yy**3/00r cF|D]\}}||s |j|yr)read)rstreampropsr"r%s r consumez Mask.consumeCs(! "LT4Dz D! "r N) rrrrrr#r&r)r.rr r r r 3s"CT21"r r ceZdZdZdZgdZy) FormPropMaskz"FormPropMask: [MS-OFORMS] 2.2.10.2)Unused1 fBackColor fForeColorfNextAvailableID Unused2_0 Unused2_1fBooleanPropertiesr8 fMousePointer fScrollBarsfDisplayedSize fLogicalSizefScrollPosition fGroupCntReserved fMouseIconfCyclefSpecialEffect fBorderColorfCaptionfFontfPicturefZoomfPictureAlignmentfPictureTilingfPictureSizeMode fShapeCookie fDrawBufferNrrr__doc__rrrr r r0r0Hs, E-Fr r0ceZdZdZdZgdZy) SitePropMaskz%SitePropMask: [MS-OFORMS] 2.2.10.12.2)fNamefTagfIDfHelpContextID fBitFlagsfObjectStreamSize fTabIndexfClsidCacheIndex fPositionfGroupIDr2fControlTipTextfRuntimeLicKeyfControlSource fRowSourceNrMrr r rPrPRs/ ESFr rPceZdZdZdZgdZy)MorphDataPropMaskz&MorphDataPropMask: [MS-OFORMS] 2.2.5.2!)!fVariousPropertyBitsr3r4 fMaxLength fBorderStyler: fDisplayStyler9fSize fPasswordChar fListWidth fBoundColumn fTextColumn fColumnCount fListRows fcColumnInfo fMatchEntry fListStylefShowDropButtonWhen UnusedBits1fDropButtonStyle fMultiSelectfValuerDfPicturePositionrCrBr@rF fAccelerator UnusedBits2r? fGroupNameNrMrr r raraYs0 E7Fr raceZdZdZdZgdZy) ImagePropMaskz"ImagePropMask: [MS-OFORMS] 2.2.3.2rQ) UnusedBits1_1 UnusedBits1_2 fAutoSizerCr3rer9rJrBrgrFrHrIrcr@NrMrr r r{r{ds, EFr r{ceZdZdZdZgdZy)CommandButtonPropMaskz*CommandButtonPropMask: [MS-OFORMS] 2.2.1.2 ) r4r3rcrDrvrgr9rFrwfTakeFocusOnClickr@NrMrr r rrls4 EFr rceZdZdZdZgdZy)SpinButtonPropMaskz'SpinButtonPropMask: [MS-OFORMS] 2.2.8.2rQ)r4r3rcrgrrfMinfMaxrZ fPrevEnabled fNextEnabled fSmallChange fOrientationfDelayr@r9NrMrr r rrss1 EGFr rceZdZdZdZgdZy)TabStripPropMaskz%TabStripPropMask: [MS-OFORMS] 2.2.9.2) fListIndexr3r4r2rgfItemsr9Unused2fTabOrientation fTabStyle fMultiRowfTabFixedWidthfTabFixedHeight fTooltipsUnused3 fTipStringsUnused4fNamesrc fNewVersionfTabsAllocatedfTagsfTabDatarwr@NrMrr r rrzs/ EAFr rceZdZdZdZgdZy) LabelPropMaskz"LabelPropMask: [MS-OFORMS] 2.2.4.2 ) r4r3rcrDrvrgr9rCrerBrFrwr@NrMrr r rrs, EJFr rceZdZdZdZgdZy)ScrollBarPropMaskz&ScrollBarPropMask: [MS-OFORMS] 2.2.7.2)r4r3rcrgr9rrrZrrrrr fLargeChangerfProportionalThumbrr@NrMrr r rrs0 E&Fr rcteZdZdZedZdZddZdZdZ dZ dZ d Z d Z d Zd Zdd ZdZdZy)ExtendedStreamcXd|_g|_||_||_d|_d|_y)NrF)_pos_jumps_stream_path_padding _pad_start)rr,paths r rzExtendedStream.__init__s,     r c6|j|}|||Sr) openstream)clsole_filerr,s r openzExtendedStream.opens$$T*64  r cb|xj|z c_|jj|Sr)rrr+rr%s r _readzExtendedStream._reads% T ||  &&r cV|j|z |z}|r|j||z yyr)rr)rstartr%offsets r _padzExtendedStream._pads-))e#t+  JJtf} % r ct|jr|j|j||j|Sr)rrrrrs r r+zExtendedStream.reads* == IIdoot ,zz$r c0d|j|ff|_|S)Njumpr _next_jumprs r will_jump_tozExtendedStream.will_jump_tos!DIIt#45 r c,d|jf|_|S)Npadrrs r will_padzExtendedStream.will_pads $)), r ctd|j|jff|_d|_|j|_|S)NpaddedT)rrrrrs r padded_structzExtendedStream.padded_structs2#dmmT__%EF )) r cx|jsJ|jj|jd|_yr)rrappendrs r __enter__zExtendedStream.__enter__s+ 4??+r c||jj\}}|dk(rO|\}}|j|z }||kDr!|jdj |||j ||z y|dk(r|j |y|dk(r/|\} } |j |j| |_| |_yyy)Nrz#Bad jump: too much read ({0} > {1})rr) rpopr raise_errorformatr+rrr) rexc_type exc_value traceback jump_typedatarr% consummed prev_paddingprev_pad_starts r __exit__zExtendedStream.__exit__s   $  1 YF" $  II- t#$$%J%Q%QR[]a%bc $*+e# $h&15.~ $//* , "0 ' r cLtj||j|Sr)structunpackr+rrr%s r unpackszExtendedStream.unpackss}}VTYYt_55r c,|j||dS)Nr)rrs r rzExtendedStream.unpacks||FD)!,,r chtdj|j|j|z |)Nz {0}:{1}: {2})rrrr)rreasonbacks r rzExtendedStream.raise_errors+!."7"7 DIIPTDTV\"]^^r c |j||}||k7r5|jdj|t|t|yy)Nz!Invalid {0}: expected {1} got {2})rrrstr)rr"rr%expectedvalues r check_valueszExtendedStream.check_valuessI VT* H    @GGcRZm]`af]gh i r c.|j||||fyr)r)rr"rr%rs r check_valuezExtendedStream.check_values $xk:r N))r)rrrr classmethodrrrr+rrrrrrrrrrrr r rrs^!!'&    1"6-_j ;r rcr|jdddd|jdd}|j|y)NzTextProps (versions)Q)iR 鑏Q8o zStdFont (version)> .a; A==q) H A A&!7E5 dl @$1Mdl qj \ccdghmdnop r c |jdddd|jdd}|j|5t|jdd}|j 5dx}x}}|j r t |}|jr t |}|jr|jdd}|j|gddx}}|jr|jdd}|jr|jdd}|jr|jdd}|jr t |}|j|gddddd} dkDr|j|} d} dkDr|j|} |jr|jd |j} t!| dk(rd} | | dd| d cdddS#1swYxYw#1swYyxYw) Nz OleSiteConcreteControl (version)rrrrr))rUr)rVr)rWr))r]r)r^r)r_rr)r"tagidtabindexClsidCacheIndexrcaptioncontrol_tip_text)rrrrPrrRrrSrTr.rXrYr[r+r\rZlen) r,cbSitepropmaskname_lentag_lenrrrcontrol_tip_text_lenr"rrs r consume_OleSiteConcreteControlrs 94AF ]]4 #F   V $+5 dA 67  ! ! # h&' 'H 'w~~B6J}}A&I||]]4+   V%h i)* *H!!!==q1(("(--a"8   A#$ '''Nv'V$   V%f g) h, qL;;x(D  aK++g&C    KKN!;;';<  !Q &# S#2Td#35S+5+5 h h+5+5s%,G+$C1GBG+G( $G++G4c#nK|jdddd|jdd}|j|5t|jdd}|j |gd|j r|jdd}|d zd z }nd }dddj r t||jr t||jr t|s-|jdd}t|D] }t||jd d \}}|} |j|5|j5| d kDr| t|z} | d kDrdddt|D]}t!| dddy#1swYxYw#1swY>%#; \<#/   \ *9 __  Y.2,0PQW0XX,/2 Y|$ 9A08 8 9 991--2 Y Y99sN8F5AFB$F57F)F"%F) F5FF5F& "F))F2.F5c&|jdddd|jdd}|j|5t|jdd}|j 5|j |gd|j r t|}nd }|jr t|}nd }|j |gd |jr t|}nd }ddd|jd|j}d }d kDr|j|}d }d kDr|j|}dddjr t||jr t|t|fS#1swYxYw#1swYSxYw) NzMorphDataControl (versions)rrrrzsw 6q&I==q)L   \ *?&v}}T1'=>?v& ?? A55A>c|jdddd|jdd}|j|5t|jdd}|j |gdd }|d r|jdd}dddj r t |t|tD]}|jdy#1swYMxYw) NzTabStripControl (versions)rrrrrr))rrrr)rgrr))rr)rr)rr)rr)rr)rrr()rr)rrrr) rrrrr.r@rrrr+)r, cbTabStriprtabDatars r consume_TabStripControlrCs 4eQGtQ'J   Z ( -#FMM$$:;"G H J mmD!,G -v&f 7^ Q) - -s A C  CcX|jdddd|jdd}|j|5t|jdd}|j 5|j |gd|j r t|}nd }|j |gd ddd|j}|jd dddjr t||jr t|t|S#1swYnxYw#1swYPxYw) NLabelControl (versions)rrrrrr)rrr(r)r*r)r+)rer)rBrr-r.r,r) rrrrrr.rDrr+rFrr@r)r,cbLabelrr2rs r consume_LabelControlrGs 15!VDmmD!$G   W % tQ!78  ! ! # O   V&C D  FvN    V&N O O++l+ A!$v&v&f N+ O Os$,D $AD'*D D D  D)c|jdddd|jdd}|j|5t|jdd}dddjr t |yy#1swY"xYw)NrErrrrrr)rrrrr@r)r, cbScrollBarrs r consume_ScrollBarControlrJsw 15!VD--a(K   [ )=$V]]4%;<=v& ==r?c tj|dj|dgz}tt |}tj|dj|dgz}|D]}|ddk(r t ||ddk(r t |,|ddk(r t |@|ddvrt |\|d <|d <|d <`|dd k(r t|t|dd k(r t||ddk(r t||ddk(rt||d <|ddk(r t||ddk(r t |tdjt|d|S|S)N/for )rQrr1rrr4rr/9z0ERROR: Unsupported stored type in user form: {0})rrrlistr&r8r5r>r;rCrGrJprintrr)r stream_dircontrol variablesrvars r extract_OleFormVariablesr`s!!(CHHZ3%5G,HIG(12I   x*u2D)E FD  !Q &  % " #r )  & " #r )  % " #'C C>VW[>\ ;CL#i.#l*; " #r ) %d + " #r ) ( . " #r ) #D ) " #r )1$7C N " #r ) $T * " #r )  % DKKCPSTePfLgh i  54 r ) rNr Exceptionrobjectr r0rPrar{rrrrrrrrrrrr rr&r5r8r;r>rCrGrJr`rr r rcs X ) "6"*-4-S4S 7 7DDGGAtAJDJ&&O;VO;d ="   /5b!9F5(n '  '6< 'r