L'anticheat di Riot è davvero molto complesso, tanto che ha diverse funzioni di controllo!
Come sempre quando parlo di anticheat, devo taggare @Dany Dollaro , il quale mi ha dato una mano con lo sviluppo del mio private server dedicandosi alla creazione di un anticheat, e fornendomi molte delle conoscenze che attualmente ho.
Ovviamente ci sono diversi modi per rilevare un hack, perchè ogni cheat che si rispetti ha un dialogo con l'applicazione, la quale può utilizzare diversi strumenti per capire se programmi esterni cercando di dialogare con l'applicazione finale, per "scopi non previsti" :
1) Anzi tutto c'è un discorso di Handling del processo: per comunicare con un applicazione hai necessità di conoscere il suo PID e aprire un Handle su quest'ultimo (per farvela corta, un handle su un processo è come un canale di comunicazione che apri su quest'ultimo). Dany ad esempio ha creato un sistema che scannerizzava tutti gli handle e chiudeva quelli che richiedevano permessi speciali (anche perchè handle aperti con permessi speciali molto spesso sono sinonimo di "Memory write")
2) Un altro esempio è l'hook di funzione: quando tenti di injectare una dll che modifica il normale flusso di esecuzione di un programma, vertendo quest'ultimo su una funzione scritta da noi da cui possiamo trarne vantaggio.
Ad esempio ... in uno sparatutto ipotetico, injectiamo una dll che per ogni colpo sparato incrementa le munizioni invece che diminuirle! È possibile verificare se qualcuno ha tentato di eseguire un hook di funzione con dei "semplici controlli in CRC"
3) È possibile sgamare comunque un injection utilizzando alcune tecniche, soprattutto nel caso di scripting che inviano segnali al gioco. Quest'ultimi potrebbero essere controllati e catalogati da sistemi automatizzati al fine di garantirne l'autenticità.
Quando si parla di bypass di sistemi così complessi, spesso e volentieri si parla di creazioni di driver. Mi fermo qua poichè la mia conoscenza è limitata, ma passo la parola a @JunkCoder o @Dany Dollaro che sicuro vi sanno dire di più!
Come sempre quando parlo di anticheat, devo taggare @Dany Dollaro , il quale mi ha dato una mano con lo sviluppo del mio private server dedicandosi alla creazione di un anticheat, e fornendomi molte delle conoscenze che attualmente ho.
Ovviamente ci sono diversi modi per rilevare un hack, perchè ogni cheat che si rispetti ha un dialogo con l'applicazione, la quale può utilizzare diversi strumenti per capire se programmi esterni cercando di dialogare con l'applicazione finale, per "scopi non previsti" :
1) Anzi tutto c'è un discorso di Handling del processo: per comunicare con un applicazione hai necessità di conoscere il suo PID e aprire un Handle su quest'ultimo (per farvela corta, un handle su un processo è come un canale di comunicazione che apri su quest'ultimo). Dany ad esempio ha creato un sistema che scannerizzava tutti gli handle e chiudeva quelli che richiedevano permessi speciali (anche perchè handle aperti con permessi speciali molto spesso sono sinonimo di "Memory write")
C:
//PRENDETELO CON LE PINSE, FA CAGARE STO CODICE, È SOLO DIMOSTRATIVO!
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
HWND hwnd = FindWindowA(NULL, "Application NAME"); // Apri un handle partendo dal nome del processo
if (hwnd == NULL) // controlla che l'handle sia aperto
{
cout << "Error !" << endl;
Sleep(5000);
exit(-1);
}
else {
DWORD procID;
GetWindowThreadProcessId(hwnd, &procID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID); // Modifica dei permessi, necessaria per chiamare l'api di memory write
if (procID == NULL) {
cout << "Error !" << endl;
Sleep(3000);
exit(-1);
}
else {
DWORD pointerAddress = 0X07A86920;
if (!ReadProcessMemory(handle, (LPVOID)pointerAddress, &pointerAddress, 4, NULL)) {
cout << "ReadProcessMemory FAILED" << endl;
return 0;
}
}
}
}
2) Un altro esempio è l'hook di funzione: quando tenti di injectare una dll che modifica il normale flusso di esecuzione di un programma, vertendo quest'ultimo su una funzione scritta da noi da cui possiamo trarne vantaggio.
Ad esempio ... in uno sparatutto ipotetico, injectiamo una dll che per ogni colpo sparato incrementa le munizioni invece che diminuirle! È possibile verificare se qualcuno ha tentato di eseguire un hook di funzione con dei "semplici controlli in CRC"
3) È possibile sgamare comunque un injection utilizzando alcune tecniche, soprattutto nel caso di scripting che inviano segnali al gioco. Quest'ultimi potrebbero essere controllati e catalogati da sistemi automatizzati al fine di garantirne l'autenticità.
Quando si parla di bypass di sistemi così complessi, spesso e volentieri si parla di creazioni di driver. Mi fermo qua poichè la mia conoscenza è limitata, ma passo la parola a @JunkCoder o @Dany Dollaro che sicuro vi sanno dire di più!