switched back to NtShutdownSystem

merge-requests/5/head v1.5
xerox 4 years ago
parent 2eefce5626
commit c2f90a4ab9

@ -4,18 +4,17 @@ namespace vdm
{ {
vdm_ctx::vdm_ctx() vdm_ctx::vdm_ctx()
{ {
// already found the syscall's physical page... // if we already found the syscall's physical page...
if (vdm::syscall_address.load()) if (vdm::syscall_address.load())
return; return;
LoadLibraryA("user32.dll"); // required for win32u.dll... vdm::ntoskrnl = reinterpret_cast<std::uint8_t*>(
vdm::dxgkrnl_buffer = reinterpret_cast<std::uint8_t*>( LoadLibraryExA("ntoskrnl.exe", NULL,
LoadLibraryExA("drivers\\dxgkrnl.sys", NULL,
DONT_RESOLVE_DLL_REFERENCES)); DONT_RESOLVE_DLL_REFERENCES));
nt_rva = reinterpret_cast<std::uint32_t>( nt_rva = reinterpret_cast<std::uint32_t>(
util::get_kmodule_export( util::get_kmodule_export(
"dxgkrnl.sys", "ntoskrnl.exe",
syscall_hook.first, syscall_hook.first,
true true
)); ));
@ -55,7 +54,7 @@ namespace vdm
// check the first 32 bytes of the syscall, if its the same, test that its the correct // check the first 32 bytes of the syscall, if its the same, test that its the correct
// occurrence of these bytes (since dxgkrnl is loaded into physical memory at least 2 times now)... // occurrence of these bytes (since dxgkrnl is loaded into physical memory at least 2 times now)...
if (!memcmp(page_data + nt_page_offset, dxgkrnl_buffer + nt_rva, 32)) if (!memcmp(page_data + nt_page_offset, ntoskrnl + nt_rva, 32))
if (valid_syscall(reinterpret_cast<void*>(address + page + nt_page_offset))) if (valid_syscall(reinterpret_cast<void*>(address + page + nt_page_offset)))
syscall_address.store( syscall_address.store(
reinterpret_cast<void*>( reinterpret_cast<void*>(

@ -10,14 +10,14 @@
namespace vdm namespace vdm
{ {
// change this to whatever you want :^) // change this to whatever you want :^)
constexpr std::pair<const char*, const char*> syscall_hook = { "NtGdiDdDDICreateContext", "win32u.dll" }; constexpr std::pair<const char*, const char*> syscall_hook = { "NtShutdownSystem", "ntdll.dll" };
inline std::atomic<bool> is_page_found = false; inline std::atomic<bool> is_page_found = false;
inline std::atomic<void*> syscall_address = nullptr; inline std::atomic<void*> syscall_address = nullptr;
inline std::uint16_t nt_page_offset; inline std::uint16_t nt_page_offset;
inline std::uint32_t nt_rva; inline std::uint32_t nt_rva;
inline std::uint8_t* dxgkrnl_buffer; inline std::uint8_t* ntoskrnl;
class vdm_ctx class vdm_ctx
{ {

Binary file not shown.
Loading…
Cancel
Save