EXPLICATION BYPASS ANTICHEATS 2024

DataDisgrace

l'Affirmé 🥈
Level 2

Torrents Stats

Messages
57
J'aime
500
Trophées
83
Inscrit
25 Février 2022
Bonjour, je vais vous expliquer aujourd'hui comment les anticheats fonctionnent, comme par exemple Easy Anti Cheat, Battle Eye, Vanguard etc...
DISCLAIMER:
je ne vais pas donner d'infos très précises pour éviter de dire n'importe quoi, je suis pas du tout un pro dans ce millieu, c'est juste à but informatif.
Il y a deux types d'anticheats: ceux qui fonctionnent en user mode et ceux qui fonctionnent en kernel mode; nous allons nous concentrer sur ceux qui fonctionnent en kernel mode, car ce sont les plus répandus à ce jour.
de plus, je ne suis pas responsable de vos actes, ceci est à des fins d'éducations seulement, je ne suis pas responsable si vous vous faites bannir!

Comme leur nom l'indique, les anticheats en kernel mode, sont exécutés dans le kernel, ce qui leur permet de surveiller efficacement le système. Il peut par exemple bloquer l'accès à la mémoire du jeu depuis un autre processus, rendant innefficaces les cheats externes au processus du jeu. Ils peuvent aussi détecter des appels systèmes... bref, ils ont un accès total aux ressources de la machine.

Cependant, il est toujours possible de les contourner


1 - Le DLL sideloading
Cela consiste à chercher des DLLs qui sont sensés être chargés par un processus, mais qui ne sont pas trouvé (par exemple, ils ne sont pas dans le bon répertoire etc...)
L'attaquant va donc créer son propre DLL, ayant le même nom, exportant les mêmes fonctions, mais qui va exécuter du code, ce qui permet à l'attaquant d'utiliser les fonctions du processus à sa guise, et d'éxécuter du code malicieux.

Première étape: chercher un DLL non trouvé par le processus
pour ce faire, tu aura besoin de process monitor.

lien:
https://learn.microsoft.com/fr-fr/sysinternals/downloads/procmon

commence par exécuter procmon et puis lance ton jeu
1704477305316.png

si cette fenêtre ne s'ouvre pas directement, clique sur l'icone de filtre bleue.
nous allons créer un premier filtre:
dans le premier menu déroulant, sélectionne "Process Name" puis "contain" puis le nom de l'exécutable de ton jeu puis clique sur Add
ensuite, applique les mêmes filtres que moi:

1704477539540.png


le premier filtre correspond au nom du processus, le deuxieme sert à filtrer les dll non trouvés, et le troisième, sert uniquement à sélectionner uniquement les dlls.

clique sur "Apply" puis "OK"

maintenant, cherche un dll qui n'a pas de lien avec microsoft (évite les VERSION.dll, VCRUNTIME, MSVCP etc...)
1704477751846.png
Ici, on peut voir qu'un certain RzChromaSDK64.dll n'a pas été trouvé, il s'agit d'un pilote Razer.
Voila, nous avons notre dll!
Cela ne marche pas à tous les coups, n'hésite pas à refaire la manip plusieurs fois

Deuxième étape: exporter les mêmes fonctions que le dll original
tu dois d'abord trouver le dll original, quelques recherches sur google suffisent.
[EDIT:] tu dois vérifier que ton dll a la même architecture que le dll original (x64 ou x32)
ensuite, télécharge le repos github suivant et compile le avec visual studio
github:
https://github.com/monoxgas/Koppeling
visual studio:
https://visualstudio.microsoft.com/fr/
dans l'installer, inclus la programmation en c++ et le développement en .net

une fois compilé, tu dois trouver netclone.exe, et ouvrir une invite de commande dans ce répertoire:
entre cette commande:
NetClone.exe --target {emplacement de ton dll} --reference {emplacement dll original} --reference-path {emplacement dll original} --output {nom final du dll (si tu as tout suivi, c'est le nom du dll original)}

Troisième étape: signer ton dll
Et voila ! tu as ton dll de prêt! Enfin presque...
Les anticheats, avant de charger certains dll, regardent si il est signé, tu aura donc besoin d'un certificat. Le problème c'est que c'est super cher, mais tu peux facilement trouver des certificats leakés sur internet. Une fois ton dll signé, tu dois le mettre dans le répertoire dans lequel le jeu n'a pas trouvé le dll (pour avoir le chemin du répertoire, sur process monitor, clic droit sur le dll => properties)
tu peux maintenant lancer ton jeu, et boom, ton dll est chargé!



2- Créer son propre driver
C'est aujourdhui le meilleur moyen de bypass un anti cheat en kernel mode.
Cette partie sera très brève, à cause de mon niveau de connaissances dans le développement en kernel, mais je vais quand même te donner un aperçu:

Cela consiste à créer un driver, qui une fois chargé, pourra lire et écrire dans la mémoire du jeu, mais c'est une tâche complexe qui requiert des connaissances approfondies en développement en kernel.
Voici comment cela va fonctionner:
tu aura besoin:
-de ton driver qui va intéragir avec la mémoire, et qui peut gérer une communication avec l'user mode
-de ton cheat en user mode qui va intéragir avec ton driver.
-d'un moyen de communication entre l'user mode et le kernel mode (ressource: https://github.com/adspro15/km-um-communication)
en gros, ton driver aura la même fonction que l'api de windows de ce qui est de la gestion de la mémoire. Si on ne peut pas utiliser les fonctions readprocessmemory et writeprocessmemory de l'api de windows, c'est parce que c'est détecté par tous les anticheats, et puis de toutes façons, on ne peut lire et écrire dans la mémoire du jeu depuis l'usermode.

de plus, il faut savoir que windows, pour des raisons de sécurité évidentes, ne laisse se charger que les drivers signés. Voici les solutions qui s'offrent à toi:
-trouver un certificat leaké
-exploiter un driver signé vulnérable (peut être un tuto prochainement) ressource: https://github.com/TheCruZ/kdmapper (c'est détecté, mais en gros tu vas devoir te l'approprier pour mapper ton driver)
-payer un certificat.

Laisse une réponse si ça t'a plu, et n'hésite pas si j'ai oublié de mentionner certaines choses ou certains points sur lesquels je me suis peut être trompé!
 
Haut Bas