突发奇想出的原创思路在理论上经过完善应该可以做到过游戏保护无驱动读写内存

首先看一下MSDN对这个函数的定义

BOOL DuplicateHandle(HANDLE   hSourceProcessHandle,HANDLE   hSourceHandle,HANDLE   hTargetProcessHandle,LPHANDLE lpTargetHandle,DWORD    dwDesiredAccess,BOOL     bInheritHandle,DWORD    dwOptions
);

这个API实现的是跨进程拷贝内核对象,比如进程句柄、文件句柄都是可以拷贝的对象,如果目标进程中存在这样的对象,则可以将该对象拷贝到另一个进程中去使用。

第一个参数为要拷贝的目标进程句柄

第二个参数为目标进程中要拷贝的句柄

第三个参数为当前进程句柄

第四个参数传出拷贝出的新句柄,并且在当前进程中可以使用该句柄

首先举个例子解释一下这个用法

A进程正在运行,B进程有权限读写他并且已经打开了A进程,C进程拷贝B进程中打开A进程后的句柄来读写A进程内存

B进程代码如下:

#include <stdio.h>
#include <Windows.h>int main()
{HANDLE  srchandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 3656);printf("handle = %d\n", (int)srchandle); //以十进制打印出句柄DWORD  num;ReadProcessMemory(srchandle, (LPCVOID)0xE805D8, &num, 4, NULL);printf("%d", num);  //打印出读出的内容system("pause");return 0;
}

运行结果:

由图可知,B进程读A进程内容为100,句柄十进制为240

此时我们运行C进程,代码如下

#include <Windows.h>
#include <stdio.h>int main()
{HANDLE  copyhandle = (HANDLE)240; // 目标进程中将被拷贝过来的句柄HANDLE targethandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14712); //目标进程句柄HANDLE newhandle; //存放拷贝出来的新句柄DuplicateHandle(targethandle, copyhandle, GetCurrentProcess(), &newhandle, 0, FALSE, DUPLICATE_SAME_ACCESS); //拷贝DWORD  num;ReadProcessMemory(newhandle, (LPCVOID)0xE805D8, &num, 4, NULL); //利用新句柄读写内存并打印printf("%d\n", num);system("pause");return 0;
}

首先我们知道了要拷贝的句柄十进制为240,并且获得了目标进程句柄,利用DuplicateHandle拷贝到新的句柄newhandle,并利用该句柄成功读出了A进程0xE805D8地址内容为100,并与B进程读出的结果一致。(注意此过程并没有打开A进程

至此,成功完成了跨进程拷贝句柄并读内存

可能大家会有以下几个疑问:

1.已经知道了B打开A进程的句柄为十进制240,为什么不HANDLE handle = (HANDLE)240然后直接利用handle?

2.在过保护方面有什么可用之处?

3.在对抗游戏保护时如何得到这个打开的句柄?

4.如何取得目标进程句柄,即加载驱动保护游戏的进程的句柄?

我的解答是:

1.如果直接利用handle = (HANDLE)240这个句柄读会出现下图的情况

因为B进程得到的句柄并不能直接给C进程用,必须要利用DuplicateHandle()拷贝过来才行

2.为什么在过保护方面有用,因为很多游戏保护都是像下图这样的

虽然游戏进程无法打开,但是加载驱动保护游戏的进程却可以被打开,比如图中的TslGame_BE.exe,而通常保护游戏的进程都是可以打开游戏的进程的,或者说在加载驱动之前就已经打开了游戏的进程,因此可以利用这个句柄

3.如何打开保护游戏的进程的句柄比如TslGame_BE.exe的句柄,很明显在第二点已经说过了,该进程并没有被保护,CE可以看见图标就意味着可以被打开

4.如何取得TslGame_BE.exe中打开游戏进程的句柄?很明显我们可以注入DLL下钩子,钩住TslGame_BE.exe中的OpenProcess() API,并传出句柄。向TslGame_BE.exe注入DLL比向游戏进程注入简单,游戏进程在加载前驱动已经加载好了因此除了ring0层之外很难注入,但是TslGame_BE.exe却可以被注入,只要摘掉该进程对LoadLibrary的钩子便可,然后利用DLL隐藏技术隐藏自身,HOOK API并传回句柄,再卸载掉注入的DLL。

注:以上只是博主今天突发奇想而出的一种思路,可能有纰漏之处需要改正,理论上可行但具体对抗保护方面未经过实践,只是指出了一条思路,因为在网上也并有看到有类似的方法,如果可行也希望各大游戏安全部门引以为戒。

利用DuplicateHandle()无驱动的另类读写内存方法,理论上可以过游戏保护读写相关推荐

  1. 光谱仪测试软件死机和电脑系统有关系吗,利用无驱动系统解决光谱仪控制计算机不兼容的问题.pdf...

    利用无驱动系统解决光谱仪控制计算机不兼容的问题.pdf 太钢科技 ·33· 利用无驱动系统解决光谱仪 控制计算机不兼容的问题 技术中心 张征宇 赵卫星 刘兆晋 摘 要 将原来的操作系统中的各个驱动程序 ...

  2. 字节终面:CPU 是如何读写内存的?

    如果你觉得这是一个非常简单的问题,那么你真应该好好读读本文,我敢保证这个问题绝没有你想象的那么简单. 注意,一定要完本文,否则可能会得出错误的结论. 闲话少说,让我们来看看CPU在读写内存时底层究竟发 ...

  3. linux驱动访问内存,linux驱动笔记八(内存与IO访问)

    X86处理器中存在I/O空间的概念,I/O空间是相对于内存空间而言的,通过特定的指令in, out 来访问. 目前,大多数嵌入式微控制器如ARM, POWERPC等并不提供I/O空间,而仅存在内存空间 ...

  4. “该内存不能为读写”解决方法

    "该内存不能为读写"解决方法 2011年04月22日 系统提示"该内存不能为读写"的原因和解决方法 运行一些程序的时,有时会出现内存错误的提示,然后该程序就关闭 ...

  5. 利用二叉树的思想来实现分配和释放内存方法

    虽然大部分系统都有提供内存动态分配和释放函数(即C语言中的malloc和free函数),但是在嵌入式开发中由于系统的限制往往需要自己来实现内存管理,如在有些平台上可动态申请的最大空间不能满足程序设计的 ...

  6. java usb 无驱打印_Windows Usb 无驱动打印

    \?\USB#VID_8866&PID_0100#0001B0000000#{a5dcbf10-6530-11d2-901f-00c04fb951ed} USB小票打印解决办法 一.需要驱动, ...

  7. Serverless 实战 —— 利用OneIndex-Serverless无成本搭建属于你自己的网盘

    Serverless 实战 -- 利用OneIndex-Serverless无成本搭建属于你自己的网盘 rsong 2019-07-29 6016浏览量 简介: 一.前言 Onindex-Server ...

  8. 基于Stm32f103利用模拟iic驱动LM75A温度传感器

    这两天一直在搞模拟iic,模拟iic相较于硬件iic的优势在于更稳定,io口的选择更灵活. 这次编写模拟iic驱动程序还是有点坎坷,其中模拟iic的时序不是难点,直接说我遇到的问题1.io口模式的选择 ...

  9. 使用MemoryStream类读写内存

    MemoryStream和BufferedStream都派生自基类Stream,因此它们有很多共同的属性和方法,但是每一个类都有自己独特的用法.这两个类都是实现对内存进行数据读写的功能,而不是对持久性 ...

最新文章

  1. vue 在浏览器控制台怎么调试 谷歌插件vue Devtools
  2. Codeforces 1264C/1265E Beautiful Mirrors with queries (概率期望、DP)
  3. 【论文解读】​YOLOX: Exceeding YOLO Series in 2021
  4. 漫话:为什么你下载小电影的时候进度总是卡在99%就不动了?
  5. BZOJ2042 : [2009国家集训队]Will的烦恼
  6. RHCE 学习笔记(4)- 重定向,管道和VIM编辑器
  7. Anaconda下载的包在Spyder内导入报错
  8. 首发|罗振宇2018“时间的朋友”跨年演讲未删减全文
  9. 用PyQt5+Caffe+Opencv搭建一个人脸识别登录界面
  10. 笔记本电脑wlan+开启移动热点+手机转圈圈【已解决】
  11. 非关系型数据库 之 图数据库Neo4j的使用(Python3)
  12. Android-在app内安装apk
  13. 使用缓冲字符流进行文档排序
  14. golang与面向接口编程
  15. FFMPEG常用的一些命令介绍:音频录制、视频录制
  16. UI自动化测试经验之谈(一)
  17. Python运行速度慢怎么办?
  18. 【转】android系统的APP消息推送机制
  19. 嵌入式新手学习路线,嵌入式课程学习课程分享
  20. 程序员的泡妞结婚手册

热门文章

  1. 毕业季.公司 | 字节跳动:在宇宙中心赚钱,996也能挺住?
  2. 民间最大的社区,倒闭了
  3. 3.13 使用画笔工具绘制艺术线条 [Illustrator CC教程]
  4. 【MySQL】mac安装mysql并创建连接
  5. matplotlib: 双Y轴、同一坐标轴中不同类型图、设置坐标轴刻度格式
  6. Unity 个人毕业设计 <探索,学习,实践练习>【part 1】
  7. linux重启后界面超级大,超出屏幕
  8. JAVA毕业设计护肤品购物系统计算机源码+lw文档+系统+调试部署+数据库
  9. 干货,游戏DDoS攻击趋势及原因分析,附防御案例
  10. bzoj3875: [Ahoi2014Jsoi2014]骑士游戏(spfa+dp)