
C++-Bibliothek zur Manipulation von x86-64-Paging-Tabellen aus dem User-Mode: Lesen/Schreiben von PML4E-, PDPTE-, PDE- und PTE-Einträgen, Übersetzung virtueller in physische Adressen und Erstellung selbstreferenzierender Tabellen.
Manipulation von Seitentabellen aus dem Usermode. Es werden Operationen wie das Abrufen und Setzen aller Einträge und Werte von Seitentabellen angeboten. Der Code berücksichtigt große Seiten. Der Link zur Ausarbeitung ist hier zu finden.
vdm::read_phys_t _read_phys =
[&](void* addr, void* buffer, std::size_t size) -> bool
{
return vdm::read_phys(addr, buffer, size);
};
vdm::write_phys_t _write_phys =
[&](void* addr, void* buffer, std::size_t size) -> bool
{
return vdm::write_phys(addr, buffer, size);
};
vdm::vdm_ctx vdm(_read_phys, _write_phys);
nasa::mem_ctx my_proc(vdm);
const auto ntoskrnl_base =
reinterpret_cast<void*>(
util::get_kmodule_base("ntoskrnl.exe"));
const auto ntoskrnl_pde = my_proc.get_pde(ntoskrnl_base);
std::printf("[+] pde.present -> %d\n", ntoskrnl_pde.second.present);
std::printf("[+] pde.pfn -> 0x%x\n", ntoskrnl_pde.second.pfn);
std::printf("[+] pde.large_page -> %d\n", ntoskrnl_pde.second.large_page);
[+] pde.present -> 1
[+] pde.pfn -> 0x10400
[+] pde.large_page -> 1
[+] press any key to close...