msgbox 发表于 2016-3-31 10:34:24

大家看看这段驱动代码为什么不能读取DXF的游戏内存

本帖最后由 msgbox 于 2016-4-1 09:40 编辑

NTSTATUSMyReadMemory(IN HANDLE hProcess,IN PVOID BaseAddress,OUT PVOID Pbuff,IN ULONG BufferSize)
{
        PEPROCESS EProcess;
        KAPC_STATE ApcState;
        PVOID readbuffer=NULL;
        NTSTATUS status;
        status = ObReferenceObjectByHandle(
                hProcess,
                PROCESS_VM_WRITE|PROCESS_VM_READ,
                NULL,
                KernelMode,
                &EProcess,
                NULL
                );
        if(!NT_SUCCESS(status))
        {
                ObDereferenceObject(EProcess);
                return STATUS_UNSUCCESSFUL;
        }
        readbuffer = ExAllocatePoolWithTag (NonPagedPool, BufferSize, 'Sys');
        if(readbuffer==NULL)
        {
                ObDereferenceObject(EProcess);
                ExFreePool (readbuffer);
                return STATUS_UNSUCCESSFUL;
        }
        *(ULONG*)readbuffer=(ULONG)0x1;
       MyKeStackAttachProcess(EProcess, &ApcState);
        //KeStackAttachProcess(EProcess, &ApcState);
        if (MmIsAddressValid(BaseAddress))
        {
                __try
                {
                        ProbeForRead ((CONST PVOID)BaseAddress, BufferSize, sizeof(CHAR));
                        RtlCopyMemory (readbuffer, BaseAddress, BufferSize);
                }
                __except(EXCEPTION_EXECUTE_HANDLER)
                {
                        status = STATUS_UNSUCCESSFUL;
                }
        }
        else
        {
                status = STATUS_UNSUCCESSFUL;
        }
        KeUnstackDetachProcess (&ApcState);
        if(NT_SUCCESS(status))
        {
                if (MmIsAddressValid(Pbuff))
                {
                        __try
                        {
                                ProbeForWrite(Pbuff, BufferSize, sizeof(CHAR));
                                RtlCopyMemory (Pbuff, readbuffer, BufferSize);
                        }
                        __except(EXCEPTION_EXECUTE_HANDLER)
                        {
                                status = STATUS_UNSUCCESSFUL;
                        }
                }
                else
                {
                        status = STATUS_UNSUCCESSFUL;
                }
        }
        ObDereferenceObject(EProcess);
        ExFreePool (readbuffer);
        return status;
}

应该还需要恢复什么吗?

msgbox 发表于 2016-4-1 09:41:06

没人帮忙解决下吗 ?

13751652677 发表于 2016-4-1 15:16:54

DSC
页: [1]
查看完整版本: 大家看看这段驱动代码为什么不能读取DXF的游戏内存