Documentation

ChainVerifier User Guide

Everything you need to install, configure, and master ChainVerifier — from first launch to advanced pointer chain verification.

Version 2.0.0 Windows 10 / 11 (64-bit) Last updated: September 28, 2026

1 Overview

ChainVerifier is a Windows desktop tool for finding, verifying, and managing pointer chains inside any running process. It is designed for both beginners learning pointer scanning and experienced reverse engineers who need a fast, reliable verification workflow.

What is a pointer chain?

A pointer chain is a sequence of memory addresses where each address points to the next, ending at the actual value you want to track. For example:

base_address + 0x89D244  →  + 0x140  →  + 0x20  →  value: 42

Games and applications use this pattern because the base address of a module changes each time the program starts, but the offsets between pointers remain constant. A pointer chain lets you reliably find a value across sessions.

What ChainVerifier does

  • Resolves pointer chains against a running process in real time using a full C++ backend
  • Batch verifies millions of chains in under 1 second
  • Scans memory using five different search modes
  • Provides tools for bulk freezing values, editing hex, and importing Cheat Engine pointer maps
  • Saves and loads chains in an encrypted format with auto-save backups
  • Auto-checks for updates from GitHub with Windows native notifications
  • Global hotkeys (Ctrl+Alt+A / S / F / H) for fast workflow
Who is this for? Anyone who wants to track values in a running process — whether you are learning memory scanning, modding a game, or debugging your own software.

2 System Requirements

ChainVerifier runs on any modern 64-bit Windows system. Here is the full breakdown:

Minimum requirements

Component Requirement
Operating SystemWindows 10 (64-bit), build 1809 or newer
ProcessorDual-core x64 CPU, 1.5 GHz or faster
Memory (RAM)4 GB
Storage150 MB free space
Display1100 x 720 resolution
PrivilegesAdministrator (required to attach to processes)

Recommended requirements

Component Recommendation
Operating SystemWindows 11 (64-bit)
ProcessorQuad-core x64 CPU, 2.5 GHz or faster
Memory (RAM)8 GB or more
Storage250 MB free space (SSD recommended)
Display1920 x 1080 full HD
PrivilegesRun as Administrator
32-bit Windows is not supported. ChainVerifier is built exclusively for 64-bit Windows. It can still attach to 32-bit processes running on a 64-bit OS.

3 Installation

ChainVerifier v2.0.0 ships as a single portable EXE — there is no installer, no registry changes, no background services, and no Python runtime required. Here is the complete process:

1

Download the ZIP

Go to the download page and click the latest version (v2.0.0). The ZIP is around 42 MB.

2

Extract the EXE

Right-click the downloaded ZIP and choose Extract All. Inside you will find a single file: ChainVerifier.exe. Extract it anywhere you like — Desktop, C:\Program Files\ChainVerifier\, or a USB drive.

3

Run as Administrator

Right-click ChainVerifier.exe and select Run as Administrator. Windows will show a UAC prompt — click Yes. If SmartScreen warns, click More info then Run anyway.

4

Optional: create a shortcut

Right-click the EXE → Send to → Desktop (create shortcut). In the shortcut properties, tick "Run as administrator" for convenience.

Single portable EXE: v2.0.0 ships as one file. There is no _internal folder, no Python installation, and no other dependencies. Just extract and run.
Portable install: You can place ChainVerifier.exe on a USB drive and run it from there. Chain files are saved wherever you choose — no system integration happens.

4 First Launch

When you open ChainVerifier for the first time, you will see a custom splash screen followed by a dark-themed main window with several panels. Here is what happens automatically:

Automatic tasks on startup

  1. Hardware detection — ChainVerifier reads your CPU core count and available RAM, then auto-configures the optimal thread count and buffer size.
  2. Update check — a silent request to GitHub checks if a newer version is available. If yes, a Windows native notification appears with the ChainVerifier logo.
  3. Settings load — if you have used ChainVerifier before, your preferences (theme, hotkeys, layout) are restored.
  4. Auto-save timer — if enabled, background auto-save begins creating timestamped backups.
  5. Attach prompt — no process is attached yet. You will need to attach manually before doing anything.

What you see on screen

Top bar

Shows the attached process name, base address, target address input, and the Verify All Chains button.

Results panel

Center table where verification results appear — final addresses, match status, values, and descriptions. Changed values highlight in real time.

Chains editor

Bottom panel where you add, edit, and delete pointer chains. Multi-select supported for bulk operations.

Menu bar

File, Edit, Tools, Settings, View, and Help menus at the top — with all major actions accessible.

5 Attach to Process

Before you can verify any chain or run any scan, ChainVerifier needs to attach to a target process. Attaching means opening a handle to the process and reading its module list and memory map.

How to attach

  1. Click Tools → Attach to Process... from the menu bar, or click the Browse... button in the top bar.
  2. A dialog opens showing all running processes with their name, PID, and architecture (32-bit / 64-bit auto-detected).
  3. Type part of the name in the search box to filter, or scroll the list.
  4. Double-click the process, or select it and click Attach.

What happens after attaching

  • The top bar displays the process name and its base address (in hexadecimal).
  • ChainVerifier reads the module list — you can pick any module as the base for your chains.
  • The status indicator turns green, showing the attachment is active.

Detaching

To detach, click Tools → Detach, or simply close the target process. ChainVerifier auto-detects when the target exits and detaches safely.

Administrator privileges required. If you try to attach to a process running at a higher privilege level than ChainVerifier, the attach will fail. Always run ChainVerifier as Administrator.
Protected processes. Games using kernel-level anti-cheat (EAC, BattlEye, Vanguard) will block all memory access. This is expected and cannot be bypassed.

6 Interface Overview

The main window is split into five areas. Understanding each one makes everything else easier.

Top bar

The top bar holds:

  • Process name — the currently attached process (or "Not attached")
  • Base address — the module base address in hex, used as anchor for chains
  • Target address — input field for the address you want to verify against
  • Verify All Chains — main action button (batch verifies millions of chains
  • Live update toggle — enables continuous re-verification with highlight on change

Results panel

The center table displays verification results with these columns:

Column Description
NameChain name (auto-generated or custom)
Final AddressResolved memory address after following the chain
MatchYES if the value matches the target, NO otherwise
ValueThe actual value read at the final address (highlights on change)
StatusOK, Error, or Unresolved
DescriptionOptional user-written notes

Matching chains highlight in green. Double-click any value to edit it in memory. Double-click a Description cell to add notes. Multi-select rows for bulk delete.

Chains editor

The bottom panel manages your chain definitions:

  • Add — create a new chain with base offset, offsets list, and value type
  • Edit — modify an existing chain
  • Delete — remove a single chain or multiple selected chains
  • Clear All — remove every chain (with confirmation)

Menu bar

Six top-level menus provide access to all features:

File

New, Open, Save, Save As, Recent Files, Export Results, Exit

Edit

Undo, Redo, Copy, Paste, Delete All Error Chains

Tools

Attach, Detach, Scan, Freeze, Hex Viewer, Import Pointer Map

Settings

General, Appearance, Behavior, Performance, Hotkeys, Advanced

View

Toggle panels, zoom level, column visibility

Help

Documentation, Changelog, Check for Updates, About

Status bar

The thin bar at the bottom shows current operation status, attachment state, and short hints.

7 Managing Chains

A chain is your definition of how to reach a target value. ChainVerifier supports unlimited chains, each with its own name, base, offsets, and value type.

Chain fields explained

Field Description Example
Name Auto-generated label or your custom name Health, Ammo, Position-X
Base Offset Hex offset from the module base address 0x89D244
Offsets Comma-separated hex offsets, in order from base to value 0x140, 0x20, 0x3C
Value Type int32, int64, float, double, or pointer int32
Expected Value Optional — the value to match during verification 100

Adding a chain

  1. Click Add in the chains editor.
  2. Enter a name (or leave blank for auto-generated).
  3. Enter the base offset in hex. Prefix with 0x — it is optional but recommended.
  4. Enter offsets separated by commas. Spaces are ignored. Example: 0x140, 0x20, 0x3C
  5. Pick the value type from the dropdown.
  6. Optionally add an expected value for auto-matching.
  7. Click Save.

Editing a chain

Double-click any row in the chains editor, or select the row and click Edit. Make your changes and save.

Deleting chains

  • Delete one: select the row, click Delete
  • Delete multiple: hold Ctrl or Shift to multi-select rows, then click Delete
  • Delete all: click Clear All and confirm
  • Delete errors only: after verifying, use Edit → Delete All Error Chains to remove all chains that failed to resolve
Tip: Give each chain a descriptive name. When you have 50+ chains, a name like "Player Health" is far easier to find than "Chain 047".
Offset order matters. Offsets are applied from the base outward. If your chain is 0x140, 0x20, ChainVerifier first reads base + 0x89D244, follows the pointer, adds 0x140, follows again, adds 0x20, then reads the value.

8 Verify Chains

Verification is the core feature — it resolves every chain against the current memory state and compares the resulting values to your expected values. The v2.0.0 C++ backend batch verifies millions of chains

How to verify

  1. Make sure a process is attached (see section 5).
  2. Enter the Target address in the top bar. This is usually the module base address, or a specific value you want to compare against.
  3. Click Verify All Chains, or press F5.
  4. Results appear in the center table within milliseconds.

Reading the results

Status Meaning
OK (green) Chain resolved successfully and the value matches the expected value (if set).
Mismatch (yellow) Chain resolved but the value differs from what you expected.
Error (red) Chain could not be resolved — one of the pointers was null, invalid, or unmapped.

Live update mode

Toggle Live update in the top bar to re-verify all chains continuously. Values that change are highlighted in real time so you can spot dynamic values instantly.

Editing values in place

Double-click any value in the results table to open an inline editor. Type the new value and press Enter — ChainVerifier writes it directly to the target process memory.

Adding descriptions

Double-click any cell in the Description column to add a note. Descriptions are saved with the chain file.

Cleanup shortcut: After verifying, press Ctrl+Shift+E to remove all chains that returned Error. This is faster than deleting them one by one.

9 Scan Modes

ChainVerifier provides five scan modes for different scenarios. Open the scan dialog with Tools → Scan or Ctrl+F. All scan modes auto-detect whether the target process is 32-bit or 64-bit.

9.1 AOB Pattern Scan

Find byte patterns anywhere in memory. Wildcards (??) match any byte.

Use cases: locating functions, finding signature bytes, verifying code integrity.

48 8B ?? 05 ?? ?? ?? ?? 48 85 C0

Options: case-insensitive by default; toggle "match exact case" if needed; limit to specific module or scan entire address space.

9.2 Range Scan

Find all values within a numeric range. Example: find all int32 values between 90 and 110.

Use cases: tracking health, ammo, currency, or any value with a known approximate range.

Options: value type (int32, int64, float, double), min/max bounds, alignment (4-byte, 8-byte).

9.3 Unknown Value Scan

When you do not know the value at all, this mode lets you narrow down candidates by comparing memory snapshots.

  1. First scan: snapshot the entire writable memory.
  2. Change the value in the target application (e.g., take damage).
  3. Second scan: filter by Changed, Unchanged, Increased, or Decreased.
  4. Repeat step 2-3 until only a few candidates remain.

Use cases: finding hidden stats, unusual values, or values that change in patterns you can observe.

9.4 String Scan

Search for text strings in memory. Supports ASCII and UTF-16 (wide) strings.

Use cases: finding player names, item names, chat messages, or configuration values.

Options: case sensitivity, ASCII vs UTF-16, minimum length, whole-word matching.

v2.0.0 fix: UTF-16 string scan false positives have been eliminated.

9.5 Pointer Scan

Find multi-level pointer chains that lead to a target address. This is the most powerful scan for building stable chains. The v2.0.0 C++ backend supports chunked region scanning (1 MB chunks) and multi-threaded parallel scanning.

How it works:

  1. Enter the target address (usually found via a value scan).
  2. Configure max level (1-7) — higher levels find longer chains but take longer.
  3. Configure max offset — larger offsets cover more memory but produce more results.
  4. Click Scan. ChainVerifier walks the pointer graph backward from the target.
  5. Results appear as suggested chains. Use the Send to Chains button to add them to the editor in one click.

Use cases: building reliable chains for values whose direct address changes on every restart.

New in v2.0.0: static filter with is_static flag to only show chains anchored to static module addresses.

Pointer scans can be memory-intensive. On large processes, a level-5 scan may use several gigabytes of RAM. Start with level 2 or 3, and close other applications if needed.

10 Tools

Beyond scanning and verification, ChainVerifier includes a set of built-in tools for working with process memory.

10.1 Freeze Manager

Prevent a value from changing by continuously writing it back to memory in a background thread. v2.0.0 adds bulk freeze with a visual indicator and fixes an int64 precision loss bug.

Use cases: infinite health, infinite ammo, frozen coordinates, testing.

How to use:

  1. Open Tools → Freeze Manager.
  2. Click Add and enter the address and the value to write.
  3. Pick the value type.
  4. Toggle the freeze switch to enable. The value stays locked until you disable it.
  5. Use bulk mode to freeze multiple addresses at once.

Performance notes: each frozen entry uses a small amount of CPU. Freezing hundreds of values simultaneously is not recommended.

10.2 Hex Viewer / Editor

Inspect and edit raw bytes at any address.

How to use:

  1. Open Tools → Hex Viewer.
  2. Enter the address to view.
  3. The bytes appear in the classic hex + ASCII layout.
  4. Click any byte to edit it. Type hex digits directly.
  5. Click Write to commit changes to memory.
48 8B 05 90 12 34 56

10.3 Import Cheat Engine Pointer Map

If you already have a Cheat Engine pointer map exported as .sqlite, ChainVerifier can import all chains automatically.

How to use:

  1. Export your pointer map from Cheat Engine (File → Save pointer map as .sqlite).
  2. In ChainVerifier, open Tools → Import Pointer Map.
  3. Select the .sqlite file.
  4. ChainVerifier detects the schema and imports all chains in one go.

10.4 Export Results

See section 12 for details on exporting verification results.

11 Save & Load

Chain files use the .owu extension and are encrypted with XOR + SHA-256 checksum + zlib compression. They are portable and tamper-resistant. v2.0.0 adds auto-save with timestamped backups and threaded file I/O so the UI never freezes.

Creating a new file

File → New (or Ctrl+N) clears all chains and starts a fresh file.

Saving

  • File → Save (Ctrl+S) — saves to the current file
  • File → Save As (Ctrl+Shift+S) — save to a new location
  • Auto-save — background timer creates timestamped backups automatically (configurable interval in Settings)

The saved file contains: all chains, descriptions, current results snapshot, and application settings tied to the file.

Opening

File → Open (Ctrl+O) loads an .owu file. The process attachment is not restored — you need to re-attach manually after opening.

Recent files

File → Recent Files shows the last 10 files you opened or saved, for quick access.

Encryption. Chain files are encrypted with a per-installation key. This means the same .owu file will only open on the machine that created it. If you need to transfer chains between machines, use File → Export Results → JSON.

12 Export Results

Save verification results to a file for documentation, sharing, or further analysis.

Supported formats

Format Best for Details
CSV Spreadsheets, Excel Comma-separated, one row per chain
JSON Sharing, backups, automation Structured, includes all metadata
TXT Human-readable reports Plain text, tab-aligned columns

How to export

  1. After verifying, open File → Export Results....
  2. Choose the format (CSV, JSON, TXT).
  3. Choose what to include: all chains, only matched, only errors, or only selected.
  4. Pick the destination folder and filename.
  5. Click Save.

13 Settings

Access settings via Settings in the menu bar. Settings are organized into seven sections.

13.1 General

  • Startup behavior — show attach dialog, restore last session, or open blank
  • Auto-update check — enable or disable startup update check
  • Confirm on exit — ask before closing if unsaved chains exist

13.2 Appearance

  • Theme preset — six built-in themes (light, blue, purple, green, dark, custom)
  • Font family and size — for both UI and code panels
  • Row height — compact, normal, or relaxed
  • Panel visibility — show or hide each main panel
  • Accent color — pick any hex color for highlights

13.3 Behavior

  • Live update interval — from 50 ms to 2000 ms
  • Confirm on delete — ask before removing chains
  • Auto-attach to last process — try to re-attach to the previous target on startup
  • Remember column widths — persist table layout across sessions

13.4 Performance

  • Performance profile — Battery Saver, Balanced, Performance, Extreme
  • Thread count — for memory scanning (auto-detected by default)
  • Buffer size — read buffer in MB (auto-detected by default)
  • Pointer scan depth limit — cap on memory used for pointer scans

13.5 Hotkeys

Rebind any keyboard shortcut. Default bindings are listed in section 14. v2.0.0 adds global hotkeys (Ctrl+Alt+A / S / F / H) that work even when ChainVerifier is not focused.

13.6 File & Logs

  • Auto-save interval — save chain file every N minutes (0 = disabled). Creates timestamped backups.
  • Log level — Error, Warn, Info, Debug
  • Log rotation — max log file size, number of archives
  • Log location — where diagnostic logs are written
  • Sound notifications — Windows default sounds on important events
  • Taskbar flash — flash taskbar on important events

13.7 Advanced

  • Cache size — for scan result caching
  • Undo history depth — how many steps are remembered (C++ ring buffer, default: 100)
  • Debug mode — extra logging and diagnostic output
  • Reset all settings — restore defaults

14 Keyboard Shortcuts

All default shortcuts. Rebind any of these in Settings → Hotkeys.

File operations

Shortcut Action
Ctrl NNew chain file
Ctrl OOpen chain file
Ctrl SSave
Ctrl Shift SSave As
Ctrl EExport results

Editing

Shortcut Action
Ctrl ZUndo
Ctrl YRedo
Ctrl CCopy selected rows
Ctrl VPaste chains
DeleteDelete selected chains
Ctrl Shift EDelete all error chains

Verification & scanning

Shortcut Action
F5Verify all chains
Ctrl FOpen scan dialog
Ctrl LToggle live update
Ctrl TAttach to process
Ctrl DDetach

Tools & windows

Shortcut Action
Ctrl HOpen hex viewer
Ctrl Shift FOpen freeze manager
Ctrl UCheck for updates
F1Open documentation
EscClose active dialog

Global hotkeys (new in v2.0.0)

These work even when ChainVerifier is not the active window.

Shortcut Action
Ctrl Alt AAttach to process
Ctrl Alt SOpen scan dialog
Ctrl Alt FToggle freeze
Ctrl Alt HOpen hex viewer

15 Tips & Best Practices

Recommendations from experienced users, ordered by impact.

Building reliable chains

  • Always build from a module base. Using game.exe + 0x89D244 is stable across restarts; using a raw heap address is not.
  • Prefer shorter chains. A 2-level chain is more reliable than a 5-level chain.
  • Use the pointer scanner to validate. After building a chain by hand, run a pointer scan to see if a shorter chain exists.
  • Test after a restart. Restart the target process and re-verify. If your chain fails, it is not stable.
  • Watch out for multi-threaded updates. Some games write values from multiple threads; freeze managers may fight with the game.
  • Use the static filter. In v2.0.0, enable the is_static filter in pointer scan to only see chains anchored to static module addresses.

Scanning efficiency

  • Limit to a module when possible. Scanning a single module is 10-100x faster than the whole address space.
  • Use alignment. Most values are 4- or 8-byte aligned — enabling alignment cuts results by 50-90%.
  • Increase scan depth gradually. Start at level 2, then retry with level 3 or 4 if needed.
  • Close memory-heavy apps first. Browsers, IDEs, and VMs take RAM that scans need.
  • Use Send to Chains. In v2.0.0, pointer scan results have a Send to Chains button that adds them in one click.

Workflow

  • Save often. Enable auto-save in Settings → File & Logs for automatic timestamped backups.
  • Use descriptions. Six months from now, "Player Health (base game)" beats "Chain 047".
  • Keep a backup of working chains. Export to JSON and store somewhere safe.
  • Do not verify while the target is paused. Frozen processes may have stale values.
  • Use global hotkeys. Ctrl+Alt+A / S / F / H let you work without alt-tabbing back to ChainVerifier.
The golden rule: If your chain works after restarting the target application 3 times in a row, it is almost certainly stable. If it fails even once, keep scanning.

16 Troubleshooting

Common issues and how to resolve them.

Attach fails with "Access Denied"

Cause: ChainVerifier is not running as Administrator, or the target process is protected.

Fix:

  • Close ChainVerifier, right-click the EXE, and pick Run as Administrator
  • If the target uses kernel-level anti-cheat (EAC, BattlEye, Vanguard), memory access is blocked by design — no fix is possible

Chains resolve but values are wrong

Cause: The base offset or one of the offsets is off by a few bytes; or the value type is incorrect.

Fix:

  • Verify offsets against a fresh pointer scan
  • Check the value type — int32 vs float gives very different readings
  • Confirm the module base address in the top bar matches the module you scanned

Chain file fails to open on another machine

Cause: .owu files are encrypted with a per-installation key.

Fix: Use File → Export Results → JSON to transfer chains between machines.

Freeze manager does not hold values

Cause: The target process writes the value faster than ChainVerifier can refresh it; or the address is dynamically allocated and has moved.

Fix:

  • Switch to a chain-based freeze (from a stable pointer chain) instead of a raw address
  • Lower the freeze thread interval in Settings → Behavior

Pointer scan crashes or runs out of memory

Cause: Level or offset range is too large.

Fix:

  • Reduce max level from 5 to 3
  • Reduce max offset from 0x1000 to 0x400
  • Close other memory-heavy applications
  • Use a static module range instead of the whole heap

Windows SmartScreen blocks ChainVerifier

Cause: The EXE is unsigned and SmartScreen flags unknown publishers.

Fix:

  • Click More info, then Run anyway
  • Or right-click the EXE → Properties → check Unblock → OK

Antivirus quarantines ChainVerifier

Cause: False positive — memory tools are frequently flagged.

Fix:

  • Add an exclusion for the ChainVerifier folder
  • Upload the EXE to virustotal.com and inspect the results
  • If you are not comfortable with exclusions, do not run the tool

Application starts but window is blank

Cause: GPU driver issue or missing Windows runtime.

Fix:

  • Update your graphics drivers
  • Ensure Visual C++ Redistributable 2019 or newer is installed
  • Run ChainVerifier with --safe-mode flag to disable hardware acceleration

Update check fails

Cause: No internet access, or GitHub API rate limit reached.

Fix: Wait a few minutes and retry, or download manually from the download page.

Notifications do not appear

Cause: Windows Focus Assist is enabled, or notifications are disabled for ChainVerifier.

Fix: Check Windows Settings → System → Notifications. The duration is OS-controlled (~3-5 seconds).

Still stuck? Open an issue on GitHub or ask in Telegram. Include your Windows version, ChainVerifier version, and a screenshot of the problem.

17 Glossary

Terms you will encounter while using ChainVerifier.

Term Definition
Address A location in a process's virtual memory, expressed as a hexadecimal number, e.g. 0x7FF6A000.
AOB Array of Bytes. A pattern of bytes used to search memory, often containing wildcards.
Attach Opening a handle to a running process so ChainVerifier can read and write its memory.
Base address The starting address of a module in memory. Changes each time the program runs, unless the module is ASLR-disabled.
Chain A sequence of pointers and offsets that leads from a base address to a target value.
Dereference Reading the value stored at an address. Follows a pointer.
Freeze Continuously writing a value to memory so the target process cannot change it.
Hex Base-16 number system. Memory addresses and offsets are typically written in hex.
Module A loaded executable or DLL inside a process. Has a name, base address, and size.
Offset A distance from a base address or pointer, added to reach the next location.
Pointer A memory value that holds the address of another memory location.
PID Process Identifier — a unique number assigned by Windows to each running process.
Static address An address that does not change between runs, usually derived from a module base plus a fixed offset.
Value type How a value is stored in memory. Common types: int32 (4 bytes), int64 (8 bytes), float (4 bytes), double (8 bytes).
Wildcard A byte placeholder in an AOB pattern that matches any value. Written as ??.

18 Getting Support

If this documentation did not answer your question, here are the ways to reach the developers and community.

Community support (free)

Reporting a bug

To get the fastest help, include:

  1. ChainVerifier version (shown in the header)
  2. Windows version and build (Win + R → winver)
  3. What you were doing when the bug occurred
  4. Steps to reproduce
  5. A screenshot or log file if relevant

Requesting a feature

Open an issue on GitHub with the label enhancement, and describe:

  • The problem you are trying to solve
  • How you currently work around it
  • What the ideal solution would look like
ChainVerifier is a free, community-driven project. Responses are best-effort. If you can contribute a fix or improvement via pull request, that is always welcome.
Thanks for reading. You now know more about ChainVerifier than 99% of users. Go build some reliable chains.