Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ICALL-GADGET — Exploit per reindirizzare il flusso di controllo di un modulo kernel legittimo verso il tuo modulo kernel illegittimo per eludere lo stack walking degli anti-cheat | Kitploit
Strumenti/GitHubGitHub/gmh5225/icall-gadget
Meccanismi di PersistenzaExploitEvasione IDS/IPSReverse EngineeringShellcodeRed TeamingSviluppo PayloadBinary Exploitation
GitHubgmh5225/icall-gadget

ICALL-GADGET

Exploit per reindirizzare il flusso di controllo di un modulo kernel legittimo verso il tuo modulo kernel illegittimo per eludere lo stack walking degli anti-cheat

Vedi Repository
122 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

ABUSO DI ICALL GADGET PER LA COMUNICAZIONE

Informazioni generali: questo è nel kernel di Windows e ci permetterà di comunicare nel nostro driver senza essere rilevati dagli anticheat

Quindi stavo scorrendo in IDA e ho trovato questo

image

Dopo ulteriori ispezioni possiamo vedere che chiama una funzione chiamata _guard_dispatch_icall_ptr. L'icall in pratica è un jmp a rax quindi se ragionate un po' possiamo modificare l'intera funzione per chiamare invece il nostro handler usando lo shellcode.

Il nostro Shellcode

Creeremo uno shellcode che imposta rax a un ptr alla nostra funzione handler. In questo modo quando la funzione viene chiamata eseguirà il nostro shellcode e chiamerà il nostro handler. Vogliamo assicurarci che quando creiamo il nostro shellcode sia esattamente della stessa dimensione in byte del codice che stiamo modificando. Quindi ecco un esempio dello shellcode che ho usato in asm, dovrete convertirlo in byte.

 sub    rsp,0x38
 movabs rax,0xdeadbeef #placeholder for handler
 movabs r10,0xab39cfee
 inc    rax
 dec    rax
 call   QWORD PTR [rip+0x720d4]        # 0x720f8
 jmp    0x29

Il nostro codice

In cpp dobbiamo semplicemente ottenere l'indirizzo della funzione e poi mappare il nostro shellcode al suo interno, ma qui è dove diventa complicato: se lo facciamo semplicemente così com'è corromperemo lo stack e andremo in bluescreen di tanto in tanto. Per evitarlo dovremo riparare lo stack. Quindi invece di ritornare all'interno del nostro handler dovremmo eseguire le stesse operazioni che le funzioni farebbero se non l'avessimo modificata. Lascio questo al lettore da fare per conto proprio perché non voglio dare la pappa pronta su un metodo fantastico di evasione dagli anticheat, ma ricordate di guardare l'asm originale della funzione e vedere cosa stiamo modificando. NOTA A MARGINE: se sistemate la corruzione dello stack e fate ciò che la funzione intendeva fare all'interno del vostro handler apparirà come se nulla fosse stato modificato! :)

 //getting address to function
 FunctionAddress = module + 0xD70C; 
  
 BYTE shellcode[] = { 0x48, 0x83, 0xEC, 0x38, 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x49, 0xBA, 0xEE, 0xCF, 0x39, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x48, 0xFF, 0xC0, 0x48, 0xFF, 0xC8, 0xFF, 0x15, 0xD4, 0x20, 0x07, 0x00, 0xE9, 0x00, 0x00, 0x00, 0x00 };

 memcpy(&shellcode[6], &hkfunction, 8);

 DisableWriteProtection();
 memcpy((PVOID)FunctionAddress, &shellcode, sizeof(shellcode));
 EnableWriteProtection();

Conclusione

Spero che abbiate tratto qualcosa da questa rapida guida, sappiate solo che potete trovare anche altri gadget che faranno molto di più, più sono complessi meglio è.

Scarica lo strumento