Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ Неверное чтение памяти процесса Kernel Mode

  • Автор темы Автор темы Arkting
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
2 Мар 2021
Сообщения
1,087
Реакции
406
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Написал драйвер для чтения/записи, но возникла проблема.
Я не могу получить истинное значение buffer на стороне клиента. Выводить должно "1000", но выводит "1".
Однако в полученном значении buffer из драйвера значение 1000 присваивается переменной ( видно на скриншоте в dbgview )
1668357991452.png

Я так понимаю проблема с кодом на стороне клиента, вот код:

C++:
Expand Collapse Copy
// структура для driver/client
struct KERNEL_MEMORY {
    ULONG PROCESSID;
    LONG64 PROCESSADDRESS;
    PVOID PROCESSBUFFER;
    ULONG BUFFERSIZE;
};

// функция чтения памяти
template <typename TYPE>
    TYPE DriverReadMemory(ULONG pId, LONG64 address) {
        TYPE buffer;

        km.PROCESSID = pId;
        km.PROCESSADDRESS = address;
        km.PROCESSBUFFER = reinterpret_cast<PVOID>(&buffer);
        km.BUFFERSIZE = sizeof(TYPE);

        DWORD result;
        BOOL Success = DeviceIoControl(hDriver, READ_REQUEST, &km, sizeof(km), nullptr, 0, &result, nullptr);
        if (Success) {
            return buffer;
        }
    }
 
Ты получаешь результат в виде dword его нужно уже в um перевести в нужный тебе тип данных.
Если на c++ то вот функция:
C++:
Expand Collapse Copy
template <class Dest, class Source>
inline Dest bit_cast(Source const &source) {
    static_assert(sizeof(Dest) == sizeof(Source));
    static_assert(std::is_trivially_copyable<Dest>::value);
    static_assert(std::is_trivially_copyable<Source>::value);

    Dest dest;
    std::memcpy(&dest, &source, sizeof(dest));
    return dest;
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ты получаешь результат в виде dword его нужно уже в um перевести в нужный тебе тип данных.
Если на c++ то вот функция:
C++:
Expand Collapse Copy
template <class Dest, class Source>
inline Dest bit_cast(Source const &source) {
    static_assert(sizeof(Dest) == sizeof(Source));
    static_assert(std::is_trivially_copyable<Dest>::value);
    static_assert(std::is_trivially_copyable<Source>::value);

    Dest dest;
    std::memcpy(&dest, &source, sizeof(dest));
    return dest;
}
вот так? но выбивает ошибку, я не могу кастить тип int в тип pvoid
C++:
Expand Collapse Copy
km.PROCESSBUFFER = reinterpret_cast<TYPE>(&buffer);
 
вот так? но выбивает ошибку, я не могу кастить тип int в тип pvoid
C++:
Expand Collapse Copy
km.PROCESSBUFFER = reinterpret_cast<TYPE>(&buffer);
Нужно кастить не в драйвере а в Чите или где ты это юзаешь.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
еще не решено
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ты result передаешь не в тот аргумент DeviceIoControl
уже понял, спасибо. Нужно было иначе передать аргументы в контроллер , заполнив еще outBuffer и его размер (в исходном коде у меня nullptr)
 
Назад
Сверху Снизу