EXTERNAL_ENGINE

01. Kernel Read

Hur vi hämtar data via drivrutinen.

02. Process ID

Hur vi identifierar cs2.exe

03. Module Base

Lokalisering av client.dll.

04. WorldToScreen

3D till 2D matematik.


Sammanfattning av arbetet

Jag har gjort ett fusk till det världskända spelet CS2 genom att läsa olika minnesadresser genom en Kernel Driver som jag har skapat. Jag använder IOCTL (Input/Output Control) och MmCopyVirtualMemory för att läsa minnesadresser så som spelarkoordinater, HP och positioner. Jag använder ImGui som en overlay där jag både placerar min meny och ritar ut positionerna på t.ex. motståndarens benpunkter och kan se fiender genom väggarna. Efter att jag har räknat ut vektorerna för hur jag måste flytta musen för att nå spelarens huvud, så använder jag en ESP32-S3-Pico för att simulera musrörelser för att automatiskt sikta rakt på fienden och skjuta. Jag läser också flera värden för att underlätta fuskets användbarhet; genom att till exempel läsa spelarens lagadress och HP kan vi hoppa över att automatiskt sikta på en död kropp eller en lagmedlem.

Project Showcase

Features
Gameplay

Anti-Cheat bypassing

För att undvika att bli utskickad och bannad av CS2:s anti-cheat så har jag vidtagit ett antal åtgärder för att göra det svårare för VAC (anti-cheat) att upptäcka mig. Först så har jag bytt ut funktionen ReadProcessMemory(), vilket kan bli upptäckt av anti-cheat, mot en Kernel Driver som istället använder MmCopyVirtualMemory() för att kopiera minnesvärdet istället för att läsa det. Kernel-drivern ligger i ring 0, så den kan inte upptäckas alls av user-mode anti-cheats som CS2 VAC. Anti-cheats kan också enkelt upptäcka musrörelser som är gjorda av kod. mouse_event() är typ den vanligaste och lättaste att upptäcka. Därför använder jag en mikrokontroll som är HID-compliant (Human Interface Device) för att röra på musen. Jag har även spoofat mikrokontrollen genom att ha ändrat dess Hardware ID, så den identifieras som en Razer-mus istället för en mikrokontroll. Spel som CS2 använder också behaviour analysis, vilken registrerar spelarens rörelser så som hur lång tid det tar från att spelaren ser fienden till att man skjuter. Den mäter också banan som ditt sikte tar till spelaren. Om siktet går i en spikrak bana till spelaren så känner anti-cheatets behaviour analysis att det är en dator som flyttar musen. För att kontra detta så har jag gjort så att man kan lägga en delay på hur lång tid det tar innan auto-shoot skjuter, och jag har implementerat en Bezier-kurva som man kan sätta på för att aimboten ska gå i en båge istället för rakt på spelaren. För att rita på skärmen använder jag ImGui, vilket är det moderna sättet för GUI:s och fungerar relativt bra för att inte bli upptäckt. Just nu sätter jag Windows i testläge (eftersom Windows inte tillåter drivrutiner som är osignerade av Microsoft) för att starta kernel-drivern, vilket inte är lika säkert som att använda kdmapper. Kdmapper exploitar gamla Intel-drivers för att mappa och starta en egen kernel driver. Jag lyckades använda kdmapper i början av projektet, men när jag lade till IOCTL slutade det fungera. Jag är ny till kernel drivers, så jag valde att istället lägga Windows i testläge och sedan starta den genom OSR Loader istället. Kdmapper skulle kunna vara en förbättringsmöjlighet i framtiden, men då måste jag ersätta IOCTL med något annat. Jag implementerade så att koded automatiskt uppdaterar offsetsen genom att hämta de nya från a2x dumper genom att utnyttja githubs api för att hämta värden från client_dll.json och offsets.json. Genom att göra det här så kommer fusket alltid att fungerar även efter uppdateringar.

How to launch

Manuel Launch:


1. Stäng av Secure boot och ta bort alla nycklar.

2. Lägg windows i testläge: Öppna terminalen som administator: bcdedit /set testsigning off, sen starta om datorn

3. Öppna OSR Loader, lägg in kernel driver (.sys filen) och registera sen starta den.

4. Öppna cs2 och sen starta scriptet. (tänk på att stänga av hardware mouse och hardware mouse through UDP om du inte har mikrokontrollen)

Här är de byggda kernelReader och kernelDriver filerna.
📁
KernelReader.exe Application • 523 KB
📁
kernelDriver4.sys Application • 8 KB


Om du vill gå den manuella vägen (inte rekommenderat) så måste du ladda ner KernelReader och KernelDrivern från min github, sen bygga KernelReadern. För att bygga drivern rekommenderar att använda EDWK (Enterprise Windows Driver Development Kit) för att inte få några conflikt problem.

Auto Launch (Starkt rekommenderat):



📁
LeonCs2Loader.exe Application • 574 KB

Jag har gjort en executable som har allting inbyggt. Allt du behöver göra är att köra filen och så gör den alla checks och fixar alla inställningar (förutom secure boot, det måste göras i bios). Du behöver bara vänta tills den ber dig starta spelet sen fungerar det.

Se till att stänga av realtidsskydd i virus and threat protection settings före du laddar ned filen. Ibland om kerneldrivern inte redan körs så måste du starta launchern igen efter att spelet har startat.

Skillnader från tidigare arbeten

Det är många skillnader och förbättringar från tidigare projekt. Tidigare har jag gjort ett fusk till spelet AssaultCube, vilket inte har något anti-cheat. Där lärde jag mig grunderna till aimbot, ESP(Extrasensory perception) alltså att man får information som egentligen är otillgänglig och andra funktioner. Jag har också gjort ett CS2-fusk innan som bara var en aimbot. Skillnaderna är: De tidigare fuskens auto-shoot var baserat på en ESP; då läste programmet av en ESP, och när den var i mitten av skärmen så sköt den. Nu läser jag istället crosshairId, och om det inte är lika med 0 så är det en person framför mig. Denna lösning är mycket mer effektiv och instant. Jag har tidigare använt ESP32-S3 för att flytta på musen men endast genom seriell kommunikation (Serial). Jag har nu implementerat att man kan skicka muspositioner till ESP32-S3 genom UDP också, vilket förbättrar säkerheten. Tidigare använde jag ReadProcessMemory() för att läsa minnesadresser. Jag har också använt Process Hijacking som jag hämtade från internet, vilken exploitar Windows-processen csrss för att läsa minne genom den, vilket anti-cheat ser som okej eftersom den processen redan läser minne kontinuerligt. Den här gången gjorde jag istället en Kernel Driver som läser minne direkt från ring 0, vilket var nytt för mig och även ett bättre och säkrare sätt för mig att läsa minne utan att bli upptäckt. Tidigare har jag använt GDI-drawing för att rita över skärmen. Nu använder jag ImGui-libraryt istället, vilket ser mycket bättre ut, är mindre hackigt och mer avancerat. Jag har också bara gjort Box ESP tidigare, alltså baserat ESP:n endast på spelarpositionen och sedan ritat en kvadrat runt spelaren. Den här gången lyckades jag använda spelarens bone-array för att rita ut individuella ben, vilket gör den mycket bättre. Det här projektet har mycket fler funktioner och är betydligt bättre än någonting jag tidigare gjort inom området.

Koppling till dator- och nätverksteknik

Projektet sträcker sig långt bortom ren mjukvaruutveckling och fungerar som en praktisk tillämpning av avancerad dator- och nätverksteknik där integrationen av en ESP32-S3-Pico kräver en djup förståelse för hur datorns operativsystem kommunicerar med kringutrustning. Genom att spoofa enhetens Hardware ID och använda HID-emulering (Human Interface Device) lurar vi Windows PnP-manager (Plug and Play) att se mikrokontrollern som en legitim mus istället för en utvecklingsmodul. Den mest avancerade delen av datatekniken i projektet är dock användandet av en egenutvecklad Kernel Driver som opererar i Ring 0. Genom att använda funktioner som MmCopyVirtualMemory istället för standard-API:er i User-mode (Ring 3), demonstreras en djup förståelse för operativsystemets interna arkitektur och hur man kan läsa minne på systemnivå. När det kommer till kommunikationen mellan PC och hårdvara har jag implementerat två olika metoder: dels seriell kommunikation (UART), där data skickas i råformat över USB-bussen vilket kräver noggrann synkronisering av bytes för att undvika latens, och dels nätverksteknik via UDP. Genom att använda UDP-protokollet (User Datagram Protocol) kan musdata skickas trådlöst eller via det lokala nätverket till mikrokontrollern, där valet av UDP framför TCP är kritiskt eftersom UDP prioriterar hastighet och låg latens framför omsändningar, vilket är ett krav för realtidsapplikationer som aimbot-system.
LOGIC_INSPECTOR // SYSTEM_CORE ×
Välj ett steg ovan eller [?] i menyn för teknisk analys...