前段时间因为热衷于对技术的研究 用IO设备通信 整了个DNF的读写 :)
发现win7 这函数居然MmCopyVirtualMemory读不到真内存(IDT真恶心 口区)
但是直接MDL能直接读到(不要问我为什么不直接MDL读 因为太菜了 不会写)
dalao:既然MDL能直接读到为啥用
MmCopyVirtualMemory呢
我:因为
MmCopyVirtualMemory 确实挺方便的
mdl还要自己处理异常
dalao:那就给个try不就完了
我:......好的 我(C)爱(N)你(M)
大家用CE的时候也会发现 就算恢复了权限 也还是读不到内存 (这个时候把页表恢复就能直接CE读取真内存了)
这是因为IDT保护 他只会给游戏进程和System进程的线程读真页表
如果不是他就会给假页表给你读(最恶心的是假页表还有数据 让你以为自己很行的亚子)
把当前线程的 _ETHREAD.Cid.ProcessID改成4 或者游戏PID 就IDT就会给你真页表了
代码:
温馨提示:
不要用MmIsAddressValid这个函数来判断游戏地址的有效性 有地址就是莫名其妙的缺页 他就返回失败了
这样就能读到了 因为mdl需要异常处理 这个函数不需要 有的时候用不了异常处理 就只能用这个函数来读取了
代码执行完记得把ID恢复回去 不然回到R3会炸
还有为啥mdl就能读到真内存呢..他不是页表都给的是假的吗 真奇怪
PS : 共建美好论坛 分享代码 从我做起 我爱分享 我爱论坛 :)
[注意]APP应用上架合规检测服务,协助应用顺利上架!
最后于 2019-9-9 17:16
被不吃麻婆豆腐编辑
,原因: