Вопрос Kernel MmCopyVirtualMemory

  • Автор темы Автор темы WhiteCap
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
16 Фев 2021
Сообщения
23
Реакции
0
Добрый день, столкнулся с такой проблемой, что при обращение к варфейсу через MmCopyVirtualMemory, в любом случае он возвращает значение 0 либо ж NULL.
Вопрос, это блокировка чтения (хотя сижу на уровне ядра) или же в чём то другом ошибка?
Не много кода ;3

C++:
Expand Collapse Copy
DWORD64 ADD_GETNAME = g_pCEntity + 0x60;

UCHAR NamePlayer;
if (NT_SUCCESS(MmCopyVirtualMemory(Process, ADD_GETNAME, PsGetCurrentProcess(), &NamePlayer, sizeof(NamePlayer), KernelMode, &Bytes))){
     DbgPrintEx(0, 0, "Warface GetName: %s\n", NamePlayer);
}
else{
    DbgPrintEx(0, 0, "Warface Error GetName\n");
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Добрый день, столкнулся с такой проблемой, что при обращение к варфейсу через MmCopyVirtualMemory, в любом случае он возвращает значение 0 либо ж NULL.
Вопрос, это блокировка чтения (хотя сижу на уровне ядра) или же в чём то другом ошибка?
Не много кода ;3

C++:
Expand Collapse Copy
DWORD64 ADD_GETNAME = g_pCEntity + 0x60;

UCHAR NamePlayer;
if (NT_SUCCESS(MmCopyVirtualMemory(Process, ADD_GETNAME, PsGetCurrentProcess(), &NamePlayer, sizeof(NamePlayer), KernelMode, &Bytes))){
     DbgPrintEx(0, 0, "Warface GetName: %s\n", NamePlayer);
}
else{
    DbgPrintEx(0, 0, "Warface Error GetName\n");
}
вроде все правильно, но может адресс вронг указываешь?
 
вроде все правильно, но может адресс вронг указываешь?
Адреса все верны, иначе выдаёт синьку
Пробовал даже прочитать SCvars, выдаёт 0, а при записи ошибку
Пробовал с ними:
C++:
Expand Collapse Copy
DWORD64 SCvars = 0x1424E7D20;
DWORD64 cl_game_release = 0x44;
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Добрый день, столкнулся с такой проблемой, что при обращение к варфейсу через MmCopyVirtualMemory, в любом случае он возвращает значение 0 либо ж NULL.
Вопрос, это блокировка чтения (хотя сижу на уровне ядра) или же в чём то другом ошибка?
Не много кода ;3

C++:
Expand Collapse Copy
DWORD64 ADD_GETNAME = g_pCEntity + 0x60;

UCHAR NamePlayer;
if (NT_SUCCESS(MmCopyVirtualMemory(Process, ADD_GETNAME, PsGetCurrentProcess(), &NamePlayer, sizeof(NamePlayer), KernelMode, &Bytes))){
     DbgPrintEx(0, 0, "Warface GetName: %s\n", NamePlayer);
}
else{
    DbgPrintEx(0, 0, "Warface Error GetName\n");
}
Мой драйвер работает с варфейсом, проверял:

C++:
Expand Collapse Copy
NTSTATUS KeWriteVirtualMemory(PEPROCESS Process, PVOID Address, PVOID TargetAddress, SIZE_T Size) {
    SIZE_T Bytes;
    return MmCopyVirtualMemory(PsGetCurrentProcess(), Address, Process, TargetAddress, Size, KernelMode, &Bytes);
}

Если ты уверен что все написано правильно - значит выходишь на смещение неверно. Путь до нужного тебе значения из-за виртуальной таблицы отличается, нежели как в dll

Выше была запись памяти, ниже чтение

C++:
Expand Collapse Copy
NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID Address, PVOID TargetAddress, SIZE_T Size) {
    SIZE_T Bytes;
    return MmCopyVirtualMemory(Process, Address, PsGetCurrentProcess(), TargetAddress, Size, KernelMode, &Bytes);
}
 
дык тебе не обязательно синьку выдаст если адрес невалидный (а он у тебя невалидный)..
там неверно абсолютно всё, так же как и то как он пытается прочитать строку
 
Мой драйвер работает с варфейсом, проверял:

C++:
Expand Collapse Copy
NTSTATUS KeWriteVirtualMemory(PEPROCESS Process, PVOID Address, PVOID TargetAddress, SIZE_T Size) {
    SIZE_T Bytes;
    return MmCopyVirtualMemory(PsGetCurrentProcess(), Address, Process, TargetAddress, Size, KernelMode, &Bytes);
}

Если ты уверен что все написано правильно - значит выходишь на смещение неверно. Путь до нужного тебе значения из-за виртуальной таблицы отличается, нежели как в dll

Выше была запись памяти, ниже чтение

C++:
Expand Collapse Copy
NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID Address, PVOID TargetAddress, SIZE_T Size) {
    SIZE_T Bytes;
    return MmCopyVirtualMemory(Process, Address, PsGetCurrentProcess(), TargetAddress, Size, KernelMode, &Bytes);
}
Спасибо
 
Назад
Сверху Снизу