https://github.com/ShaneK2/inVtero.net/blob/master/quickdumps/publish.zip
Linux 使用符号服务器进行类型解析,它就可以工作;)
查看 inVteroCore 版本,为 Linux 上的 XEN 和 VMWare(或运行 CORECLR 的任何地方、OSX 和 FBSD)提供完整性
##$ 重要(.NET 上的 Windows 用户)=> 您确实需要注册 msdia140.dll“cmd /c regsvr32 msdia140.dll”(请参阅 zip)
无需配置,完全动态/鸭子打字
用于内存编辑(反汇编和修补)支持格式的新 UI。在 vtero 实例上使用“Loader()”,例如;
Loader(test(MemList))
更改 MemoryDump 字符串以指向内存转储。 analyze.py 中的示例内存转储行走和类型系统说明,请参阅 WalkProcListExample()
quickdumps
>>> MemList = [ "c:\temp\win10.64.xendump" ]
>>> test(MemList)
++++++++++++++++++++++++++++++ ANALYZING INPUT [c:tempwin10.64.xendump] ++++++++++++++++++++++++++++++
PART RUNTIME: 00:00:08.5211677 (seconds), INPUT DUMP SIZE: 4,303,692,448.00 bytes.
SPEED: 466,980 KB / second (all phases aggregate time)
++++++++++++++++++++++++++++++ DONE WITH INPUT [c:tempwin10.64.xendump] ++++++++++++++++++++++++++++++
>>> Loader(vtero)
使用独立于微架构的虚拟机自省技术在内存转储中查找/提取进程、管理程序(包括嵌套)。跨平台、多架构高性能物理内存分析工具。
x64 版本 |
---|
Quickdumps 是使用 inVtero.net API 提取和验证物理内存的示例。
我们初始化虚拟到物理地址转换的方式,不依赖于输入文件格式。任何 .DMP、.RAW、.DD 都应该没问题。不幸的是,如果底层捕获格式使用某种形式的范围存储(即不消耗 NULL 或 NOT PRESENT 页面的物理存储),则有一个很大的问题,您的里程可能会有所不同。有很多用于转换内存转储、波动性的工具 - rekal 是一些不错的起点。位图。 DMP 文件是待办事项,以便更轻松地分析 livedump(目前,如果您手动启动蓝屏并配置完整转储或使用第 3 方原始 dd 类型工具,效果最好)。
使用几个概念来确保我们仅在需要时与用户交互。类似地,对于 Actaeon github 项目@eurecom-s3/actaeon,主要目标是定位和利用 VMCS 页面,以便定位配置的 EPTP(扩展页表指针),该指针是定位属于某个虚拟机的物理页面所必需的。来宾操作系统实例。 Google @google/rekall rekal 随后实现了一个更广泛的实现,它要求用户在给定内存转储所产生的系统上运行 Linux 内核模块,这意味着构建一个专用配置文件,可用于然后导入到本地 rekal 中配置文件,它将使您能够从物理主机转储中隔离/提取来宾内存。
在 CanSecWest/DC22 期间,我提出了一种高质量技术(基于 CPU 和 OS mm 层之间的最低层交互),通过检查物理内存快照来识别系统上运行的任何进程。这种机制基于所谓的自指针 (Windows) 或递归页目录指针 (*BSD),它们总是期望被发现(除非您的 Windows 系统有经过大量修改/修补的 mm,或者只是 * 的自定义内核) BSD)。最终结果是我们知道所有给定的 CR3 寄存器值。由于 VMCS 至少包含 1 个已知的 CR3 值(可以模拟或动态重新映射第二个值),因此我们有信心在不了解底层操作系统版本(例如 XP(64 位)->Win2016 是一致)或微架构。
暴力最终总会获胜!或者我听说...无论如何,如果发现未知的 VMCS 映射(EPTP 索引),快速转储将发出一组可能的值/索引。该列表通常很小,最多 10-20 个。即将推出的一项功能是自动尝试每个可能的值,直到找到“有效”的值。这应该确保我们无需更改任何代码即可适用于即将推出的 CPU 微架构(或者我可能会设置一些指定这些的类以使生活变得轻松)。不管怎样,暴力破解应该相当快。我尝试充分利用多核 CPU,因此如果您有额外的核心,那么当您分析包含许多虚拟机的大型转储时,它们可能会得到锻炼。
从笔记本电脑运行的示例:
Process CR3 [00000002DD41F000] File Offset [0000000293A12000] Diff [FFFFFFFFB65F3000] Type [Windows]
159 candiate process page tables. Time so far: 00:01:01.4826693, second pass starting. rate: 32588.149 MB/s
Hypervisor: VMCS revision field: 16384 [00004000] abort indicator: NO_ABORT [00000000]▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Hypervisor: Windows CR3 found [00000000016A0000)] byte-swapped: [00006A0100000000] @ PAGE/File Offset = [00000001262DA000]
[435][00000000006F0054]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001308D3000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [0000000130AD1000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001314CF000]
[14][000000007433301E]
Hypervisor: VMCS revision field: 0 [00000000] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000016A0000)] byte-swapped: [00006A0100000000] @ PAGE/File Offset = [0000000160643000]
[106][00000000001E001C]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [0000000195922000]
[14][000000007433301E]
Hypervisor: VMCS revision field: VMWARE_NESTED [00000001] abort indicator: NO_ABORT [00000000]
Hypervisor: Windows CR3 found [00000000001AB000)] byte-swapped: [00B01A0000000000] @ PAGE/File Offset = [00000001959A3000]
[14][000000007433301E]
159 candiate VMCS pages. Time to process: 00:02:51.8973861
Data scanned: 34,171,150,654.00Second pass done. rate: 1277.967 MB/s▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
grouping and joinging all memory
Scanning for group correlations
MemberProces: Groupt 1 Type [Windows] Group Correlation [100.000 %] PID [1AB000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [16A0000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [1FCA000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [62AB000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [34CE8000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [37300000]
MemberProces: Groupt 1 Type [Windows] Group Correlation [90.909 %] PID [7DCC6000]
Finished Group 1 collected size 48 next group
Scanning for group correlations
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [65C8000]
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [6B51000]
MemberProces: Groupt 2 Type [FreeBSD] Group Correlation [100.000 %] PID [6CC9000]
在上面的示例中,VMWARE 的 EPTP 位于其 VMCS 中的索引 14。
* 我们将看看是否能将其淘汰,但现在它只是从每一层转储内核内存。在来宾操作系统虚拟机的用户空间上工作。
有很多 TODO,但我会尽快添加。现在的主要问题是,我真的很犹豫是否要添加操作系统提供的任何内容,即使它会有很大的帮助。我认为有足够的上下文可以避免添加任何逻辑操作系统依赖项。我喜欢 Rekal 的承诺,但他们的个人资料档案似乎也很大,所以两者都有。
仍有一些清理工作要做。这仍然是 alpha 版本,但将积极开发。
扩展到更多已知的 EPTP 类型,因此无需暴力破解
将创建一个 PFN 位图索引来自动神奇地确定运行(目前,如果您尝试在运行后转储/查询任何内容,则会导致问题或丢失等。接下来将添加此索引以确保我们获得 100% 全面转储。
避免使用操作系统逻辑结构来支持内存分析。大多数操作系统层结构、数据、代码和对象可能会被攻击者操纵,从而误导分析师的工作。
即将推出的功能可呈现代码页的完整性映射,这些代码页可以映射回加密安全的块/页哈希值(即 SHA256 或 TIGER192)。我们的结果表明,win10 之前的验证率超过 99%,win10 后易失性内存几乎 100% 可验证。这消除了在尝试检测/分析数千兆字节的输入时由于传统的手动处理/审查/拆卸内存而导致的大量猜测工作和未知的工作。
文档
图形用户界面实施