Ultima modifica:
Sembra proprio un problema relativo a PatchGuard, per riuscirci andrebbe disabilitato Secure Boot e PatchGuard. Se continua a non andare prima di copiare la memoria verifica da WinDbg se il puntatore è corretto proprio prima del crash (usa u e indirizzo in entry_point per vedere se il disassembly è quello che ti aspetti), se lo è prova con
Ho risposto nel merito ma comunque modificare il codice del kernel non è mai una buona idea su Windows, se l'obbiettivo è disabilitare la code integrity ci sono altri modi, alcuni rumorosi ma stabili come abilitare test sign mode, altri più stealth modificando una sezione dati che altera quel check invece che patchare codice direttamente.
PS: usare quel pattern così non è il massimo, non so il caso specifico ma potrebbe cambiare ad ogni minor build di Windows. Arrivarci con un marker più piccolo e/o disassemblando puoi gestire versioni differenti (es. trovi quelle due DWORD particolari che usa al suo interno (0xC0000428 codice errore di callback mancanti e 0x63734943 il tag del pool da liberare e poi scorrere all'indietro all'inizio della funzione).
ZwProtectVirtualMemory
per renderlo RWX temporaneamente, ma potrebbero esserci problemi in caso di race (un processo può causare chiamate a quella funzione nel momento in cui la modifica è incompleta).Ho risposto nel merito ma comunque modificare il codice del kernel non è mai una buona idea su Windows, se l'obbiettivo è disabilitare la code integrity ci sono altri modi, alcuni rumorosi ma stabili come abilitare test sign mode, altri più stealth modificando una sezione dati che altera quel check invece che patchare codice direttamente.
PS: usare quel pattern così non è il massimo, non so il caso specifico ma potrebbe cambiare ad ogni minor build di Windows. Arrivarci con un marker più piccolo e/o disassemblando puoi gestire versioni differenti (es. trovi quelle due DWORD particolari che usa al suo interno (0xC0000428 codice errore di callback mancanti e 0x63734943 il tag del pool da liberare e poi scorrere all'indietro all'inizio della funzione).