内核写入进程内存导致蓝屏
Kernel Writing Process Memory causing BSOD
我一直在编写进程内存、查看在线资源时遇到问题我尝试按照 Cheat Engine 的方式进行编译。
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);
}
尽管调用它时出现了问题,每次 target[i] = source[i];
都会导致 BSOD
可能是我输入的不正确'Address'/'Size'/'Buffer' 但这是我的配置:
fWriteProcessMemory(GlobalProcessID, GlobalProcessPE, (PVOID)(*(ULONG*)pBuf), sizeof(ULDat), (PVOID)ULDat)
以ULDat为待写入内存(ULONG),pBuf即Irp->AssociatedIrp.SystemBuffer为待写入内存地址
如有任何帮助,我们将不胜感激。
if ULDat = 6969
then (PVOID)ULDat 是指向内存位置地址 6969(或 0x1b39 hexa)的指针,然后在您的循环中,source[i] 试图从地址 (0x1b39) 中选择一个字符+ i), 这就是它蓝屏死机的原因。
所以是的,在那里使用 &ULDat,这就是解决方案。
我一直在编写进程内存、查看在线资源时遇到问题我尝试按照 Cheat Engine 的方式进行编译。
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);
}
尽管调用它时出现了问题,每次 target[i] = source[i];
都会导致 BSOD可能是我输入的不正确'Address'/'Size'/'Buffer' 但这是我的配置:
fWriteProcessMemory(GlobalProcessID, GlobalProcessPE, (PVOID)(*(ULONG*)pBuf), sizeof(ULDat), (PVOID)ULDat)
以ULDat为待写入内存(ULONG),pBuf即Irp->AssociatedIrp.SystemBuffer为待写入内存地址
如有任何帮助,我们将不胜感激。
if ULDat = 6969
then (PVOID)ULDat 是指向内存位置地址 6969(或 0x1b39 hexa)的指针,然后在您的循环中,source[i] 试图从地址 (0x1b39) 中选择一个字符+ i), 这就是它蓝屏死机的原因。
所以是的,在那里使用 &ULDat,这就是解决方案。