All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.10.0.0] - 2024-07-22
New release of the HyperDbg Debugger.
Added
- Support using assembly conditions and codes in all events (link)(link)
- Added the assembler command 'a' for virtual memory (link)
- Added the assembler command '!a' for physical memory (link)
- Providing a unified SDK API for reading memory in the VMI Mode and the Debugger Mode
- Export SDK APIs for reading/writing into registers in the Debugger Mode
- Export SDK API for writing memory in the VMI Mode and the Debugger Mode
- Export SDK API for getting kernel base address
- Export SDK API for connecting to the debugger and from debuggee in the Debugger Mode
- Export SDK API for starting a new process
- Add and export SDK API for unsetting message callback
- Event commands are coming with more examples regarding scripts and assembly codes
- Add message callback using shared memory
- Add maximum execution limitation to the script IRs (#435) (link)
Changed
- Fix clearing '!monitor' hooks on a different process or if the process is closed (#409) (link)
- Fix triggering multiple '!monitor' hooks with different contexts (#415) (link)
- Fix the problem of repeating commands once kHyperDbg is disconnected
- Fix step-over hangs if the process terminates/excepts within call instruction (#406) (link)
- Fix crash on editing invalid physical addresses (#424) (link)
- Fix exporting VMM module load and install it in the SDK
- Fix function interpretation issues and update the parser and the code execution (#435) (link)
[0.9.1.0] - 2024-06-30
New release of the HyperDbg Debugger.
Added
- Regular port/pin value read and modification in hwdbg
- Conditional statement evaluation in hwdbg
- Added automatic script buffer packet generator for hwdbg
- Added support for @hw_pinX and @hw_portX registers
- Added hwdbg instance information interpreter
- Added stack buffer in vmx-root (link)
- Exporting functions to support loading drivers with different names
- Exporting function to connect and load HyperDbg drivers
- Exporting function to connect and load HyperDbg drivers
- $date and $time pseudo-registers are added (link)(link)
Changed
- Fix using constant WSTRINGs in the wcsncmp function (link)
- Fix
phnt
build error with 24H2 SDK
hprdbgctrl.dll
changed to libhyperdbg.dll
hprdbgkd.sys
changed to hyperkd.sys
hprdbghv.dll
changed to hyperhv.dll
- Dividing user/kernel exported headers in the SDK
[0.9.0.0] - 2024-06-09
New release of the HyperDbg Debugger.
Added
- The !monitor command now physical address hooking (link)
- hwdbg is merged to HyperDbg codebase (link)
- strncmp(Str1, Str2, Num), and wcsncmp(WStr1, WStr2, Num) functions in script engine (link)(link)
Changed
- Using a separate HOST IDT in VMCS (not OS IDT) (fix to this VM escape issues)
- Using a dedicated HOST GDT and TSS Stack
- Checking for race-condition of not locked cores before applying instant-events and switching cores
- The error message for invalid address is changed (more information)
- Fix the problem of not locking all cores after running the '.pagein' command
[0.8.4.0] - 2024-05-10
New release of the HyperDbg Debugger.
Changed
- Fixed the signedness overflow of the command parser
[0.8.3.0] - 2024-05-03
New release of the HyperDbg Debugger.
Added
- Added hwdbg headers (link)
- Added support NUMA configuration with multiple count CPU sockets (link)
- Added citation to TRM paper (link)
Changed
- Change release flag of hyperdbg-cli to Multi-threaded Debug (/MTd)
- Fix bitwise extended type, fixed memleaks, remove excess else and cmp int with EOF (link)
[0.8.2.0] - 2024-03-19
New release of the HyperDbg Debugger.
Added
- Add user-defined functions and variable types in script engine thanks to @xmaple555 (link)(link)
Changed
- Fix debuggee crash after running the '.debug close' command on the debugger
- The problem with adding edge MTRR pages is fixed thanks to @Maladiy (link)
- All compiler/linker warnings of kernel-mode modules are fixed
- User/Kernel modules of HyperDbg now compiled with "treat warning as error"
- After downloading new symbols it is automatically loaded
- Fix error messages/comments spelling typos
[0.8.1.0] - 2024-02-01
New release of the HyperDbg Debugger.
Added
- The !monitor command now supports length in parameters (link)
Changed
- Fix the issue of not intercepting memory monitoring on non-contiguous physical memory allocations
- The speed of memory read/write/execution interception is enhanced by avoiding triggering out-of-range events
[0.8.0.0] - 2024-01-28
New release of the HyperDbg Debugger thanks to @mattiwatti.
Added
- The !mode event command is added to detect kernel-to-user and user-to-kernel transitions (link)
- The 'preactivate' command is added to support initializing special functionalities in the Debugger Mode (link)
Changed
- Fix miscalculating MTRRs in 13th gen processors
[0.7.2.0] - 2024-01-23
New release of the HyperDbg Debugger thanks to @mattiwatti and @cutecatsandvirtualmachines.
Changed
- Fix INVEPT invalidation using out of scope descriptor (link)
- Fix MTRR initialization crash (link)
[0.7.1.0] - 2023-12-20
New release of the HyperDbg Debugger.
Changed
- Fix the single core broadcasting events issue (link)
- Evaluate the '.pagin' ranges as expressions (link)
- Add hexadecimal escape sequence as string parameter for string functions (link)
- Add hexadecimal escape sequence as wstring parameter for wstring functions (link)
- Fix breakpoint and the '!epthook' problems in the same address (link)
[0.7.0.0] - 2023-11-22
New release of the HyperDbg Debugger.
Added
- HyperDbg now applies events immediately as implemented in the "instant events" mechanism (link)
- The Event Forwarding mechanism is now supported in the Debugger Mode (link)
- The Event Forwarding mechanism now supports external modules (DLLs) (link)
- event_clear(EventId) function in script engine (link)
- HyperDbg now supports string inputs for strlen and other related functions thanks to @xmaple555 (link)
- New semantic tests for the script engine (50 to 59) is added mainly for testing new string and memory comparison functions (link)
- strlen and wcslen functions now support string and wide-character string as the input (link)(link)
- strcmp(Str1, Str2), wcscmp(WStr1, WStr2) and memcmp(Ptr1, Ptr2, Num) functions in script engine thanks to @xmaple555 (link)(link)(link)
- The debug break interception (#DB) manipulation option is added to the 'test' command (link)
- The '.pagein' command, now supports address ranges (length in bytes) to bring multiple pages into the RAM (link)
Changed
- Fix the problem with the "less than" and the "greater than" operators for signed numbers thanks to @xmaple555 (link)
- Fix the problem checking for alternative names thanks to @xmaple555 (link)
- Fix the crash by turning off the breakpoints while a breakpoint is still active thanks to @xmaple555 (link)
- Fix the crash on reading symbols on remote debuggee thanks to @xmaple555 (link)
- The 'prealloc' command is updated with new instant-event preallocated pools (link)
- Fix wrong removing of EPT Hook (hidden breakpoints)
- The 'event' command, no longer continues debuggee for clearing events, instead just disables the event and removes the effects of the event when debuggee continues (link)
- $id pseudo-register changed to $event_id (link)
- $tag pseudo-register changed to $event_tag (link)
- $stage pseudo-register changed to $event_stage (link)
- Fix adding pseudo-registers with underscore in the script engine (link)
- Fix the boolean expression interpretation in if conditions in the script engine (link)
- HyperDbg now intercepts all debug breaks (#DBs) if it's not explicitly asked not to by using the 'test' command (link)
- Fix 'd' bug in script engine (link)
[0.6.0.0-beta] - 2023-09-25
New release of the HyperDbg Debugger.
Added
- event_inject(InterruptionType, Vector) function in script engine (link)
- event_inject_error_code(InterruptionType, Vector, ErrorCode) function in script engine (link)
- **.dump** - command is added to the debugger to dump the virtual memory into a file (link)
- !dump - command is added to the debugger to dump the physical memory into a file (link)
- gu - command is added to the debugger to step-out or go up instructions thanks to @xmaple555 (link)
Changed
- HyperDbg now switched to a multiple EPTP memory model, and each core has its own EPT table (link)
- Building mtrr map by adding smrr, fixed ranges, and default memory type is fixed (#255) thanks to @Air14
- The problem of removing multiple EPT hooks on a single address is fixed
- The problem of not intercepting the step-over command 'p' when executed in different cores is fixed
- HyperDbg now checks for the validity of physical addresses based on CPUID.80000008H:EAX[7:0]'s physical address width
[0.5.0.0] - 2023-08-07
New release of the HyperDbg Debugger.
Added
- The event calling stage mechanism (link)
- New pseudo-registers ($stage) in the script engine (link)
Changed
- The disassembler now warns if you mistakenly used the 'u' command over a 32-bit program (link)
- The debuggee won't load the VMM module if the debugger is not listening
- The debugger and the debuggee now perform a version/build check to prevent version mismatch
- Fix the 'eb' command's parsing issue with '0xeb' hex bytes (link)
- Fix the connection problem with serial (checksum error) over two VMs
- Fix the 't' command's indicator of trap flags and simultaneous stepping of multiple threads (link)
- Fix the problem with the '.kill' and '.restart' commands
- Show the stage of the event once the debugger is paused
- Fix sending context, tag, and registers once '!epthook2' wants to halt the debugger
[0.4.0.0] - 2023-07-18
New release of the HyperDbg Debugger.
Added
- The !monitor command now supports 'execution' interception (link)
- **.pagein** - command is added to the debugger to bring pages in (link)
Changed
- The '.start' command's mechanism for finding the entrypoint is changed to address issues (link)
- The buffer overlap error in hyperlog in multi-core systems is fixed (link)
- The implementation of 'dd' (define dword, 32-bit), and 'dw' (define word, 16-bit) is changed (link)
- The problem with unloading driver (#238) is fixed (link)
- The symbol files for 32-bit modules are now loaded based on SysWOW64, and the issue (#243) is fixed (link)
- New alias names for u, !u as u64, !u64 and for u2, !u2 as u32, !u32 (link)(link)
[0.3.0.0] - 2023-06-08
New release of the HyperDbg Debugger.
Added
- The event short-circuiting mechanism (link)
- New pseudo-registers ($tag, $id) in the script engine (link)
- The breakpoint interception manipulation (#BP) option is added to the 'test' command (link)
- The '!track' command to create the tracking records of function CALLs and RETs along with registers (link)
- disassemble_len(Address) function in script engine (link)
- disassemble_len32(Address) function in script engine (link)
- event_sc(DisableOrEnable) function in script engine (link)
Changed
- The old Length Disassembler Engine is replaced by Zydis (link)
[0.2.2.0] - 2023-06-02
The patch for fixing bugs of HyperDbg Debugger.
Changed
- The problem with the callstack command (k) is fixed (link)
[0.2.1.0] - 2023-05-24
The patch for fixing bugs of the second (2nd) release of HyperDbg Debugger.
Changed
- Fixing bugs!
- The parameters of the '!cpuid' extension command is changed, and a new EAX index parameter is added (link)
- The problem with removing EPT hooks (!monitor and !epthook) is fixed (link)
[0.2.0.0] - 2023-05-03
The second (2nd) release of the HyperDbg Debugger.
Added
- HyperDbg Software Development Kit (SDK) is now available
- flush() function in script engine (link)
- memcpy() function in script engine (link)
Changed
- Global code refactoring and fixing bugs!
- Compiling HyperDbg by using the latest Windows 11 WDK
- enable_event function name changed to event_enable (link)
- disable_event function name changed to event_disable (link)
- The "**settings**" command now preserves the configurations in the config file
- The communication buffer is now separated from the hyperlogger buffer chunks and the buffer size is increased X10 times (link)
- Zydis submodule is updated to version 4 (link)
Removed
- enable_event script engine function
- disable_event script engine function
[0.1.0.0] - 2022-05-31
This is the first (1st) release of HyperDbg Debugger.
Added
- # (comment in batch scripts)
- ? (evaluate and execute expressions and scripts in debuggee)
- ~ (display and change the current operating core)
- load (load the kernel modules)
- unload (unload the kernel modules)
- status (show the debuggee status)
- events (show and modify active/disabled events)
- p (step-over)
- t (step-in)
- i (instrumentation step-in)
- r (read or modify registers)
- bp (set breakpoint)
- bl (list breakpoints)
- be (enable breakpoints)
- bd (disable breakpoints)
- bc (clear and remove breakpoints)
- g (continue debuggee or processing kernel packets)
- x (examine symbols and find functions and variables address)
- db, dc, dd, dq (read virtual memory)
- eb, ed, eq (edit virtual memory)
- sb, sd, sq (search virtual memory)
- u, u2 (disassemble virtual address)
- k, kd, kq (display stack backtrace)
- dt (display and map virtual memory to structures)
- struct (make structures, enums, data types from symbols)
- sleep (wait for specific time in the .script command)
- pause (break to the debugger and pause processing kernel packets)
- print (evaluate and print expression in debuggee)
- lm (view loaded modules)
- cpu (check cpu supported technologies)
- rdmsr (read model-specific register)
- wrmsr (write model-specific register)
- flush (remove pending kernel buffers and messages)
- prealloc (reserve pre-allocated pools)
- output (create output source for event forwarding)
- test (test functionalities)
- settings (configures different options and preferences)
- exit (exit from the debugger)
- .help (show the help of commands)
- .debug (prepare and connect to debugger)
- .connect (connect to a session)
- .disconnect (disconnect from a session)
- .listen (listen on a port and wait for the debugger to connect)
- .status (show the debugger status)
- .start (start a new process)
- .restart (restart the process)
- .attach (attach to a process)
- .detach (detach from the process)
- .switch (show the list and switch between active debugging processes)
- .kill (terminate the process)
- .process, .process2 (show the current process and switch to another process)
- .thread, .thread2 (show the current thread and switch to another thread)
- .formats (show number formats)
- .script (run batch script commands)
- .sympath (set the symbol server)
- .sym (load pdb symbols)
- .pe (parse PE file)
- .logopen (open log file)
- .logclose (close log file)
- .cls (clear the screen)
- !pte (display page-level address and entries)
- !db, !dc, !dd, !dq (read physical memory)
- !eb, !ed, !eq (edit physical memory)
- !sb, !sd, !sq (search physical memory)
- !u, !u2 (disassemble physical address)
- !dt (display and map physical memory to structures)
- !epthook (hidden hook with EPT - stealth breakpoints)
- !epthook2 (hidden hook with EPT - detours)
- !monitor (monitor read/write to a page)
- !syscall, !syscall2 (hook system-calls)
- !sysret, !sysret2 (hook SYSRET instruction execution)
- !cpuid (hook CPUID instruction execution)
- !msrread (hook RDMSR instruction execution)
- !msrwrite (hook WRMSR instruction execution)
- !tsc (hook RDTSC/RDTSCP instruction execution)
- !pmc (hook RDPMC instruction execution)
- !vmcall (hook hypercalls)
- !exception (hook first 32 entries of IDT)
- !interrupt (hook external device interrupts)
- !dr (hook access to debug registers)
- !ioin (hook IN instruction execution)
- !ioout (hook OUT instruction execution)
- !hide (enable transparent-mode)
- !unhide (disable transparent-mode)
- !measure (measuring and providing details for transparent-mode)
- !va2pa (convert a virtual address to physical address)
- !pa2va (convert physical address to virtual address)