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》、《奇点
这个是该摄像头github:https://github.com/percipioxyz/camport31.交代背景:我之前用pip3装的python-opencv一开始发现就不能直接用
电脑装好以后,没有声音,插上音响设备,播放音乐没反应,那就可能声卡驱动没有安装。如果安装好了,电脑右下角是会有下图这样的标志的。声
数据化的核心需要很好的执行,需要落地,我们需要对未来进行改变。我们可以通过市场营、内容传播、业务推广等等方式,实现产品、业务、
Mac读写ntfs磁盘工具:Paragon NTFS for Mac
Microsoft NTFS是Windows的主要文件系统之一,可以在Mac上编写,编辑,复制,移动和删除Microsoft NTFS上的文件!如果您在Mac计算机上工作