C++ Eac чтение памяти

Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
269
Реакции[?]
49
Поинты[?]
0
С оффнутым еаком все работает
eac off.PNG
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
eac on.PNG

usermode:
    template <typename type> type ReadVirtualMemory(ULONG ProcessId, ULONGLONG ReadAddress, SIZE_T Size)
    {
        if (hDriver == INVALID_HANDLE_VALUE)
            return (type)false;

        DWORD Return, Bytes;
        KERNEL_READ_REQUEST ReadRequest;

        ReadRequest.ProcessId = ProcessId;
        ReadRequest.Address = ReadAddress;
        ReadRequest.Size = Size;

        if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), &Bytes, 0))
            return *(type*)&ReadRequest.Response;
        else
            return (type)false;
    }
kernel:
if (ControlCode == IO_READ_REQUEST)
{
    PKERNEL_READ_REQUEST ReadInput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;
    PKERNEL_READ_REQUEST ReadOutput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;

    PEPROCESS Process;
    if (NT_SUCCESS(PsLookupProcessByProcessId(ReadInput->ProcessId, &Process)))KeReadVirtualMemory(Process, ReadInput->Address,&ReadInput->Response, ReadInput->Size);

    Status = STATUS_SUCCESS;
    BytesIO = sizeof(KERNEL_READ_REQUEST);
}

NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size)
{
    PSIZE_T Bytes;
    if (NT_SUCCESS(MmCopyVirtualMemory(Process, SourceAddress, PsGetCurrentProcess(), TargetAddress, Size, KernelMode, &Bytes)))
        return STATUS_SUCCESS;
    else
        return STATUS_ACCESS_DENIED;
}
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Драйвер грузится?
Какие движения в драйвере происходят?
 
Участник
Статус
Оффлайн
Регистрация
21 Сен 2019
Сообщения
594
Реакции[?]
250
Поинты[?]
23K
С оффнутым еаком все работает
Посмотреть вложение 200281
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
Посмотреть вложение 200282

usermode:
    template <typename type> type ReadVirtualMemory(ULONG ProcessId, ULONGLONG ReadAddress, SIZE_T Size)
    {
        if (hDriver == INVALID_HANDLE_VALUE)
            return (type)false;

        DWORD Return, Bytes;
        KERNEL_READ_REQUEST ReadRequest;

        ReadRequest.ProcessId = ProcessId;
        ReadRequest.Address = ReadAddress;
        ReadRequest.Size = Size;

        if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), &Bytes, 0))
            return *(type*)&ReadRequest.Response;
        else
            return (type)false;
    }
kernel:
if (ControlCode == IO_READ_REQUEST)
{
    PKERNEL_READ_REQUEST ReadInput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;
    PKERNEL_READ_REQUEST ReadOutput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;

    PEPROCESS Process;
    if (NT_SUCCESS(PsLookupProcessByProcessId(ReadInput->ProcessId, &Process)))KeReadVirtualMemory(Process, ReadInput->Address,&ReadInput->Response, ReadInput->Size);

    Status = STATUS_SUCCESS;
    BytesIO = sizeof(KERNEL_READ_REQUEST);
}

NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size)
{
    PSIZE_T Bytes;
    if (NT_SUCCESS(MmCopyVirtualMemory(Process, SourceAddress, PsGetCurrentProcess(), TargetAddress, Size, KernelMode, &Bytes)))
        return STATUS_SUCCESS;
    else
        return STATUS_ACCESS_DENIED;
}
EAC, и подобные нормальные кернел-анти-читы защищают память игры.
 
Начинающий
Статус
Оффлайн
Регистрация
13 Апр 2022
Сообщения
26
Реакции[?]
12
Поинты[?]
2K
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
269
Реакции[?]
49
Поинты[?]
0
Драйвер грузится?
Какие движения в драйвере происходят?
да грузится
оффаю проверку подписи dsefix'ом, запускаю драйвер, включаю проверку подписи обратно, после этого чищу mmUnloadedDrivers и PiDDBCacheTable
что под движениями в драйвере подразумевается?
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Зайдем и покажем, как делать красиво.
Забаненный
Статус
Оффлайн
Регистрация
31 Мар 2021
Сообщения
256
Реакции[?]
44
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
С оффнутым еаком все работает
Посмотреть вложение 200281
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
Посмотреть вложение 200282

usermode:
    template <typename type> type ReadVirtualMemory(ULONG ProcessId, ULONGLONG ReadAddress, SIZE_T Size)
    {
        if (hDriver == INVALID_HANDLE_VALUE)
            return (type)false;

        DWORD Return, Bytes;
        KERNEL_READ_REQUEST ReadRequest;

        ReadRequest.ProcessId = ProcessId;
        ReadRequest.Address = ReadAddress;
        ReadRequest.Size = Size;

        if (DeviceIoControl(hDriver, IO_READ_REQUEST, &ReadRequest, sizeof(ReadRequest), &ReadRequest, sizeof(ReadRequest), &Bytes, 0))
            return *(type*)&ReadRequest.Response;
        else
            return (type)false;
    }
kernel:
if (ControlCode == IO_READ_REQUEST)
{
    PKERNEL_READ_REQUEST ReadInput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;
    PKERNEL_READ_REQUEST ReadOutput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;

    PEPROCESS Process;
    if (NT_SUCCESS(PsLookupProcessByProcessId(ReadInput->ProcessId, &Process)))KeReadVirtualMemory(Process, ReadInput->Address,&ReadInput->Response, ReadInput->Size);

    Status = STATUS_SUCCESS;
    BytesIO = sizeof(KERNEL_READ_REQUEST);
}

NTSTATUS KeReadVirtualMemory(PEPROCESS Process, PVOID SourceAddress, PVOID TargetAddress, SIZE_T Size)
{
    PSIZE_T Bytes;
    if (NT_SUCCESS(MmCopyVirtualMemory(Process, SourceAddress, PsGetCurrentProcess(), TargetAddress, Size, KernelMode, &Bytes)))
        return STATUS_SUCCESS;
    else
        return STATUS_ACCESS_DENIED;
}
Поставили протект память как в Rust, вроде в танках такой же античит как и в Rust
что под движениями в драйвере подразумевается?
Читает или нет, да и вообще работает дальше или просто выгружается
 
Участник
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
1,081
Реакции[?]
213
Поинты[?]
0
Поставили протект память как в Rust, вроде в танках такой же античит как и в Rust

Читает или нет, да и вообще работает дальше или просто выгружается
раст != танки, и если бы даже их туда поставили, то челу бы возвращало что угодно, кроме нуля


копируй память в выделенный буффер в дрв, а после в юм буффер
 
Зайдем и покажем, как делать красиво.
Забаненный
Статус
Оффлайн
Регистрация
31 Мар 2021
Сообщения
256
Реакции[?]
44
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
раст != танки, и если бы даже их туда поставили, то челу бы возвращало что угодно, кроме нуля


копируй память в выделенный буффер в дрв, а после в юм буффер
Не ноль 1650393117101.png,но добавить протекты и танки могли, у них очень серьезно с читерством
 
Участник
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
1,081
Реакции[?]
213
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
269
Реакции[?]
49
Поинты[?]
0
ридвиртуалмемори возвращает 0xcccccccc
драйвер:
Снимок.PNG

drv:
    if (ControlCode == IO_READ_REQUEST)
    {
        PKERNEL_READ_REQUEST ReadInput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;
        PKERNEL_READ_REQUEST ReadOutput = (PKERNEL_READ_REQUEST)Irp->AssociatedIrp.SystemBuffer;

        PEPROCESS Process;
        
        NTSTATUS stat = PsLookupProcessByProcessId(ReadInput->ProcessId, &Process);

        if (NT_SUCCESS(stat)) {

            NTSTATUS kestat = KeReadVirtualMemory(Process, ReadInput->Address, &ReadInput->Response, ReadInput->Size);

            if (!NT_SUCCESS(kestat)) {
                DPRINT("KeReadVirtualMemory failed status: 0x%x", kestat);
            }

        }   
        else if (!NT_SUCCESS(stat)) {

            DPRINT("PsLookupProcessByProcessId failed status: 0x%x", stat);
        }

        DbgPrintEx(0, 0, "Read Params:  %lu, %#010x \n", ReadInput->ProcessId, ReadInput->Address);
        DbgPrintEx(0, 0, "Value: %lu \n", ReadOutput->Response);

        Status = STATUS_SUCCESS;
        BytesIO = sizeof(KERNEL_READ_REQUEST);
    }
 
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
269
Реакции[?]
49
Поинты[?]
0
Можете закрывать тред, проблема была в том что драйер не тот пид и бейсаддр получал
1650429712426.png
 
Сверху Снизу