- 注册时间
- 2021-4-16
- 最后登录
- 2024-7-7
- 在线时间
- 4 小时
编程入门
- 龙马币
- 52
|
内核下对进程只读内存的安全写入方法SafeCopyMemory
测试过了,好用.
- BOOLEAN SafeCopyMemory(PVOID pDestination, PVOID pSourceAddress, SIZE_T SizeOfCopy)
- {
- PMDL pMdl = NULL;
- PVOID pSafeAddress = NULL;
- if (!MmIsAddressValid(pDestination) || !MmIsAddressValid(pSourceAddress))
- return FALSE;
- pMdl = IoAllocateMdl(pDestination, (ULONG)SizeOfCopy, FALSE, FALSE, NULL);
- if (!pMdl)
- return FALSE;
- __try
- {
- MmProbeAndLockPages(pMdl, KernelMode, IoReadAccess);
- }
- __except (EXCEPTION_EXECUTE_HANDLER)
- {
- IoFreeMdl(pMdl);
- return FALSE;
- }
- pSafeAddress = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority);
- if (!pSafeAddress)
- return FALSE;
- __try
- {
- RtlMoveMemory(pSafeAddress, pSourceAddress, SizeOfCopy);
- }
- __except (EXCEPTION_EXECUTE_HANDLER)
- {
- ;
- }
- MmUnlockPages(pMdl);
- IoFreeMdl(pMdl);
- return TRUE;
- }
- void Test()
- {
- PVOID HookCode = ExAllocatePool(NonPagedPool, 0x200);
- RtlFillMemory(HookCode, 0x200, 0x90);
- RtlMoveMemory(HookCode, NtOpenProcess, 0x3);
- SafeCopyMemory(NtOpenProcess, HookCode, 0x3);
- }
复制代码
|
|