
Reconstruction octet pour octet en C++20 de 15 modules de scan x86 de Valve Anti-Cheat et de steamservice.dll, avec des tests de parité et une documentation technique complète.
Reconstruction octet par octet en C++20 de 15 modules de scan classiques x86 de Valve Anti-Cheat (VAC) et de steamservice.dll.
Chaque worker reconstruit est vérifié par rapport aux binaires Valve originaux signés (../vac-research) pour une parité exacte de sortie de 4232 octets, y compris les bizarreries d'origine, les déchets de pile non initialisés et les bugs marqués par // valve bug, keep it.
Analyse technique complète de steamservice.dll, du SDK de module partagé, des 15 scanners et des bugs de Valve :
| Chemin | Description |
|---|---|
sdk/ | Runtime de module partagé : _runfunc@20, .vacini, RunDispatcher, BootstrapMain (172 imports), ICE, RSA-512 brut, MD5/CRC32, LZ4, helpers PE/NT |
modules/ | 15 modules de scan reconstruits (un répertoire par module) |
service/ | Reconstruction de steamservice.dll : gestionnaire de modules IPC, vérification de signature RSA-1024 VLV, mapper manuel (LoadModuleHiddenInternal) et moniteur de processus ETW de 5 minutes |
tests/ | Suites de parité octet par octet en direct et synthétiques par rapport aux DLL d'origine |
tools/ | Générateurs de blobs de modules, inspecteur de nœuds worker, export IDA et scripts de vérification @orig |
| Module | ID de worker | Résumé |
|---|---|---|
boot_config | 0x06A79A9E | Ruche de registre BCD (HKLM\BCD00000000\Objects), testsigning / nointegritychecks, politique NX, File ID NTFS |
cpuid | 0x023429C3 | Épinglage d'affinité sur le CPU 0 et vidage des feuilles CPUID (0x0, 0x40000000, 0x80000000) |
devices | 0x05EC50DC | Énumération des périphériques PCI et USB actifs via SetupAPI |
driver_inventory | 0x06ACD913, 0x06C2B5BB | Services de pilotes actifs vs répertoire d'objets \Driver + MD5 normalisé des fichiers de pilotes |
image_scan | 0x0CDA6778, 0x09D3248C | Scanner PE disque/mémoire (MD5 sans relocations, icônes, PDB, WinTrust, scan de motifs) + adresses de début de threads |
image_scan_threads | 0x05A52008, 0x0122C7DA | Même .text que image_scan construit avec des clés et des ID de worker permutés |
payload_executor | 0x0236ED5F | Allocation mémoire, décompresseur de payload RSA, PAGE_EXECUTE_READWRITE et appel du point d'entrée |
process_file_identity | 0x0B2D8276, 0x0CA11165, 0x013B4330 | Dossier de processus (SID, PEB32/64, ligne de commande, hachages), chaîne des File ID NTFS des ancêtres, inventaire de répertoire |
process_memory_map | 0x06E048F4, 0x0DB55D3C | Parcours de PEB->Ldr et de la mémoire virtuelle, repliement des pages, MD5 PE sans relocations, queue de rapport LZ4 |
service_lookup | 0x0FA94991 | Recherche de pilote par hachage de nom de service, expansion sysnative, File ID NTFS |
shared_section | 0x0E3481C0, 0x06781BC4 | Recherche de section nommée par motif GUID via OpenFileMappingW et parcours du répertoire NT \ |
system_handles | 0x002F6DC7, 0x0929BC41 | Instantané Toolhelp, masques de types de handles 64 bits et force brute des PID cachés (unPid -= 4) |
system_info | 0x0F8083A0, 0x0C2232C2 | Résumé de l'OS, KUSER_SHARED_DATA, volumes et parseur d'exports de ntdll.dll sur disque pour les SSN bruts |
target_handles | 0x08A9324E | Appels système x64 directs via WoW64 Heaven's Gate (0x33) à la recherche de processus détenant des handles vers le jeu |
timing_check | 0x0D8C40E1 | Module hérité sans BootstrapMain : ticks KUSER_SHARED_DATA autour d'un stub .data patché |
Ouvrez vac.sln dans Visual Studio 2022 (Release | Win32), ou compilez et exécutez la suite de parité complète depuis la ligne de commande :
python tests/build_tests.py
python tests/parity/run_all.py
python tools/ida/fill_orig.py --check sdk modules service
run_all.py exécute chaque worker en direct par rapport aux DLL d'origine (en filtrant le bruit de l'OS en exécutant d'abord le binaire original deux fois contre lui-même), vérifie les paquets de sortie complets de _runfunc@20 y compris le scellement ICE et RSA-512, et exécute les suites de fuzzing/synthétiques déterministes.