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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

D024-突破TP,NP保护跨进程读写内存1【瑞客论坛 www.ruike1.com】.txt

1、 突破TP,NP保护跨进程读写内存12021在线班郁金香灬老师 QQ 150330575交流群:158280115学习目标: 突破TP,NP保护跨进程读写内存1 #include OpenProcess-ReadProcessMemory-WriteProcessMemory/OK 测试通过 遇到2个坑 /第1个坑 sizeof(PKAPC_STATE)是指针 得改结构大小 sizeof(KAPC_STATE)/第2个坑 KeStackAttachProcess后 进程空间变化了 得用内核内存 中转 BUF缓冲区/Address为目标进程的内存地址/Buffer /当前进程的地址BOOLEAN

2、 KReadProcessMemory(IN PEPROCESS Process, IN PVOID Address, IN UINT32 Length, IN OUT PVOID Buffer)KAPC_STATE apc_state;RtlZeroMemory(&apc_state, sizeof(KAPC_STATE);/在所有进程通用PVOID tmpBuf_Kernel = ExAllocatePool(NonPagedPool, Length);/可以改MDL把进程地址映射到内核驱动也可以/中转内存地址 因为 KeStackAttachProcess后 原来的进程R3 Buffer

3、 在目标地址里不存在/RtlCopyMemory(tmpBuf_Kernel, Buffer, Length);/进入到目标进程的 内存空间DbgPrint(yjx:附加到目标进程 Address=%p Buffer=%p, Address, Buffer);/进入目标进程内存空间KeStackAttachProcess(PVOID)Process, &apc_state);/判断目标地址是否可以访问BOOLEAN dwRet = MmIsAddressValid(Address);if (dwRet)KdPrint(yjxsys64 RtlCopyMemory(Address, Buffer

4、, Length);rn, Address, Buffer, Length);/RtlCopyMemory(Address, tmpBuf_Kernel, Length); /一定要用内核内存 中转RtlCopyMemory(tmpBuf_Kernel, Address, Length); / c/c+ memcpy elseKdPrint(yjx:sys64:Error Line37);/分离目标进程空间 恢复环境KeUnstackDetachProcess(&apc_state);DbgPrint(yjx: sys分离目标进程);RtlCopyMemory(Buffer, tmpBuf_K

5、ernel, Length);/DbgPrint(yjx:sys: Buffer0=%llx, *(UINT64*)Buffer);ExFreePool(tmpBuf_Kernel);return dwRet;/dwPid为目标进程id/lpBaseAddress 目标进程地址/lpBuffer 当前进程地址 1/内核内存地址 当前进程地址 2int ReadProcessMemoryForPid(UINT32 dwPid, PVOID pBase, PVOID lpBuffer, UINT32 nSize)/根据pid获取PEPROCESS OpenProcessPEPROCESS Sele

6、ted_pEPROCESS = NULL;DbgPrint(yjx:sys64 ReadMemory pid=%d pBase=%p, dwPid, pBase);if (PsLookupProcessByProcessId(PVOID)(UINT_PTR)(dwPid), &Seleted_pEPROCESS) = STATUS_SUCCESS)BOOLEAN br = KReadProcessMemory(Seleted_pEPROCESS, (PVOID)pBase, nSize, lpBuffer);ObDereferenceObject(Seleted_pEPROCESS);if (

7、br)return nSize;elseKdPrint(yjx sys64 PsLookupProcessByProcessId Fail.);return STATUS_SUCCESS;/ STATUS_UNSUCCESSFUL;/int ReadProcessMemoryForPid(UINT32 dwPid, PVOID pBase, PVOID lpBuffer, UINT32 nSize);void IRP_IO_通过PID读取数据(PIRP pirp)PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation(pirp);

8、/获取应用层传来的参数UINT64* 缓冲区 = (UINT64*)(pirp-AssociatedIrp.SystemBuffer);KdPrint(yjx:%s 行号%dn, _FUNCDNAME_, _LINE_);if (缓冲区)/int*p = (int*)缓冲区;UINT32 PID = (UINT32)(UINT64)缓冲区0; /传入数据PVOID pBase = (PVOID)(UINT64)缓冲区1; /传入数据/PVOID lpBuffer = (PVOID)(UINT64)缓冲区2; /传入数据UINT32 nSize = (UINT32)(UINT64)缓冲区3; /传入数据UINT32 ReadSize=ReadProcessMemoryForPid(PID, pBase, 缓冲区, nSize);pirp-IoStatus.Status = STATUS_SUCCESS;pirp-IoStatus.Information = nSize;/返回给DeviceIoControl中的 倒数第二个参数lpBytesReturnedIoCompleteRequest(pirp, IO_NO_INCREMENT);/调用方已完成所有I/O请求处理操作 并且不增加优先级 irpStack;

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

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