整改整代码逻辑
增加SART内存布局防止大面积冲突
[SART(Sandbox Address Region Table) 是沙箱为模拟 Windows x64 进程地址空间而预先规划的固定区域分区表。所有区域在 InitRuntime 阶段一次性映射,guest 代码与宿主结构共享同一虚拟地址空间。]
| 区域 | 起始地址 | 大小 | 用途 | 权限 |
| 进程堆 | 代码登录后可见 | 2 MB | HeapAlloc /malloc 分配区 | RW |
| 主线程栈 | 代码登录后可见 | 4 MB | 初始 RSP = 代码登录后可见(16 字节对齐) | RW |
| 动态分配区 | 代码登录后可见 | 向上增长 | Mem ()->Alloc (),异常记录 / CONTEXT/TLS 等 | RW |
| Stub 区 | 代码登录后可见 | 1 MB | API stub、VEH/SEH/FILTER 返回桩 | RWX |
| ntdll.dll | 代码登录后可见 | 2 MB | 系统模块映像 + 导出表 | RWX |
| kernel32.dll | 代码登录后可见 | 1 MB | 系统模块映像 + 导出表 | RWX |
| kernelbase.dll | 代码登录后可见 | 1 MB | 系统模块映像 + 导出表 | RWX |
| user32.dll | 代码登录后可见 | 1 MB | 系统模块映像 + 导出表 | RWX |
| vcruntime140.dll | 代码登录后可见 | 1 MB | C++ 运行时,含 代码登录后可见 stub 代码登录后可见 | RWX |
| ucrtbase.dll | 代码登录后可见 | 1 MB | C 运行时 | RWX |
| ucrtbased.dll | 代码登录后可见 | 1 MB | Debug C 运行时 | RWX |
| ProcessParameters | 代码登录后可见 | 8 KB | RTL_USER_PROCESS_PARAMETERS + 字符串池 | RW |
| PEB LDR | 代码登录后可见 | 4 KB | PEB_LDR_DATA + 模块链表节点 | RW |
| PEB | 代码登录后可见 | 8 KB | 进程环境块 | RW |
| TEB | 代码登录后可见 | 4 KB | 线程环境块,GS.base 指向此处 | RW |
| 主模块 | 代码登录后可见 | 可变 | 被加载的 test.exe,含 .pdata | RWX(按节区修正) |



重点重写VEH
VEH_RET_STUB[0x70002000] VEH handler 执行 ret 后的着陆点,Unicorn 以此为结束地址
SEH_RET_STUB[0x70003000] SEH language handler 返回桩
FILTER_RET_STUB[0x70004000]__except filter 函数返回桩
|__C_specific_handler[0x7F501000]C SEH 语言 handler stub(code hook 拦截)
并加入PEB加入关键内容:
则TEB为
VEH分发偏移表
| 偏移 | 寄存器 | | 偏移 | 寄存器 |
| +0x78 | RAX | | +0xC8 | R10 |
| +0x80 | RCX | | +0xD0 | R11 |
| +0x88 | RDX | | +0xD8 | R12 |
| +0x90 | RBX | | +0xE0 | R13 |
| +0x98 | RSP | | +0xE8 | R14 |
| +0xA0 | RBP | | +0xF0 | R15 |
| +0xA8 | RSI | | +0xF8 | RIP |
| +0xB0 | RDI | | +0x44 | EFlags |
| +0xB8 | R8 | | | |
| +0xC0 | R9 | | | |
并修复运行死循环问题,代码登录后可见 分支错误地 代码登录后可见,导致程序只执行一个时间片
除T/PEB增加LDR mod
同步SEH增加对.pdata 异常表解析,以及重写恶意软件喜欢用的互斥体(mutex)
此外为了更加增加环境真实性,已经加入APC(异步过程调用)功能,允许病毒隐蔽执行或在APC 队列中插入恶意代码
希望vortex在技术深度上做优,尽量模拟windows其他模块
总结:They don't know,but you know everything.