对 15 个经典 x86 Valve Anti-Cheat (VAC) 扫描模块以及 steamservice.dll 进行逐字节的 C++20 重建。
每个重建的 worker 都会与原始签名的 Valve 二进制文件(../vac-research)进行验证,以确保输出完全一致(4232 字节),包括原始的特殊行为、未初始化的栈垃圾数据,以及标记为 // valve bug, keep it 的 bug。
关于 steamservice.dll、共享模块 SDK、全部 15 个扫描器以及 Valve 的 bug 的完整技术剖析:
| 路径 | 描述 |
|---|---|
sdk/ | 共享模块运行时:_runfunc@20、.vacini、RunDispatcher、BootstrapMain(172 个导入)、ICE、原始 RSA-512、MD5/CRC32、LZ4、PE/NT 辅助函数 |
modules/ | 15 个重建的扫描模块(每个模块一个目录) |
service/ | steamservice.dll 的重建:IPC 模块管理器、VLV RSA-1024 签名校验、手动映射器(LoadModuleHiddenInternal),以及 5 分钟 ETW 进程监控 |
tests/ | 针对原始 DLL 的实时与合成逐字节一致性测试套件 |
tools/ | 模块 blob 生成器、worker 节点检查器、IDA 导出以及 @orig 验证脚本 |
| 模块 | Worker ID | 摘要 |
|---|---|---|
boot_config | 0x06A79A9E | BCD 注册表配置单元(HKLM\BCD00000000\Objects)、testsigning / nointegritychecks、NX 策略、NTFS File ID |
cpuid | 0x023429C3 | CPU 0 亲和性绑定与 CPUID 叶转储(0x0、0x40000000、0x80000000) |
devices | 0x05EC50DC | 通过 SetupAPI 枚举活动 PCI 和 USB 设备 |
driver_inventory | 0x06ACD913、0x06C2B5BB | 活动驱动服务与 \Driver 对象目录对比 + 驱动文件的规范化 MD5 |
image_scan | 0x0CDA6778、0x09D3248C | 磁盘/内存 PE 扫描器(去除重定位的 MD5、图标、PDB、WinTrust、模式扫描)+ 线程起始地址 |
image_scan_threads | 0x05A52008、0x0122C7DA | 与 image_scan 相同的 .text,但使用轮换的密钥和 worker ID 构建 |
payload_executor | 0x0236ED5F | 内存分配、RSA payload 解包器、PAGE_EXECUTE_READWRITE 以及入口调用 |
process_file_identity | 0x0B2D8276、0x0CA11165、0x013B4330 | 进程档案(SID、PEB32/64、命令行、哈希)、祖先 NTFS File ID 链、目录清单 |
process_memory_map | 0x06E048F4、0x0DB55D3C | PEB->Ldr 与虚拟内存遍历、页面折叠、去除重定位的 PE MD5、LZ4 报告尾部 |
service_lookup | 0x0FA94991 | 按服务名哈希查找驱动、sysnative 展开、NTFS File ID |
shared_section | 0x0E3481C0、0x06781BC4 | 通过 OpenFileMappingW 和 NT \ 目录遍历按 GUID 模式查找命名节 |
system_handles | 0x002F6DC7、0x0929BC41 | Toolhelp 快照、64 位句柄类型掩码,以及隐藏 PID 暴力枚举(unPid -= 4) |
system_info | 0x0F8083A0、0x0C2232C2 | 操作系统摘要、KUSER_SHARED_DATA、卷,以及用于原始 SSN 的磁盘 ntdll.dll 导出解析器 |
target_handles | 0x08A9324E | WoW64 Heaven's Gate(0x33)直接 x64 系统调用,搜寻持有游戏句柄的进程 |
timing_check | 0x0D8C40E1 | 没有 BootstrapMain 的遗留模块:围绕已修补的 .data 存根读取 KUSER_SHARED_DATA 计时 |
在 Visual Studio 2022(Release | Win32)中打开 vac.sln,或从命令行构建并运行完整的一致性测试套件:
python tests/build_tests.py
python tests/parity/run_all.py
python tools/ida/fill_orig.py --check sdk modules service
run_all.py 会针对原始 DLL 实时运行每个 worker(先让原始二进制文件对自身运行两次以过滤操作系统噪声),验证包括 ICE 和 RSA-512 封装在内的完整 _runfunc@20 输出数据包,并执行确定性的模糊/合成测试套件。