1
0
mirror of https://github.com/momo5502/hypervisor.git synced 2025-07-03 01:31:51 +00:00

Compare commits

...

3 Commits

Author SHA1 Message Date
89f1825b8c More library fixes 2022-06-07 20:39:33 +02:00
b266388c55 Correct resource extraction 2022-06-07 20:33:00 +02:00
6730723d36 Library support 2022-06-07 20:20:21 +02:00
3 changed files with 31 additions and 11 deletions

View File

@ -86,6 +86,7 @@ extern "C" NTSTATUS DriverEntry(const PDRIVER_OBJECT driver_object, PUNICODE_STR
{
try
{
debug_log("Starting driver...");
driver_object->DriverUnload = unload;
global_driver_instance = new global_driver(driver_object);
}

View File

@ -1,23 +1,23 @@
file(GLOB_RECURSE runner_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE runner_headers ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp)
add_executable(runner #WIN32
add_library(hyperhook SHARED #WIN32
${runner_sources}
${runner_headers}
)
target_precompile_headers(runner
target_precompile_headers(hyperhook
PRIVATE std_include.hpp
)
set_property(TARGET runner APPEND_STRING PROPERTY LINK_FLAGS " /MANIFESTUAC:\"level='requireAdministrator'\"")
set_property(TARGET hyperhook APPEND_STRING PROPERTY LINK_FLAGS " /MANIFESTUAC:\"level='requireAdministrator'\"")
target_link_libraries(runner
target_link_libraries(hyperhook
shared
driver_file
)
set_source_files_properties(resource.rc PROPERTIES LANGUAGE RC)
target_sources(runner PRIVATE
target_sources(hyperhook PRIVATE
resource.rc
)

View File

@ -51,14 +51,18 @@ void remove_hooks(const driver_device& driver_device)
std::vector<uint8_t> load_resource(const int id)
{
auto* const res = FindResource(GetModuleHandleA(nullptr), MAKEINTRESOURCE(id), RT_RCDATA);
HMODULE modhandle = nullptr;
GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
reinterpret_cast<LPCSTR>(&load_resource), &modhandle);
auto* const res = FindResource(modhandle, MAKEINTRESOURCE(id), RT_RCDATA);
if (!res) return {};
auto* const handle = LoadResource(nullptr, res);
auto* const handle = LoadResource(modhandle, res);
if (!handle) return {};
const auto* data_ptr = static_cast<uint8_t*>(LockResource(handle));
const auto data_size = SizeofResource(nullptr, res);
const auto data_size = SizeofResource(modhandle, res);
std::vector<uint8_t> data{};
data.assign(data_ptr, data_ptr + data_size);
@ -333,7 +337,7 @@ void unsafe_main(const int /*argc*/, char* /*argv*/[])
(void)_getch();*/
}
int main(const int argc, char* argv[])
int _main(const int argc, char* argv[])
{
try
{
@ -354,7 +358,7 @@ int main(const int argc, char* argv[])
}
}
int __stdcall WinMain(HINSTANCE, HINSTANCE, char*, int)
int __stdcall _WinMain(HINSTANCE, HINSTANCE, char*, int)
{
AllocConsole();
AttachConsole(GetCurrentProcessId());
@ -364,5 +368,20 @@ int __stdcall WinMain(HINSTANCE, HINSTANCE, char*, int)
freopen_s(&fp, "conout$", "w", stdout);
freopen_s(&fp, "conout$", "w", stderr);
return main(__argc, __argv);
return _main(__argc, __argv);
}
const driver_device& get_driver_device()
{
static const auto driver_file = extract_driver();
static driver driver{driver_file, "MomoLul"};
static const driver_device driver_device{R"(\\.\HelloDev)"};
return driver_device;
}
extern "C" __declspec(dllexport) void hyperhook_patch_data(const uint32_t pid, const uint64_t address, const void* data,
const size_t length)
{
patch_data(get_driver_device(), pid, address, static_cast<const uint8_t*>(data), length);
}