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

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

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
272
Реакции
49
С оффнутым еаком все работает
eac off.PNG

С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
eac on.PNG


usermode:
Expand Collapse Copy
    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:
Expand Collapse Copy
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;
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Драйвер грузится?
Какие движения в драйвере происходят?
 
С оффнутым еаком все работает
Посмотреть вложение 200281
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
Посмотреть вложение 200282

usermode:
Expand Collapse Copy
    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:
Expand Collapse Copy
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, и подобные нормальные кернел-анти-читы защищают память игры.
 
Драйвер грузится?
Какие движения в драйвере происходят?
да грузится
оффаю проверку подписи dsefix'ом, запускаю драйвер, включаю проверку подписи обратно, после этого чищу mmUnloadedDrivers и PiDDBCacheTable
что под движениями в драйвере подразумевается?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
С оффнутым еаком все работает
Посмотреть вложение 200281
С включенным драйвер получает pid и BaseAddr но память судя по всему не читает, в чем может быть проблема?
Посмотреть вложение 200282

usermode:
Expand Collapse Copy
    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:
Expand Collapse Copy
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
что под движениями в драйвере подразумевается?
Читает или нет, да и вообще работает дальше или просто выгружается
 
Поставили протект память как в Rust, вроде в танках такой же античит как и в Rust

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


копируй память в выделенный буффер в дрв, а после в юм буффер
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
раст != танки, и если бы даже их туда поставили, то челу бы возвращало что угодно, кроме нуля


копируй память в выделенный буффер в дрв, а после в юм буффер
Не ноль
1650393117101.png
,но добавить протекты и танки могли, у них очень серьезно с читерством
 
ридвиртуалмемори возвращает 0xcccccccc
драйвер:
Снимок.PNG


drv:
Expand Collapse Copy
    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);
    }
 
Назад
Сверху Снизу