ImageVerifierCode 换一换
格式:TXT , 页数:4 ,大小:4.61KB ,
资源ID:3402773      下载积分:2 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wnwk.com/docdown/3402773.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(D025-突破TP,NP等游戏保护跨进程读写内存方法2【瑞客论坛 www.ruike1.com】.txt)为本站会员(a****2)主动上传,蜗牛文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蜗牛文库(发送邮件至admin@wnwk.com或直接QQ联系客服),我们立即给予删除!

D025-突破TP,NP等游戏保护跨进程读写内存方法2【瑞客论坛 www.ruike1.com】.txt

1、 突破TP,NP保护跨进程读写内存22021在线班郁金香灬老师 QQ 150330575交流群:158280115学习目标: 突破TP,NP保护跨进程读写内存2League of Legends.exe0x400000 IoAllocateMdl IoFreeMdlMmBuildMdlForNonPagedPoolMmMapLockedPages MmUnmapLockedPagesKeStackAttachProcess KeUnstackDetachProcess#include /OK 测试通过 遇到2个坑 /第1个坑 sizeof(PKAPC_STATE)是指针 得改结构大小 size

2、of(KAPC_STATE)/第2个坑 KeStackAttachProcess后 进程空间变化了 得用内核内存 中转 BUF缓冲区/Address为目标进程的内存地址/Buffer /当前进程的地址BOOLEAN KReadProcessMemory2(IN PEPROCESS Process, IN PVOID Address, IN UINT32 Length, IN PVOID UserBuffer)KAPC_STATE apc_state;RtlZeroMemory(&apc_state, sizeof(KAPC_STATE); /1为UserBuffer 创建 MDL内存描述 /创

3、建MDL来读取内存 UserBuffer=0x200000PMDL g_pmdl = IoAllocateMdl(UserBuffer,Length, 0, 0, NULL); /8 可以修改成 要读取的内存大小if (!g_pmdl)return FALSE;/2标记为非分页内存MmBuildMdlForNonPagedPool(g_pmdl);/3锁定 映射用户内存 到 内核内存 0x100000unsigned char* Mapped = (unsigned char*)MmMapLockedPages(g_pmdl, KernelMode); /UserModeif (!Mapped

4、) /映射失败IoFreeMdl(g_pmdl);return FALSE;/成功 映射了 地址/切换到 目标进程KeStackAttachProcess(PVOID)Process, &apc_state);/判断目标地址是否可以访问 UserBuffer不可访问 Mapped可以访问BOOLEAN dwRet = MmIsAddressValid(Address);if (dwRet)KdPrint(yjxsys64 RtlCopyMemory(Address, Buffer, Length);rn, Address, UserBuffer, Length); /如果目标地址 可以访问 直

5、接复制目标地址内容 到映射的内核地址区域RtlCopyMemory(Mapped, Address, Length); /memcpy RtlCopyMemory(Address,Mapped, Length); /memcpy elseKdPrint(yjx:sys64:Error Line37);/分离目标进程空间 恢复环境KeUnstackDetachProcess(&apc_state);DbgPrint(yjx: sys分离目标进程); /MDL清理工作/释放MDL相关 资源MmUnmapLockedPages(PVOID)Mapped, g_pmdl);IoFreeMdl(g_pm

6、dl); return dwRet;/dwPid为目标进程id/lpBaseAddress 目标进程地址/lpBuffer 当前进程地址 1/内核内存地址 当前进程地址 2int ReadProcessMemoryForPid2(UINT32 dwPid, PVOID pBase, PVOID lpBuffer, UINT32 nSize)/根据pid获取PEPROCESSPEPROCESS Seleted_pEPROCESS = NULL;DbgPrint(yjx:sys64 ReadMemory pid=%d pBase=%p, dwPid, pBase);if (PsLookupProc

7、essByProcessId(PVOID)(UINT_PTR)(dwPid), &Seleted_pEPROCESS) = STATUS_SUCCESS)BOOLEAN br = KReadProcessMemory2(Seleted_pEPROCESS, (PVOID)pBase, nSize, lpBuffer);ObDereferenceObject(Seleted_pEPROCESS);if (br)return nSize;elseKdPrint(yjx sys64 PsLookupProcessByProcessId Fail.);return 0;/ STATUS_UNSUCCE

8、SSFUL;/int ReadProcessMemoryForPid2(UINT32 dwPid, PVOID pBase, PVOID lpBuffer, UINT32 nSize);NTSTATUS IRP_ReadProcessMemory2(PDEVICE_OBJECT device_Object, PIRP pirp)UNREFERENCED_PARAMETER(device_Object); /未使用的参数 禁止警告DbgPrint(yjx:sysNtAllocateVirtualMemory 进入 IRP_YJX_VirtualAllocEx n);NTSTATUS ntStat

9、us = STATUS_SUCCESS;PIO_STACK_LOCATION irpStack = NULL;irpStack = IoGetCurrentIrpStackLocation(pirp);#pragma pack(push)#pragma pack(1)typedef struct TINPUT_BUFDWORD32 dwPid;PVOID pBase; /目标进程地址DWORD32 nSize;/缓冲区大小TINPUT_BUF;#pragma pack(pop)/结构PVOID BaseAddress = NULL; /返回地址PEPROCESS selectedprocess

10、 = NULL;/目标进程SIZE_T RegionSize = 0;/分配大小TINPUT_BUF*bufInput = pirp-AssociatedIrp.SystemBuffer; /输入 输出 缓冲区 ReadProcessMemoryForPid2(bufInput-dwPid, bufInput-pBase, bufInput, bufInput-nSize);/ENDCODE:/pirp-IoStatus.Status = STATUS_SUCCESS;/pirp-IoStatus.Information = 4;/返回给DeviceIoControl中的 倒数第二个参数lpB

11、ytesReturned/IoCompleteRequest(pirp, IO_NO_INCREMENT);/调用方已完成所有I/O请求处理操作 并且不增加优先级 if (irpStack) /if (ntStatus = STATUS_SUCCESS) /成功则返回 缓冲区大小pirp-IoStatus.Information = irpStack-Parameters.DeviceIoControl.OutputBufferLength;/DeviceIoControlelse /失败则不返回pirp-IoStatus.Information = 0;/完成请求IoCompleteRequest(pirp, IO_NO_INCREMENT);pirp-IoStatus.Status = ntStatus;return ntStatus;

copyright@ 2008-2023 wnwk.com网站版权所有

经营许可证编号:浙ICP备2024059924号-2