首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内核写入进程内存导致BSOD

内核写入进程内存导致BSOD
EN

Stack Overflow用户
提问于 2016-02-09 06:55:19
回答 1查看 246关注 0票数 0

我在编写进程内存、在线查看源代码时遇到了问题,我试图编译欺骗引擎的方式。

代码语言:javascript
运行
复制
BOOLEAN fWriteProcessMemory(ULONG PID, PEPROCESS PEProcess, PVOID Address, ULONG Size, PVOID Buffer)
{
    PEPROCESS selectedprocess = PEProcess;
    KAPC_STATE apc_state;
    NTSTATUS ntStatus = STATUS_UNSUCCESSFUL;

    if (selectedprocess == NULL)
    {
        if (!NT_SUCCESS(PsLookupProcessByProcessId((PVOID)(UINT_PTR)PID, &selectedprocess)))
            return FALSE;
    }

    UINT_PTR temp = (UINT_PTR)Address;

    RtlZeroMemory(&apc_state, sizeof(apc_state));

    KeAttachProcess((PEPROCESS)selectedprocess);

    char* target;
    char* source;
    unsigned int i;

    target = Address;
    source = Buffer;

    for (i = 0; i<Size; i++)
    {
        target[i] = source[i];
    }
    ntStatus = STATUS_SUCCESS;

    KeDetachProcess();

    return NT_SUCCESS(ntStatus);
}

尽管人们一提到它就产生了问题,每次目标都会引起一次BSOD;

可能是我输入了错误的“地址”/“大小”/“缓冲区”,但以下是我的配置:

代码语言:javascript
运行
复制
fWriteProcessMemory(GlobalProcessID, GlobalProcessPE, (PVOID)(*(ULONG*)pBuf), sizeof(ULDat), (PVOID)ULDat)

将ULDat作为要写入的内存(ULONG),将Irp->AssociatedIrp.SystemBuffer的pBuf作为要写入的内存地址。

任何帮助都将不胜感激,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 08:41:13

如果ULDat = 6969 char (PVOID)ULDat是指向内存位置地址6969 (或0x1b39十六进制)的指针,那么在您的循环中,sourcei试图从地址(0x1b39 + i)中选择一个字符,这就是它的BSOD的原因。

所以是的,在那里使用&ULDat,这就是解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35285718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档