#816 - fixes and additional windows versions

This commit is contained in:
Dave Lassalle
2024-09-27 10:02:36 -05:00
parent 5302e964b8
commit 48d4048b48
14 changed files with 3774 additions and 132 deletions
+193 -98
View File
@@ -11,12 +11,13 @@ from typing import Tuple, Generator, Set, Dict, Any, Type
from volatility3.framework import interfaces, symbols, exceptions
from volatility3.framework import renderers
from volatility3.framework.interfaces import configuration
from volatility3.framework.configuration import requirements
from volatility3.framework.layers import scanners
from volatility3.framework.objects import utility
from volatility3.framework.renderers import format_hints
from volatility3.framework.symbols import intermed
from volatility3.framework.symbols.windows import pdbutil, versions
from volatility3.framework.symbols.windows import pdbutil
from volatility3.framework.symbols.windows.extensions import pe, consoles
from volatility3.plugins.windows import pslist, vadinfo, info, verinfo
from volatility3.plugins.windows.registry import hivelist
@@ -49,6 +50,9 @@ class Consoles(interfaces.plugins.PluginInterface):
requirements.VersionRequirement(
name="pslist", component=pslist.PsList, version=(2, 0, 0)
),
requirements.VersionRequirement(
name="verinfo", component=verinfo.VerInfo, version=(1, 0, 0)
),
requirements.VersionRequirement(
name="pdbutil", component=pdbutil.PDBUtility, version=(1, 0, 0)
),
@@ -92,18 +96,19 @@ class Consoles(interfaces.plugins.PluginInterface):
"""
for proc in proc_list:
try:
proc_id = proc.UniqueProcessId
proc_layer_name = proc.add_process_layer()
if utility.array_to_string(proc.ImageFileName).lower() == "conhost.exe":
try:
proc_id = proc.UniqueProcessId
proc_layer_name = proc.add_process_layer()
yield proc, proc_layer_name
yield proc, proc_layer_name
except exceptions.InvalidAddressException as excp:
vollog.debug(
"Process {}: invalid address {} in layer {}".format(
proc_id, excp.invalid_address, excp.layer_name
except exceptions.InvalidAddressException as excp:
vollog.debug(
"Process {}: invalid address {} in layer {}".format(
proc_id, excp.invalid_address, excp.layer_name
)
)
)
@classmethod
def find_conhostexe(
@@ -122,7 +127,6 @@ class Consoles(interfaces.plugins.PluginInterface):
"""
for vad in conhost_proc.get_vad_root().traverse():
filename = vad.get_file_name()
if isinstance(filename, str) and filename.lower().endswith("conhost.exe"):
base = vad.get_start()
return base, vad.get_size()
@@ -135,6 +139,9 @@ class Consoles(interfaces.plugins.PluginInterface):
context: interfaces.context.ContextInterface,
layer_name: str,
nt_symbol_table: str,
config_path: str,
conhost_layer_name: str,
conhost_base: int,
) -> Tuple[str, Type]:
"""Tries to determine which symbol filename to use for the image's console information. This is similar to the
netstat plugin.
@@ -143,6 +150,9 @@ class Consoles(interfaces.plugins.PluginInterface):
context: The context to retrieve required elements (layers, symbol tables) from
layer_name: The name of the layer on which to operate
nt_symbol_table: The name of the table containing the kernel symbols
config_path: The config path where to find symbol files
conhost_layer_name: The name of the conhot process memory layer
conhost_base: the base address of conhost.exe
Returns:
The filename of the symbol table to use and the associated class types.
@@ -150,10 +160,6 @@ class Consoles(interfaces.plugins.PluginInterface):
is_64bit = symbols.symbol_table_is_64bit(context, nt_symbol_table)
is_18363_or_later = versions.is_win10_18363_or_later(
context=context, symbol_table=nt_symbol_table
)
if is_64bit:
arch = "x64"
else:
@@ -211,23 +217,15 @@ class Consoles(interfaces.plugins.PluginInterface):
(10, 0, 20348, 1970): "consoles-win10-20348-1970-x64",
(10, 0, 20348, 2461): "consoles-win10-20348-2461-x64",
(10, 0, 20348, 2520): "consoles-win10-20348-2461-x64",
(10, 0, 22000, 0): "consoles-win10-22000-x64",
(10, 0, 22621, 1): "consoles-win10-22621-x64",
(10, 0, 22621, 3672): "consoles-win10-22621-3672-x64",
(10, 0, 25398, 0): "consoles-win10-22000-x64",
}
# we do not need to check for conhost's specific FileVersion in every case
conhost_mod_version = 0 # keep it 0 as a default
# special use cases
# Win10_18363 is not recognized by windows.info as 18363
# because all kernel file headers and debug structures report 18363 as
# "10.0.18362.1198" with the last part being incremented. However, we can use
# os_distinguisher to differentiate between 18362 and 18363
if vers_minor_version == 18362 and is_18363_or_later:
vollog.debug(
"Detected 18363 data structures: working with 18363 symbol table."
)
vers_minor_version = 18363
# we need to define additional version numbers (which are then found via conhost.exe's FileVersion header) in case there is
# ambiguity _within_ an OS version. If such a version number (last number of the tuple) is defined for the current OS
# we need to inspect conhost.exe's headers to see if we can grab the precise version
@@ -240,24 +238,40 @@ class Consoles(interfaces.plugins.PluginInterface):
vollog.debug(
"Requiring further version inspection due to OS version by checking conhost.exe's FileVersion header"
)
# the following is IntelLayer specific and might need to be adapted to other architectures.
physical_layer_name = context.layers[layer_name].config.get(
"memory_layer", None
)
if physical_layer_name:
ver = verinfo.VerInfo.find_version_info(
context, physical_layer_name, "CONHOST.EXE"
)
if ver:
conhost_mod_version = ver[3]
vollog.debug(
"Determined conhost.exe's FileVersion: {}".format(
conhost_mod_version
)
pe_table_name = intermed.IntermediateSymbolTable.create(
context,
configuration.path_join(config_path, "conhost"),
"windows",
"pe",
class_types=pe.class_types
)
try:
(major, minor, product, build) = verinfo.VerInfo.get_version_information(
context, pe_table_name, conhost_layer_name, conhost_base
)
conhost_mod_version = build
vollog.debug(f"Found conhost.exe version {major}.{minor}.{product}.{build} in {conhost_layer_name} at base {conhost_base:#x}")
except (exceptions.InvalidAddressException, TypeError, AttributeError):
# the following is IntelLayer specific and might need to be adapted to other architectures.
physical_layer_name = context.layers[layer_name].config.get(
"memory_layer", None
)
if physical_layer_name:
ver = verinfo.VerInfo.find_version_info(
context, physical_layer_name, "CONHOST.EXE"
)
else:
vollog.debug("Could not determine conhost.exe's FileVersion.")
if ver:
conhost_mod_version = ver[3]
vollog.debug(
"Determined conhost.exe's FileVersion: {}".format(
conhost_mod_version
)
)
else:
vollog.debug("Could not determine conhost.exe's FileVersion.")
else:
vollog.debug(
"Unable to retrieve physical memory layer, skipping FileVersion check."
@@ -287,6 +301,7 @@ class Consoles(interfaces.plugins.PluginInterface):
for nt_maj, nt_min, vers_min, conhost_ver in version_dict
if nt_maj == nt_major_version
and nt_min == nt_minor_version
and vers_min <= vers_minor_version
and conhost_ver <= conhost_mod_version
]
current_versions.sort()
@@ -321,6 +336,8 @@ class Consoles(interfaces.plugins.PluginInterface):
layer_name: str,
nt_symbol_table: str,
config_path: str,
conhost_layer_name: str,
conhost_base: int,
) -> str:
"""Creates a symbol table for conhost structures.
@@ -339,13 +356,16 @@ class Consoles(interfaces.plugins.PluginInterface):
context,
layer_name,
nt_symbol_table,
config_path,
conhost_layer_name,
conhost_base,
)
vollog.debug(f"Using symbol file '{symbol_filename}' and types {class_types}")
return intermed.IntermediateSymbolTable.create(
context,
config_path,
configuration.path_join(config_path, "conhost"),
os.path.join("windows", "consoles"),
symbol_filename,
class_types=class_types,
@@ -383,9 +403,7 @@ class Consoles(interfaces.plugins.PluginInterface):
that console information structure.
"""
conhost_symbol_table = cls.create_conhost_symbol_table(
context, kernel_layer_name, kernel_table_name, config_path
)
conhost_symbol_table = None
for conhost_proc, proc_layer_name in cls.find_conhost_proc(procs):
if not conhost_proc:
@@ -407,6 +425,16 @@ class Consoles(interfaces.plugins.PluginInterface):
proc_layer = context.layers[proc_layer_name]
if conhost_symbol_table is None:
conhost_symbol_table = cls.create_conhost_symbol_table(
context,
kernel_layer_name,
kernel_table_name,
config_path,
proc_layer_name,
conhostexe_base
)
conhost_module = context.module(
conhost_symbol_table, proc_layer_name, offset=conhostexe_base
)
@@ -560,6 +588,60 @@ class Consoles(interfaces.plugins.PluginInterface):
}
)
vollog.debug(
f"Getting ExeAliasList entries for {console_info.ExeAliasList}"
)
console_properties.append(
{
"level": 1,
"name": "_CONSOLE_INFORMATION.ExeAliasList",
"address": console_info.ExeAliasList.vol.offset,
"data": "",
}
)
if console_info.ExeAliasList:
for index, exe_alias_list in enumerate(
console_info.get_exe_aliases()
):
try:
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ExeAliasList.AliasList_{index}",
"address": exe_alias_list.vol.offset,
"data": "",
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ExeAliasList.AliasList_{index}.ExeName",
"address": exe_alias_list.ExeName.vol.offset,
"data": exe_alias_list.get_exename(),
}
)
for alias_index, alias in enumerate(exe_alias_list.get_aliases()):
console_properties.append(
{
"level": 3,
"name": f"_CONSOLE_INFORMATION.ExeAliasList.AliasList_{index}.Alias_{alias_index}.Source",
"address": alias.Source.vol.offset,
"data": alias.get_source(),
}
)
console_properties.append(
{
"level": 3,
"name": f"_CONSOLE_INFORMATION.ExeAliasList.AliasList_{index}.Alias_{alias_index}.Target",
"address": alias.Target.vol.offset,
"data": alias.get_target(),
}
)
except Exception as e:
vollog.debug(
f"reading {exe_alias_list} encountered exception {e}"
)
vollog.debug(
f"Getting HistoryList entries for {console_info.HistoryList}"
)
@@ -639,60 +721,66 @@ class Consoles(interfaces.plugins.PluginInterface):
f"reading {command_history} encountered exception {e}"
)
vollog.debug(f"Getting ScreenBuffer entries for {console_info}")
console_properties.append(
{
"level": 1,
"name": "_CONSOLE_INFORMATION.CurrentScreenBuffer",
"address": console_info.CurrentScreenBuffer.vol.offset,
"data": "",
}
)
for screen_index, screen_info in enumerate(
console_info.get_screens()
):
try:
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}",
"address": screen_info,
"data": "",
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}.ScreenX",
"address": None,
"data": screen_info.ScreenX,
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}.ScreenY",
"address": None,
"data": screen_info.ScreenY,
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}.Dump",
"address": None,
"data": "\n".join(screen_info.get_buffer()),
}
)
except Exception as e:
vollog.debug(
f"reading {screen_info} encountered exception {e}"
)
try:
vollog.debug(f"Getting ScreenBuffer entries for {console_info}")
console_properties.append(
{
"level": 1,
"name": "_CONSOLE_INFORMATION.CurrentScreenBuffer",
"address": console_info.CurrentScreenBuffer.vol.offset,
"data": "",
}
)
for screen_index, screen_info in enumerate(
console_info.get_screens()
):
try:
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}",
"address": screen_info,
"data": "",
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}.ScreenX",
"address": None,
"data": screen_info.ScreenX,
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}.ScreenY",
"address": None,
"data": screen_info.ScreenY,
}
)
console_properties.append(
{
"level": 2,
"name": f"_CONSOLE_INFORMATION.ScreenBuffer_{screen_index}.Dump",
"address": None,
"data": "\n".join(screen_info.get_buffer()),
}
)
except Exception as e:
vollog.debug(
f"reading {screen_info} encountered exception {e}"
)
except Exception as e:
vollog.debug(
f"reading _CONSOLE_INFORMATION.CurrentScreenBuffer encountered exception {e}"
)
except exceptions.PagedInvalidAddressException as exp:
vollog.debug(
f"Required memory at {exp.invalid_address:#x} is not valid"
)
continue
yield conhost_proc, console_info, console_properties
@@ -776,6 +864,7 @@ class Consoles(interfaces.plugins.PluginInterface):
vollog.debug(f"Possible CommandHistorySize values: {max_history}")
vollog.debug(f"Possible HistoryBufferMax values: {max_buffers}")
proc = None
for proc, console_info, console_properties in self.get_console_info(
self.context,
kernel.layer_name,
@@ -786,13 +875,14 @@ class Consoles(interfaces.plugins.PluginInterface):
max_buffers,
):
process_name = utility.array_to_string(proc.ImageFileName)
process_pid = proc.UniqueProcessId
if console_info and console_properties:
for console_property in console_properties:
yield (
console_property["level"],
(
proc.UniqueProcessId,
process_pid,
process_name,
format_hints.Hex(console_info.vol.offset),
console_property["name"],
@@ -804,6 +894,11 @@ class Consoles(interfaces.plugins.PluginInterface):
str(console_property["data"]),
),
)
else:
vollog.warn(f"_CONSOLE_INFORMATION not found for {process_name} with pid {process_pid}.")
if proc is None:
vollog.warn("No conhost.exe processes found.")
def _conhost_proc_filter(self, proc):
"""
@@ -811,7 +906,7 @@ class Consoles(interfaces.plugins.PluginInterface):
"""
process_name = utility.array_to_string(proc.ImageFileName)
return process_name != "conhost.exe"
return process_name.lower() != "conhost.exe"
def run(self):
kernel = self.context.modules[self.config["kernel"]]
@@ -13,7 +13,7 @@ from volatility3.framework.layers import scanners
from volatility3.framework.renderers import format_hints
from volatility3.framework.symbols import intermed
from volatility3.framework.symbols.windows.extensions import pe
from volatility3.plugins.windows import pslist, modules, dlllist
from volatility3.plugins.windows import pslist, modules
vollog = logging.getLogger(__name__)
@@ -152,8 +152,8 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 1392
}
@@ -562,7 +562,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -581,6 +582,70 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"ExeName": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 24
},
"AliasList": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 32
}
},
"kind": "struct",
"size": 48
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -152,8 +152,8 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 1392
}
@@ -562,7 +562,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -581,6 +582,70 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 16
},
"ExeName": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 24
},
"AliasList": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 32
}
},
"kind": "struct",
"size": 48
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -152,10 +152,10 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 1436
"offset": -856
}
},
"kind": "struct",
@@ -552,7 +552,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -571,6 +572,70 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"ExeName": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 24
},
"AliasList": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 32
}
},
"kind": "struct",
"size": 48
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -1,5 +1,5 @@
{
"symbols": {},
"symbols": {},
"enums": {},
"base_types": {
"unsigned long": {
@@ -152,8 +152,8 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 1436
}
@@ -552,7 +552,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -571,6 +572,70 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"ExeName": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 24
},
"AliasList": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 32
}
},
"kind": "struct",
"size": 48
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -152,8 +152,11 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 2410
}
@@ -562,7 +565,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -581,6 +585,104 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -152,8 +152,11 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 9232
}
@@ -562,7 +565,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -581,6 +585,104 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -152,8 +152,11 @@
},
"ExeAliasList": {
"type": {
"kind": "base",
"name": "unsigned short"
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": -376
}
@@ -562,7 +565,8 @@
}
},
"offset": 88
} },
}
},
"kind": "struct",
"size": 96
},
@@ -581,6 +585,104 @@
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
@@ -0,0 +1,722 @@
{
"symbols": {},
"enums": {},
"base_types": {
"unsigned long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned char": {
"kind": "char",
"size": 1,
"signed": false,
"endian": "little"
},
"pointer": {
"kind": "int",
"size": 8,
"signed": false,
"endian": "little"
},
"unsigned int": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned short": {
"kind": "int",
"size": 2,
"signed": false,
"endian": "little"
},
"short": {
"kind": "int",
"size": 2,
"signed": true,
"endian": "little"
},
"long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
}
},
"user_types": {
"_CONSOLE_INFORMATION": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 24
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 26
},
"CommandHistorySize": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 136
},
"HistoryBufferMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 140
},
"OriginalTitle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 1648
},
"Title": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 1616
},
"GetScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 1664
},
"CurrentScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 1296
},
"ConsoleProcessList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 1272
},
"ProcessCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 1280
},
"HistoryList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": -920
},
"HistoryBufferCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": -912
},
"ExeAliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": -1008
}
},
"kind": "struct",
"size": 140
},
"_VECTOR": {
"fields": {
"Begin": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 0
},
"End": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 8
},
"EndCapacity": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "unsigned long"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_COMMAND": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
},
"_CONSOLE_PROCESS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ConsoleProcess": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_CONSOLE_PROCESS_HANDLE": {
"fields": {
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 52
},
"_CONSOLE_PROCESS": {
"fields": {
"ProcessId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 28
},
"ThreadId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 32
},
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 24
},
"_COMMAND_HISTORY": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"CommandBucket": {
"type": {
"kind": "struct",
"name": "_VECTOR"
},
"offset": 16
},
"CommandCountMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 40
},
"Application": {
"type": {
"kind": "struct",
"name": "_COMMAND"
},
"offset": 48
},
"ConsoleProcessHandle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS_HANDLE"
}
},
"offset": 80
},
"Flags": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 88
},
"LastDisplayed": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 92
}
},
"kind": "struct",
"size": 96
},
"_SCREEN_INFORMATION": {
"fields": {
"TextBufferInfo": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 56
},
"Next": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 64
}
},
"kind": "struct",
"size": 72
},
"_ROW_POINTER": {
"fields": {
"Row": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROWS_ARRAY": {
"fields": {
"Rows": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_TEXT_BUFFER_INFO": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 4
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 6
},
"BufferRows": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROWS_ARRAY"
}
},
"offset": 8
},
"BufferCapacity": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 6
},
"ThisBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 32
},
"FirstRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 8
},
"LastRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 16
},
"BufferStart": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 80
}
},
"kind": "struct",
"size": 72
},
"_CHAR_ROW_CELL": {
"fields": {
"Text": {
"type": {
"kind": "struct",
"name": "nt_symbols!_UNICODE_STRING"
},
"offset": 0
},
"DbcsAttribute": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 2
}
},
"kind": "struct",
"size": 3
},
"_CHAR_ROW_CELL_ARRAY": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROW": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": -88
},
"CharRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL_ARRAY"
}
},
"offset": 0
},
"RowLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": -18
},
"Index": {
"type": {
"kind": "base",
"name": "short"
},
"offset": -20
},
"RowLength2": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Allocated": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 16
},
"TextBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": -8
}
},
"kind": "struct",
"size": 480
},
"_DEQUE": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "void"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
"producer": {
"version": "0.0.1",
"name": "Dave Lassalle",
"datetime": "2024-07-31T15:05:35-06:00"
},
"format": "4.1.0"
}
}
@@ -0,0 +1,722 @@
{
"symbols": {},
"enums": {},
"base_types": {
"unsigned long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned char": {
"kind": "char",
"size": 1,
"signed": false,
"endian": "little"
},
"pointer": {
"kind": "int",
"size": 8,
"signed": false,
"endian": "little"
},
"unsigned int": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned short": {
"kind": "int",
"size": 2,
"signed": false,
"endian": "little"
},
"short": {
"kind": "int",
"size": 2,
"signed": true,
"endian": "little"
},
"long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
}
},
"user_types": {
"_CONSOLE_INFORMATION": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 2400
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 2402
},
"CommandHistorySize": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2512
},
"HistoryBufferMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2516
},
"OriginalTitle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 2944
},
"Title": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 2912
},
"GetScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 3008
},
"CurrentScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 2632
},
"ConsoleProcessList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 2608
},
"ProcessCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2616
},
"HistoryList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 10640
},
"HistoryBufferCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 10648
},
"ExeAliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 10552
}
},
"kind": "struct",
"size": 140
},
"_VECTOR": {
"fields": {
"Begin": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 0
},
"End": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 8
},
"EndCapacity": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "unsigned long"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_COMMAND": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
},
"_CONSOLE_PROCESS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ConsoleProcess": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_CONSOLE_PROCESS_HANDLE": {
"fields": {
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 52
},
"_CONSOLE_PROCESS": {
"fields": {
"ProcessId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 28
},
"ThreadId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 32
},
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 24
},
"_COMMAND_HISTORY": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"CommandBucket": {
"type": {
"kind": "struct",
"name": "_VECTOR"
},
"offset": 16
},
"CommandCountMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 40
},
"Application": {
"type": {
"kind": "struct",
"name": "_COMMAND"
},
"offset": 48
},
"ConsoleProcessHandle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS_HANDLE"
}
},
"offset": 80
},
"Flags": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 88
},
"LastDisplayed": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 92
}
},
"kind": "struct",
"size": 96
},
"_SCREEN_INFORMATION": {
"fields": {
"TextBufferInfo": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 56
},
"Next": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 64
}
},
"kind": "struct",
"size": 72
},
"_ROW_POINTER": {
"fields": {
"Row": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROWS_ARRAY": {
"fields": {
"Rows": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_TEXT_BUFFER_INFO": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 4
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 6
},
"BufferRows": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROWS_ARRAY"
}
},
"offset": 8
},
"BufferCapacity": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 6
},
"ThisBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 32
},
"FirstRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 8
},
"LastRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 16
},
"BufferStart": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 72
}
},
"kind": "struct",
"size": 72
},
"_CHAR_ROW_CELL": {
"fields": {
"Text": {
"type": {
"kind": "struct",
"name": "nt_symbols!_UNICODE_STRING"
},
"offset": 0
},
"DbcsAttribute": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 2
}
},
"kind": "struct",
"size": 3
},
"_CHAR_ROW_CELL_ARRAY": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROW": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": -80
},
"CharRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL_ARRAY"
}
},
"offset": 0
},
"RowLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Index": {
"type": {
"kind": "base",
"name": "short"
},
"offset": -20
},
"RowLength2": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Allocated": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 16
},
"TextBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": -16
}
},
"kind": "struct",
"size": 472
},
"_DEQUE": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "void"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
"producer": {
"version": "0.0.1",
"name": "Dave Lassalle",
"datetime": "2024-07-31T15:05:35-06:00"
},
"format": "4.1.0"
}
}
@@ -0,0 +1,722 @@
{
"symbols": {},
"enums": {},
"base_types": {
"unsigned long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned char": {
"kind": "char",
"size": 1,
"signed": false,
"endian": "little"
},
"pointer": {
"kind": "int",
"size": 8,
"signed": false,
"endian": "little"
},
"unsigned int": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned short": {
"kind": "int",
"size": 2,
"signed": false,
"endian": "little"
},
"short": {
"kind": "int",
"size": 2,
"signed": true,
"endian": "little"
},
"long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
}
},
"user_types": {
"_CONSOLE_INFORMATION": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 2400
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 2402
},
"CommandHistorySize": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2512
},
"HistoryBufferMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2516
},
"OriginalTitle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 2944
},
"Title": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 2912
},
"GetScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 3008
},
"CurrentScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 2632
},
"ConsoleProcessList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 2608
},
"ProcessCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2616
},
"HistoryList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 10664
},
"HistoryBufferCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 10672
},
"ExeAliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 10576
}
},
"kind": "struct",
"size": 140
},
"_VECTOR": {
"fields": {
"Begin": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 0
},
"End": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 8
},
"EndCapacity": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "unsigned long"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_COMMAND": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
},
"_CONSOLE_PROCESS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ConsoleProcess": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_CONSOLE_PROCESS_HANDLE": {
"fields": {
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 52
},
"_CONSOLE_PROCESS": {
"fields": {
"ProcessId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 28
},
"ThreadId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 32
},
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 24
},
"_COMMAND_HISTORY": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"CommandBucket": {
"type": {
"kind": "struct",
"name": "_VECTOR"
},
"offset": 16
},
"CommandCountMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 40
},
"Application": {
"type": {
"kind": "struct",
"name": "_COMMAND"
},
"offset": 48
},
"ConsoleProcessHandle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS_HANDLE"
}
},
"offset": 80
},
"Flags": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 88
},
"LastDisplayed": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 92
}
},
"kind": "struct",
"size": 96
},
"_SCREEN_INFORMATION": {
"fields": {
"TextBufferInfo": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 56
},
"Next": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 64
}
},
"kind": "struct",
"size": 72
},
"_ROW_POINTER": {
"fields": {
"Row": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROWS_ARRAY": {
"fields": {
"Rows": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_TEXT_BUFFER_INFO": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 4
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 6
},
"BufferRows": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROWS_ARRAY"
}
},
"offset": 8
},
"BufferCapacity": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 6
},
"ThisBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 32
},
"FirstRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 8
},
"LastRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 16
},
"BufferStart": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 72
}
},
"kind": "struct",
"size": 72
},
"_CHAR_ROW_CELL": {
"fields": {
"Text": {
"type": {
"kind": "struct",
"name": "nt_symbols!_UNICODE_STRING"
},
"offset": 0
},
"DbcsAttribute": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 2
}
},
"kind": "struct",
"size": 3
},
"_CHAR_ROW_CELL_ARRAY": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROW": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": -96
},
"CharRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL_ARRAY"
}
},
"offset": 0
},
"RowLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Index": {
"type": {
"kind": "base",
"name": "short"
},
"offset": -20
},
"RowLength2": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Allocated": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 16
},
"TextBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": -8
}
},
"kind": "struct",
"size": 480
},
"_DEQUE": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "void"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
"producer": {
"version": "0.0.1",
"name": "Dave Lassalle",
"datetime": "2024-07-31T15:05:35-06:00"
},
"format": "4.1.0"
}
}
@@ -0,0 +1,723 @@
{
"symbols": {},
"enums": {},
"base_types": {
"unsigned long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned char": {
"kind": "char",
"size": 1,
"signed": false,
"endian": "little"
},
"pointer": {
"kind": "int",
"size": 8,
"signed": false,
"endian": "little"
},
"unsigned int": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
},
"unsigned short": {
"kind": "int",
"size": 2,
"signed": false,
"endian": "little"
},
"short": {
"kind": "int",
"size": 2,
"signed": true,
"endian": "little"
},
"long": {
"kind": "int",
"size": 4,
"signed": false,
"endian": "little"
}
},
"user_types": {
"_CONSOLE_INFORMATION": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 2592
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 2594
},
"CommandHistorySize": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2704
},
"HistoryBufferMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2708
},
"OriginalTitle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 3056
},
"Title": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 3120
},
"GetScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 3216
},
"CurrentScreenBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 2824
},
"ConsoleProcessList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 2800
},
"ProcessCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 2808
},
"HistoryList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": -360
},
"HistoryBufferCount": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": -352
},
"ExeAliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 3776
}
},
"kind": "struct",
"size": 140
},
"_VECTOR": {
"fields": {
"Begin": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 0
},
"End": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_COMMAND"
}
},
"offset": 8
},
"EndCapacity": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "unsigned long"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_COMMAND": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
},
"_CONSOLE_PROCESS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ConsoleProcess": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS"
}
},
"offset": 16
}
},
"kind": "struct",
"size": 24
},
"_CONSOLE_PROCESS_HANDLE": {
"fields": {
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 52
},
"_CONSOLE_PROCESS": {
"fields": {
"ProcessId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 28
},
"ThreadId": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 32
},
"ProcessHandle": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 48
}
},
"kind": "struct",
"size": 24
},
"_COMMAND_HISTORY": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"CommandBucket": {
"type": {
"kind": "struct",
"name": "_VECTOR"
},
"offset": 16
},
"CommandCountMax": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 40
},
"Application": {
"type": {
"kind": "struct",
"name": "_COMMAND"
},
"offset": 48
},
"ConsoleProcessHandle": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CONSOLE_PROCESS_HANDLE"
}
},
"offset": 80
},
"Flags": {
"type": {
"kind": "base",
"name": "unsigned short"
},
"offset": 88
},
"LastDisplayed": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 92
}
},
"kind": "struct",
"size": 96
},
"_SCREEN_INFORMATION": {
"fields": {
"TextBufferInfo": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 56
},
"Next": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_SCREEN_INFORMATION"
}
},
"offset": 64
}
},
"kind": "struct",
"size": 72
},
"_ROW_POINTER": {
"fields": {
"Row": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROWS_ARRAY": {
"fields": {
"Rows": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_ROW_POINTER"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_TEXT_BUFFER_INFO": {
"fields": {
"ScreenX": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"ScreenY": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 10
},
"BufferRows": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROWS_ARRAY"
}
},
"offset": 16
},
"BufferCapacity": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 10
},
"ThisBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": 40
},
"FirstRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 16
},
"LastRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": 24
},
"BufferStart": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 88
}
},
"kind": "struct",
"size": 72
},
"_CHAR_ROW_CELL": {
"fields": {
"Text": {
"type": {
"kind": "struct",
"name": "nt_symbols!_UNICODE_STRING"
},
"offset": 0
},
"DbcsAttribute": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 2
}
},
"kind": "struct",
"size": 3
},
"_CHAR_ROW_CELL_ARRAY": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_ROW": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_ROW"
}
},
"offset": -88
},
"CharRow": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_CHAR_ROW_CELL_ARRAY"
}
},
"offset": 0
},
"RowLength": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Index": {
"type": {
"kind": "base",
"name": "short"
},
"offset": -20
},
"RowLength2": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 8
},
"Allocated": {
"type": {
"kind": "base",
"name": "short"
},
"offset": 16
},
"TextBuffer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "_TEXT_BUFFER_INFO"
}
},
"offset": -8
}
},
"kind": "struct",
"size": 464
},
"_DEQUE": {
"fields": {
"Blink": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "void"
}
},
"offset": 0
}
},
"kind": "struct",
"size": 8
},
"_EXE_ALIAS_LIST": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"ExeName": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"AliasList": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
}
},
"offset": 56
}
},
"kind": "struct",
"size": 64
},
"_ALIAS": {
"fields": {
"ListEntry": {
"type": {
"kind": "struct",
"name": "nt_symbols!_LIST_ENTRY"
},
"offset": 0
},
"Source": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 16
},
"Target": {
"type": {
"kind": "struct",
"name": "_ALIAS_STRING"
},
"offset": 48
}
},
"kind": "struct",
"size": 32
},
"_ALIAS_STRING": {
"fields": {
"Chars": {
"type": {
"count": 1,
"kind": "array",
"subtype": {
"kind": "base",
"name": "unsigned char"
}
},
"offset": 0
},
"Pointer": {
"type": {
"kind": "pointer",
"subtype": {
"kind": "base",
"name": "string"
}
},
"offset": 0
},
"Length": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 16
},
"Allocated": {
"type": {
"kind": "base",
"name": "unsigned int"
},
"offset": 24
}
},
"kind": "struct",
"size": 32
}
},
"metadata": {
"producer": {
"version": "0.0.1",
"name": "Dave Lassalle",
"datetime": "2024-07-31T15:05:35-06:00"
},
"format": "4.1.0"
}
}
@@ -9,30 +9,42 @@ from volatility3.framework import constants
class ROW(objects.StructType):
"""A Row Structure."""
def _valid_dbcs(self, c):
def _valid_dbcs(self, c, n):
# TODO this need more research and testing
# https://github.com/search?q=repo%3Amicrosoft%2Fterminal+DbcsAttr&type=code
valid = c in (
valid = n == 0 and c in (
0x0,
0x1,
0x2,
0x8,
0x10,
0x18,
0x20,
0x28,
0x30,
0x48,
0x50,
0x58,
0x60,
0x68,
0x70,
0x78,
0x80,
0x88,
0xA8,
0xB8,
0xC0,
0xC8,
0x98,
0xD8,
0xE0,
0xE8,
0xF8,
0xF0,
0xA0,
)
# if not valid:
# print("Bad Dbcs Attribute {}".format(hex(c)))
if n == 0 and not valid:
print("Bad Dbcs Attribute {}".format(hex(c)))
return valid
def get_text(self, truncate=True):
@@ -50,10 +62,9 @@ class ROW(objects.StructType):
try:
if char_row:
line = "".join(
# "{} {} =".format(char_row[i:i + 2].decode('utf-16le', errors='replace'), char_row[i+2]) if self._valid_dbcs(char_row[i+2]) else ""
(
char_row[i : i + 2].decode("utf-16le", errors="replace")
if self._valid_dbcs(char_row[i + 2])
if self._valid_dbcs(char_row[i + 2], char_row[i+1])
else ""
)
for i in range(0, len(char_row), 3)
@@ -68,12 +79,78 @@ class ROW(objects.StructType):
return line
class ALIAS(objects.StructType):
"""An Alias Structure"""
def get_source(self):
if self.Source.Length < 8:
return self.Source.Chars.cast(
"string",
encoding="utf-16",
errors="replace",
max_length=self.Source.Length * 2,
)
elif self.Source.Length < 1024:
return self.Source.Pointer.dereference().cast(
"string", encoding="utf-16", errors="replace", max_length=512
)
def get_target(self):
if self.Target.Length < 8:
return self.Target.Chars.cast(
"string",
encoding="utf-16",
errors="replace",
max_length=self.Target.Length * 2,
)
elif self.Target.Length < 1024:
return self.Target.Pointer.dereference().cast(
"string", encoding="utf-16", errors="replace", max_length=512
)
class EXE_ALIAS_LIST(objects.StructType):
"""An Exe Alias List Structure"""
def get_exename(self):
exe_name = self.ExeName
# Windows 10 22000 and Server 20348 removed the Pointer
if isinstance(exe_name, objects.Pointer):
exe_name = exe_name.dereference()
return exe_name.get_string()
if self.ExeName.Length < 8:
return self.ExeName.Chars.cast(
"string",
encoding="utf-16",
errors="replace",
max_length=self.ExeName.Length * 2,
)
elif self.ExeName.Length < 1024:
return self.ExeName.Pointer.dereference().cast(
"string", encoding="utf-16", errors="replace", max_length=512
)
def get_aliases(self):
"""Generator for the individual aliases for a
particular executable."""
for alias in self.AliasList.to_list(
f"{self.get_symbol_table_name()}{constants.BANG}_ALIAS",
"ListEntry",
):
yield alias
class SCREEN_INFORMATION(objects.StructType):
"""A Screen Information Structure."""
@property
def ScreenX(self):
return self.TextBufferInfo.BufferRows.Rows[0].Row.RowLength2
# 22000 change from an array of pointers to _ROW to an array of _ROW
row = self.TextBufferInfo.BufferRows.Rows[0]
if hasattr(row, "Row"):
return row.Row.RowLength2
else:
return row.RowLength2
@property
def ScreenY(self):
@@ -127,7 +204,9 @@ class SCREEN_INFORMATION(objects.StructType):
for i in range(capacity):
index = (start + i) % capacity
row = buffer_rows.Rows[index].Row
row = buffer_rows.Rows[index]
if hasattr(row, "Row"):
row = row.Row
try:
text = row.get_text(truncate_lines)
rows.append(text)
@@ -138,9 +217,9 @@ class SCREEN_INFORMATION(objects.StructType):
rows = self._truncate_rows(rows)
if rows:
rows = ["=== Start of buffer ==="] + rows + ["=== End of buffer ==="]
rows = ["=== START OF BUFFER ==="] + rows + ["=== END OF BUFFER ==="]
else:
rows = ["=== No buffer data found ==="]
rows = ["=== NO BUFFER DATA FOUND ==="]
return rows
@@ -198,6 +277,17 @@ class CONSOLE_INFORMATION(objects.StructType):
):
yield cmd_hist
def get_exe_aliases(self):
exe_alias_list = self.ExeAliasList
# Windows 10 22000 and Server 20348 made this a Pointer
if isinstance(exe_alias_list, objects.Pointer):
exe_alias_list = exe_alias_list.dereference()
for exe_alias_list_item in exe_alias_list.to_list(
f"{self.get_symbol_table_name()}{constants.BANG}_EXE_ALIAS_LIST",
"ListEntry"
):
yield exe_alias_list_item
def get_processes(self):
for proc in self.ConsoleProcessList.dereference().to_list(
f"{self.get_symbol_table_name()}{constants.BANG}_CONSOLE_PROCESS_LIST",
@@ -331,6 +421,8 @@ class COMMAND_HISTORY(objects.StructType):
win10_x64_class_types = {
"_EXE_ALIAS_LIST": EXE_ALIAS_LIST,
"_ALIAS": ALIAS,
"_ROW": ROW,
"_SCREEN_INFORMATION": SCREEN_INFORMATION,
"_CONSOLE_INFORMATION": CONSOLE_INFORMATION,