• Home
  • Tutorial
  • Gallery
  • Purchase
  • Contact Us
  • (0)
  • Tutorial
  • Demo Doc
  • Installation
  • Activation
  • Basic
  • Actions
  • Tagging
  • Console Mode
  • FAQ
  • History



VBASH — User Guide

Concise operational and reference documentation for installing, activating, and using VBASH.


Demo Document

Download a sample project to explore VBASH features and tagging examples:

VBASH_demo.7z


Installation

  1. VBASH is supported on **Windows** only.
  2. After purchase you will receive an Order Confirmation email with download and activation details.
  3. Download the VBASH installer using the link in that email.
  4. Extract the installer with 7-Zip (download), then run the executable and follow the on-screen prompts.
  5. Activate VBASH online as described in the Activation section below.

Activation

Note: VBASH license serial keys are permanently node-locked to the machine on which they are activated. Activate VBASH on the computer where you intend to use it. After activation, you may use VBASH offline and you may reinstall or upgrade the operating system and you will still be able to activate VBASH on the same hardware. However, licenses cannot be transferred to another PC.

Important: VBASH writes a local license file during activation. Run VBASH as an administrator (right-click → Run as administrator) and temporarily disable any security software that might block file writes.

  1. Within a few minutes of purchase you will receive an Order Confirmation email containing the Order Number and Serial Key. Check your spam folder or contact support if you do not receive the email.

License Server: 66.55.68.25   Port: 23400

Activation window screenshot

  1. On first launch you will be prompted with the activation dialog. Confirm the License Server and Port values (versions ≥ 1.1.1 include an Auto Detect button to populate these automatically). Enter your Order Number and Serial Key, then click Activate. Activation may take up to two minutes.
  2. Once activation completes, VBASH is ready to use.

VBASH main UI


How VBASH Works

Quick workflow overview:

VBASH workflow

  1. Open the target VBA file using Browse Document. VBASH supports .xlsm, .docm, and .pptm. Macros are listed in the Document panel.
  2. Apply tags using AutoTag or insert tags manually. Skip tagging if you do not require obfuscation.
  3. Select an action from the Actions menu and click Go!
  4. Review processed files in the same folder as the original document.

Details and best practices

  • VBASH operates on an internal copy of the target file—your original file is not modified.
  • Select a macro in the Document panel to view its code in the Original Code panel. You may edit code here (for example, to customize tags), but edits are not saved until you perform a saving action (see Actions).
  • Tagging is required for correct obfuscation. Use the Tagging buttons or right-click in the code panel and choose Insert Tag. Tags apply per selected macro—tag each macro that requires obfuscation.

Actions

VBASH provides five primary actions. Choose the action that matches your workflow:

Actions UI

  1. Save progress — Save a working copy where the Original Code panel replaces macro code in the file. This preserves tags and editable code for later work. Progress files are not fused or obfuscated and should not be distributed to end users.
  2. Obfuscate for preview — Run obfuscation in memory and display results in the Obfuscated Code panel without saving any files. Use this to validate obfuscation behavior.
  3. Obfuscate & save — Apply obfuscation and save a copy of the file with obfuscated macros. VBASH also saves a progress file and an obfuscation log by default.
  4. Fuse & save — Save a progress file and a fused copy (VBA project fused). The fused file contains the same macro logic but the VBA project is not viewable in the VBA editor.
  5. Obfuscate, fuse & save — Run obfuscation, save the obfuscated file and log, then save a fused copy of the obfuscated project. Note: fused VBA projects are not viewable in the editor but function identically to the obfuscated file.

Obfuscation styles

Obfuscation styles

  1. Regular (deprecated) — Each macro receives a unique identifier prefix; internal names in that macro are prefixed accordingly.
  2. Blended — All project identifiers use a consistent prefix letter (for example, l) to obscure the original source of each name.
  3. Debug — Appends obfuscated names to original names to aid debugging. This is not recommended for production since original names remain present in the code.

Naming convention


VBASH saves files using a clear naming convention (see image):

File naming convention


Tagging

Tags tell VBASH which identifiers to obfuscate or preserve. Use built-in functions for common scenarios, or insert tags manually for precise control.

Tagging UI

Built-in tagging functions

  1. AutoTag — Scans the macro and inserts tags for global variables ('#DimGlobalVar#), functions and subroutines ('#DimSubFunction#), and local variables ('#DimLocalVar#). Event subroutines are skipped automatically ('#DimSkipSubFunction#).
  2. CleanTag — Consolidates duplicate tags and normalizes formatting for readability.
  3. ClearTag — Removes all tags from the selected scope.

These functions can operate on the entire project or only the selected module.


To insert tags manually, right-click in the Original Code panel and choose Insert Tag, or type tags directly. When a tag accepts parameters, separate multiple parameters with a comma (,).

Recognized tags and their purpose:


'#DimGlobalVar# Name1, Name2

Declare global variables to be obfuscated. Each name listed is replaced with a unique obfuscated identifier.


'#DimSkipGlobalVar# Name1, Name2

Mark global variables to be excluded from obfuscation, even if they appear in '#DimGlobalVar#.


'#DimSubFunction# Name1, Name2

Declare functions and subroutines to be obfuscated. Names listed are replaced with unique identifiers.


'#DimSkipSubFunction# Name1, Name2

Exclude specific functions or subroutines from obfuscation, even if listed in '#DimSubFunction#.


'#DimType# Name1, Name2

Declare user types (Type) to be obfuscated. This affects the type name only; variables of that type are handled by '#DimLocalVar# tags defined before the type.


'#DimSkipType# Name1, Name2

Exclude specific types from obfuscation, even if listed in '#DimType#.


'#DimLocalVar# Name1, Name2

Declare local variables for the next Function or Subroutine. Local variables are scoped to the function/subroutine until End Function or End Sub. Place this tag immediately before the function/subroutine to obfuscate its local variables.


'#DimSkipLocalVar# Name1, Name2

Exclude specific local variables from obfuscation, even if they are present in '#DimLocalVar#.


'#StartObfuscation#

Enable obfuscation of strings, comments, and formatting. Equivalent to enabling '#StartObfuscateString#, '#StartObfuscateComment#, and '#StartObfuscateFormat#. Treated as enabled at the start of each macro.


'#StopObfuscation#

Disable obfuscation of strings, comments, and formatting. Equivalent to '#StopObfuscateString#, '#StopObfuscateComment#, and '#StopObfuscateFormat#.


'#StartObfuscateString#

Enable string obfuscation (text inside double quotes). Use this to re-enable string obfuscation after a '#StopObfuscateString# or '#StopObfuscation# tag.


'#SkipObfuscateString#

Skip string obfuscation for the single line immediately following this tag.


'#StopObfuscateString#

Disable string obfuscation.


'#StartObfuscateComment#

Enable removal of comments. Use this after a '#StopObfuscateComment# or '#StopObfuscation# tag to re-enable comment removal.


'#SkipObfuscateComment#

Skip comment removal for the single line immediately following this tag.


'#StopObfuscateComment#

Disable comment removal.


'#StartObfuscateFormat#

Enable removal of formatting (indentation and blank lines). Use this after '#StopObfuscateFormat# or '#StopObfuscation# to re-enable format removal.


'#SkipObfuscateFormat#

Skip format removal for the single line immediately following this tag.


'#StopObfuscateFormat#

Disable format removal.


'#StartObfuscateLocalVar#

Enable obfuscation of local variables for subsequent functions/subroutines. Use this to re-enable local variable obfuscation after a '#StopObfuscateLocalVar# tag.


'#StopObfuscateLocalVar#

Disable obfuscation of local variables. Equivalent to removing subsequent '#DimLocalVar# tags; useful for debugging without editing tag definitions.


'#StringAsName# Name1, Name2 (added in v1.1.9)

Treat string literals that exactly match a listed name as identifiers (function/subroutine/variable names). The tag applies to the single line following the tag. Example: with '#StringAsName# MyFunc, in Application.OnKey "{ENTER}", "MyFunc" the string "MyFunc" is treated and obfuscated as an identifier rather than as a regular string.


See the demo document for tagging examples and obfuscation results:

Tagging example


Console Mode

(Available in v1.1.15 and later)

VBASH includes a headless console mode for automated or scripted tasks. Invoke tasks from the command line using VBASH.exe. Arguments are:


-i | --input <InputFilePath>
Required. Path to the input file. Use quotes if the path contains spaces.

-a | --action <action>
Required. Accepts (case-insensitive): obfuscate, fuse, or obfuscate+fuse.

-t | --tag
Apply AutoTag before processing. Omit to skip automatic tagging.

-s | --setting <setting_str>
Optional. Supported settings: keep_module_name — preserve module names; use_fuse — use the legacy Fuse engine (instead of Fuse+). Separate multiple settings with semicolons (;). Settings are case-insensitive.


Recommended: run with Start /w so the command prompt waits until VBASH completes:

Start /w VBASH.exe <arguments>


Example:

Start /w VBASH.exe -i "C:\my path\my.xlsm" -t -a obfuscate+fuse -s keep_module_name;use_fuse


Frequently Asked Questions

Macro security warning

Macro settings

  1. Why does VBASH sometimes fail to open a document with the message “Programmatic access to Visual Basic Project is not trusted”?

    Answer: VBASH needs access to the VBA project to read macros. Enable access in Excel/Word/PowerPoint: File → Options → Trust Center → Trust Center Settings → Macro Settings, then check Trust access to the VBA project object model under Developer Macro Settings.

  2. Why doesn't VBASH use random alphanumeric strings for obfuscated names?

    Answer: Arbitrary random strings are easy to identify and replace because each is unique. VBASH uses a pattern based on l and 1 (for example l1l1l11ll) which is visually hard to parse and harder to reliably search/replace. We may add more obfuscation patterns in future—submit suggestions via Contact Us.

  3. Why add an unused optional parameter to some subroutines in the demo?

    Answer: Subroutines without parameters appear in the Macros list in the Developer ribbon. Adding an unused optional parameter prevents them from appearing while preserving functionality. This also applies to fused documents.


Revision History

  • v1.1.20 (2024-03-02): Minor optimizations and updates.
  • v1.1.21a (2024-12-01): Improved fusing for non-Unicode projects; tagging fixes.
  • v1.1.22 (2025-05-03): Bug fixes for UserForms and tagging.
  • v1.2.1 (2025-09-21): Major performance improvements, Windows 11 compatibility, and cache clearing enhancements. Contact support if activation issues occur.
  • v1.2.2 (2025-10-30): Bug fixes and stability updates. Contact support if activation issues occur.
Copyright 2017-2025 © Ayedeal Technology LLC. All Rights Reserved.