EvilClippy : For Creating Malicious MS Office Documents

EvilClippy is a cross-platform assistant for creating malicious MS Office documents. Can hide VBA macros, stomp VBA code (via P-Code) and confuse macro analysis tools.

Runs on Linux, OSX and Windows.EvilClippy tool was released during our BlackHat Asia talk (March 28, 2019). A video recording will be online in 90 days.

Evil Clippy

A cross-platform assistant for creating malicious MS Office documents. Can hide VBA macros, stomp VBA code (via P-Code) and confuse macro analysis tools. Runs on Linux, OSX and Windows.

Features

  • Hide VBA macros from the GUI editor
  • VBA stomping (P-code abuse)
  • Fool analyst tools
  • Serve VBA stomped templates via HTTP
  • Set/Remove VBA Project Locked/Unviewable Protection

How effective is this?

At the time of writing, this tool is capable of getting a default Cobalt Strike macro to bypass all major antivirus products and most maldoc analysis tools (by using VBA stomping in combination with random module names).

Technology

Evil Clippy uses the OpenMCDF library to manipulate MS Office Compound File Binary Format (CFBF) files, and hereto abuses MS-OVBA specifications and features.

It reuses code from Kavod.VBA.Compression to implement the compression algorithm that is used in dir and module streams (see MS-OVBA for relevant specifications).

Evil Clippy compiles perfectly fine with the Mono C# compiler and has been tested on Linux, OSX and Windows.

Also Read –DrAFL : Fuzzing Binaries With No Source Code On Linux

Compilation

A cross-platform compiled binary can be found under “releases”.

OSX and Linux Make sure you have Mono installed. Then execute the following command from the command line:

mcs /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs

Now run Evil Clippy from the command line:

mono EvilClippy.exe -h

Windows Make sure you have Visual Studio installed. Then execute the following command from a Visual Studio developer command prompt:

csc /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs

Now run Evil Clippy from the command line:

EvilClippy.exe -h

Usage examples

Print help

EvilClippy.exe -h

Hide macros from GUI

Hide all macro modules (except the default “ThisDocument” module) from the VBA GUI editor. This is achieved by removing module lines from the project stream [MS-OVBA 2.3.1].

EvilClippy.exe -g macrofile.doc

Stomp VBA (abuse P-code)

Put fake VBA code from text file fakecode.vba in all modules, while leaving P-code intact. This abuses an undocumented feature of module streams [MS-OVBA 2.3.4.3]. Note that the VBA project version must match the host program in order for the P-code to be executed (see next example for version matching).

EvilClippy.exe -s fakecode.vba macrofile.doc

Note: VBA Stomping does not work for files saved in the Excel 97-2003 Workbook (.xls) format

Set target Office version for VBA stomping

Same as the above, but now explicitly targeting Word 2016 on x86. This means that Word 2016 on x86 will execute the P-code, while other versions of Word wil execute the code from fakecode.vba instead. Achieved by setting the appropriate version bytes in the _VBA_PROJECT stream [MS-OVBA 2.3.4.1].

EvilClippy.exe -s fakecode.vba -t 2016×86 macrofile.doc

Set random module names (fool analyst tools)

Set random ASCII module names in the dir stream [MS-OVBA 2.3.4.2]. This abuses ambiguity in the MODULESTREAMNAME records [MS-OVBA 2.3.4.2.3.2.3] – most analyst tools use the ASCII module names specified here, while MS Office used the Unicode variant.

By setting a random ASCII module name most P-code and VBA analysis tools crash, while the actual P-code and VBA still runs fine in Word and Excel.

EvilClippy.exe -r macrofile.doc

Note: this is known to be effective in tricking pcodedmp and VirusTotal

Serve a VBA stomped template via HTTP

Service macrofile.dot via HTTP port 8080 after performing VBA stomping. If this file is retrieved, it automatically matches the target’s Office version (using its HTTP headers and then setting the _VBA_PROJECT bytes accordingly).

EvilClippy.exe -s fakecode.vba -w 8080 macrofile.dot

Note: The file you are serving must be a template (.dot instead of .doc). You can set a template via a URL (.dot extension is not required!) from the developer toolbar in Word.

Also, fakecode.vba must have a VB_Base attribute set for a macro from a template (this means that your facecode.vba must start with a line such as Attribute VB_Base = “0{00020906-0000-0000-C000-000000000046}”).

Set/Remove VBA Project Locked/Unviewable Protection

To set the Locked/Unviewable attributes use the ‘-u’ option:

EvilClippy.exe -u macrofile.doc

To remove the Locked/Unviewable attributes use the ‘-uu’ option:

EvilClippy.exe -uu macrofile.doc

Note: You can remove the Locked/Unviewable attributes on files that were not locked with EvilClippy as well.

Limitations

Developed for Microsoft Word and Excel document manipulation.

As noted above, VBA stomping is not effective against Excel 97-2003 Workbook (.xls) format.

Credits : Stan Hegt, Carrie Robberts, Nick Landers

R K

Recent Posts

Install PHP on Ubuntu 26.04: Apache, Nginx, and Multiple Versions

PHP 8.5 is included in Ubuntu 26.04's default repositories and is the recommended version for…

11 hours ago

Upgrade to Ubuntu 26.04 from 25.10 and 24.04 LTS: Complete Guide

Ubuntu 26.04 LTS "Resolute Raccoon" arrived on April 23, 2026 with Linux kernel 7.0, GNOME 50,…

11 hours ago

Install Kubernetes on Ubuntu 26.04 with kubeadm and containerd

Kubernetes is the standard platform for running containerized workloads across multiple servers with self-healing, rolling…

11 hours ago

Install Ubuntu 26.04: Bootable USB, Partitioning, and First Steps

Ubuntu 26.04 LTS "Resolute Raccoon" was released on April 23, 2026 with Linux kernel 7.0, GNOME desktop, and standard security support until April 2031. A clean install gives you a known-good starting point on new hardware, when replacing another operating system, or when an upgrade path is not practical. This guide walks through how to install Ubuntu 26.04: downloading and verifying the ISO, writing a bootable USB drive, completing the installer, and doing the initial setup after the first boot. Before you start: You need a USB drive with at least 12 GB of free space. Back up any existing data on the target machine — the installer can erase the entire disk. Install Ubuntu 26.04: Download the ISO…

11 hours ago

Change Timezone on Ubuntu: timedatectl and Desktop GUI Guide

The correct timezone affects more than the clock on your screen. It drives cron job scheduling, systemd timer execution, log file timestamps, database record timing, and SSL certificate validity checks. A mismatched timezone can cause scheduled jobs to fire at the wrong hour and make log timestamps impossible to match with real-world events. This guide shows how to change timezone on Ubuntu using the timedatectl command (the recommended approach for servers and remote machines) and through the graphical Date & Time settings on desktop systems. The steps apply to all current Ubuntu releases including 24.04 and 26.04. <strong>Prerequisite:</strong>&nbsp;Only&nbsp;the&nbsp;root&nbsp;user&nbsp;or&nbsp;a&nbsp;user&nbsp;with&nbsp;sudo&nbsp;access&nbsp;can&nbsp;change&nbsp;the&nbsp;system&nbsp;timezone. Check the Current Timezone Before You Change It Run timedatectl with no arguments to see the active timezone and clock status: bashtimedatectl Sample output: Local…

12 hours ago

Install Atom on Ubuntu 18.04: GitHub’s Code Editor APT Setup

Atom is a free, open-source, cross-platform code editor developed by GitHub. Built on Electron, it uses…

23 hours ago