RelocAlloc: Usare la sezione .reloc per sostituire le tipiche chiamate di allocazione
Spiegazione del codice:
- Per prima cosa, individuiamo gli indirizzi di tutte le dll mappate nel nostro processo.
- Poi costruiamo un array di struct e lo riempiamo con alcuni dati, questa è la funzione Initialize().
- Ora abbiamo un array completo, il passo successivo è cercare l'indirizzo giusto.
- chiamare GetSuitableAddress(SIZE_T ShellcodeSize) farà il lavoro; cioè trovarci la code cave giusta (posto vuoto in memoria, adatto alla dimensione dello shellcode)
- nel caso venga trovata, verrà restituita.
- per usarla dobbiamo modificare la protezione della memoria in scrittura/esecuzione ... (il poc è direttamente rwx)
Demo:
img1
img2
Nota: questo funziona solo con shellcode di piccole dimensioni, perché dipende dalle dll mappate, più grande è la sezione .reloc, maggiori sono le probabilità di ottenere un indirizzo valido. Inoltre, è testato solo su una macchina x64, ma dovrebbe funzionare anche per x86 (credo :p)
# RESTATE SINTONIZZATI PER ALTRO
120064592-a5c83480-c075-11eb-89c1-78732ecaf8d3