必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-11-04 12:10:00来源:IT技术作者:seo实验室小编阅读:69次「手机版」
 

duplicatehandle

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

首先看一下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。

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

文章最后发布于: 2019-02-27 18:34:07

相关阅读

用户电脑接连中招:N卡新驱动请卸载后退回362.00 WHQL

NVIDIA在本周一晚些时候发布了最新款游戏驱动GeForce 364.47 WHQL正式版,宣称对《全境封锁》、《杀手》、《极品飞车19》、《奇点

FM860-GI工业级摄像头安装驱动

这个是该摄像头github:https://github.com/percipioxyz/camport31.交代背景:我之前用pip3装的python-opencv一开始发现就不能直接用

驱动精灵安装声卡驱动时卡进度条的解决方案

电脑装好以后,没有声音,插上音响设备,播放音乐没反应,那就可能声卡驱动没有安装。如果安装好了,电脑右下角是会有下图这样的标志的。声

为什么你的产品停滞不前?你需要知道的驱动力、障碍和钩

数据化的核心需要很好的执行,需要落地,我们需要对未来进行改变。我们可以通过市场营、内容传播、业务推广等等方式,实现产品、业务、

Mac读写ntfs磁盘工具:Paragon NTFS for Mac

Microsoft NTFS是Windows的主要文件系统之一,可以在Mac上编写,编辑,复制,移动和删除Microsoft NTFS上的文件!如果您在Mac计算机上工作

分享到:

栏目导航

推荐阅读

热门阅读