Как я могу привести строку к UINT_PTR (запись строк в ядре)?
Я уже некоторое время пытаюсь записывать строки в память ядра. Я был в состоянии читать строки, однако мне не повезло с их написанием. Я могу писать обычные вещи, такие как DWORD. Я все время застреваю на приведении строки к UINT_PTR. Любая помощь приветствуется и вот мой код для чтения строк:
std::string ReadString(UINT_PTR ProcessId, UINT_PTR ReadAddress, SIZE_T Size) { if (hDriver == INVALID_HANDLE_VALUE) { return {}; } DWORD64 Bytes; KERNEL_READ_REQUEST ReadRequest{}; std::vector<char> buffer(Size, char{ 0 }); ReadRequest.ProcessId = ProcessId; ReadRequest.Address = ReadAddress; ReadRequest.Size = buffer.size(); ReadRequest.Output = static_cast<void*>(&buffer[0]); // send code to our driver with the arguments if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), 0, 0)) { return std::string(buffer.data()); } else { return {}; } }
Что я уже пробовал:
std::vector<char> buffer(Size, char{ 0 });
Я тоже пробовал:
std::string WriteString(UINT_PTR ProcessId, UINT_PTR WriteAddress, UINT_PTR WriteValue, SIZE_T Size) { if (hDriver == INVALID_HANDLE_VALUE) { return {}; } DWORD64 Bytes; KERNEL_WRITE_REQUEST WriteRequest{}; std::vector<char> buffer(Size, char{ 0 }); WriteRequest.ProcessId = ProcessId; WriteRequest.Address = WriteAddress; WriteRequest.Size = buffer.size(); WriteRequest.Value = WriteValue; // send code to our driver with the arguments if (DeviceIoControl(hDriver, IO_WRITE_REQUEST, &WriteRequest, sizeof(WriteRequest), 0, 0, 0, 0)) { return {}; } else { return {}; } }
CPallini
Он похож на код, который вы можете найти здесь:
https://github.com/Zer0Mem0ry/KernelBhop/blob/master/KernelBhop/KeInterface.h
Но это совсем другое. Например, каков тип KERNEL_WRITE_REQUEST.Value?