首页
社区
课程
招聘
外挂界的二赖子?DMA物理读写内存设备到底是个啥
2023-3-31 03:39 32085

外挂界的二赖子?DMA物理读写内存设备到底是个啥

2023-3-31 03:39
32085

早在大概20年左右 我就注意到了github dma的项目

也就是这个 https://github.com/slack2450/csgo-dma-overlay

该项目使用了DMA来绕过反作弊

实际原理比这个更加复杂一些 不过这篇帖子只讨论关于DMA部分的内容

其实DMA全称Direct Memory Access,即直接存储器访问

也就是利用PCIE设备来直接读写物理内存

这种方式绕过了操作系统 做到了可以在目标机上没有任何代码运行的情况下做到读写内存的操作

这个项目是DMA的发源地 https://github.com/ufrisk/pcileech

具体关于DMA物理读写设备的原理都可以参考这个项目

包括上面那个CSGO的读写绘制也是依赖了pcileech

大概年前 通过一位朋友拿到了一块DMA读写设备 拿回来了以后一直压箱底 没有去玩 不得不说万能的朋友圈真是啥都有

今天有空于是拿出来试了试

首先是下载DMA依赖 或者我喜欢称之为基础库

因为DMA只能读物理内存

但当前的操作系统都有虚拟内存到物理内存的转换

一个物理内存可以对应多个虚拟内存等等知识不再具体聊下去了

所以pcileech这个装备库就帮你完成了绝大多数的工作

你可以直接输入虚拟内存 然后他会自动帮你转换再通过DMA设备进行读取内容

总之这个库的功能十分强大

import memprocfs
vmm = memprocfs.Vmm(['-device', 'existingremote'])
for process in vmm.process_list():
    for entry in process.maps.pte():
        if '-rwx' in entry['flags']:
            print(str(process.pid) + ': ' + process.name + ': ' + str(entry))

这部分是自带的python代码 当然我跑的是win32环境

你可以看到库里还能直接帮你枚举进程列表

实际上他原理大概类似特征定位

只要定位到了ntos的地址 剩下的都好说

不过说起来简单想实现这个库还是挺难的

因为我的测试机是个破旧的华南X79

在经历了一大堆麻烦事以后才终于跑通了这份代码

并且我这台电脑上装的还是python27

于是乎我直接导入头文件 开个测试工程 开始试一下到底好不好用

	char* temp_str[] = { "","-device","FPGA" };
	VMM_HANDLE handle = VMMDLL_Initialize(3, temp_str);

	SIZE_T pcPIDs;
	VMMDLL_PidList(handle, nullptr, &pcPIDs);
	DWORD* pPIDs = (DWORD*)new char[pcPIDs * 4];
	VMMDLL_PidList(handle, pPIDs, &pcPIDs);
	for (int i = 0; i < pcPIDs; i++)
	{
		
	}

不得不说这个库的功能的确齐全

你只需要初始化 然后去获取PID列表即可

拿到PID以后 下一步是进程名

		VMMDLL_PROCESS_INFORMATION ProcessInformation = { 0 };
		ProcessInformation.magic = VMMDLL_PROCESS_INFORMATION_MAGIC;
		ProcessInformation.wVersion = VMMDLL_PROCESS_INFORMATION_VERSION;
		SIZE_T pcbProcessInformation = sizeof(VMMDLL_PROCESS_INFORMATION);
		VMMDLL_ProcessGetInformation(handle, pPIDs[i], &ProcessInformation, &pcbProcessInformation);

		std::cout << pPIDs[i] << "---" << ProcessInformation.szName;

		VMMDLL_MAP_MODULEENTRY* ppModuleMapEntry = nullptr;
		VMMDLL_Map_GetModuleFromNameU(handle, pPIDs[i], ProcessInformation.szName, &ppModuleMapEntry,VMMDLL_MODULE_FLAG_NORMAL);

			std::cout << "---" << ppModuleMapEntry->uszFullName << std::endl;

进程名 包括进程完整名都可以直接读取

u1s1 这东西方便的地方在于 即便是进程的EPROCESS和PEB等他都给你写出来了 直接看这个结构体

typedef struct tdVMMDLL_PROCESS_INFORMATION {
    ULONG64 magic;
    WORD wVersion;
    WORD wSize;
    VMMDLL_MEMORYMODEL_TP tpMemoryModel;    // as given by VMMDLL_MEMORYMODEL_* enum
    VMMDLL_SYSTEM_TP tpSystem;              // as given by VMMDLL_SYSTEM_* enum
    BOOL fUserOnly;                         // only user mode pages listed
    DWORD dwPID;
    DWORD dwPPID;
    DWORD dwState;
    CHAR szName[16];
    CHAR szNameLong[64];
    ULONG64 paDTB;
    ULONG64 paDTB_UserOpt;                  // may not exist
    struct {
        ULONG64 vaEPROCESS;
        ULONG64 vaPEB;
        ULONG64 _Reserved1;
        BOOL fWow64;
        DWORD vaPEB32;                  // WoW64 only
        DWORD dwSessionId;
        ULONG64 qwLUID;
        CHAR szSID[MAX_PATH];
        VMMDLL_PROCESS_INTEGRITY_LEVEL IntegrityLevel;
    } win;
} VMMDLL_PROCESS_INFORMATION, *PVMMDLL_PROCESS_INFORMATION;

同时VMMDLL_Map_GetModuleFromName这个函数还能获取模块地址以及模块大小等等信息

typedef struct tdVMMDLL_MAP_MODULEENTRY {
    QWORD vaBase;
    QWORD vaEntry;
    DWORD cbImageSize;
    BOOL  fWoW64;
    union { LPSTR  uszText; LPWSTR wszText; };              // U/W dependant
    DWORD _Reserved3;
    DWORD _Reserved4;
    union { LPSTR  uszFullName; LPWSTR wszFullName; };      // U/W dependant
    VMMDLL_MODULE_TP tp;
    DWORD cbFileSizeRaw;
    DWORD cSection;
    DWORD cEAT;
    DWORD cIAT;
    DWORD _Reserved2;
    QWORD _Reserved1[3];
    PVMMDLL_MAP_MODULEENTRY_DEBUGINFO pExDebugInfo;         // not included by default - use VMMDLL_MODULE_FLAG_DEBUGINFO to include.
    PVMMDLL_MAP_MODULEENTRY_VERSIONINFO pExVersionInfo;     // not included by default - use VMMDLL_MODULE_FLAG_VERSIONINFO to include.
} VMMDLL_MAP_MODULEENTRY, *PVMMDLL_MAP_MODULEENTRY;

那下一步当然就是读内存了

VMMDLL_MemRead(handle, pPIDs[i], ppModuleMapEntry->vaBase, (PBYTE)&temp, 4);

拿到MZ 完全没问题

至此关于DMA的体验就结束了 因为我那台华南X79的主板兼容性很差 所以我也没有继续深入的体验了

不过在我朋友的朋友的朋友的帮助下 我还拿到了一份特殊的硬件图 不得不说神奇的朋友还是给力 并且是整个硬件设计图全在 光压缩包就老大了

没错 这正是帖子开头 做csgo dma项目的那个硬件图

不过我看不懂这个图

随后我还有机会跟他们交流了一下

他们也是一个团队 成员都来自欧洲

正是有了pcileech这个项目以后才有了这个想法 不过他们除了利用dma设备 还将一些其他硬件融合在了同一块PCIE板上

但PCIE也不是无敌的

早在20 21年 PCIE刚刚问世 那时候了解这个玩意的人也不多

国外有个反作弊是叫瓦兰特还是什么来着具体我忘了 反作弊检测十分严格 似乎是白名单模式

于是就有了利用PCIE宿主机的方式来绕过反作弊 在当时简直就是乱杀 没人了解这是什么 也没人清楚他是怎么工作的 甚至不知道该如何对抗 他在操作系统内没有任何代码运行 并且他只读内存 从来不修改 你根本无法检测到他的存在

但仅仅一年后 对方很快察觉到了PCIE这种作弊方式 并且祭出了脉冲信号的方式检测PCIE设备 进行了一次账号封禁 

其实这个名字是我瞎编的 我也不记得叫什么了 原文是英文

随后还有一些其他的手段检测 这里不具体展开

也就是说PCIE并不是无敌的

但就目前来说 基于DMA手段的作弊依旧是大哥大

据我的了解 相当多游戏对这种方式的检测都是一片空白 包括某极其火热的FPS游戏

哪怕这个项目已经出现了3年多 也仅仅有极少数反作弊注意到并且针对DMA进行了加强



OK 帖子最后是关于内核交流群的问题

好多人说搜不到了

其实群并不是随时开放的 去年到现在进群的人数也不超过30 现在总人数也就130 因为原本这个群就是几个朋友加同事一起喷公司领导瞎指挥的小群

要求是必须提供有效的在校证明或者在职证明 如果群里有同公司的还需要一次内部验证

以前没这么严格 但是有人伪造公司混进来过 于是就越来越严格了

有意进群的还是直接发私信吧 发群号其实也没有意义

也有这个群是不需要验证的 可以随便进 729338597

群组织在这里 https://github.com/ClassicalMusicClub

最后忘记补充了 并不是只有内核方向 逆向和渗透我们都欢迎 但手里有裤子的就还是不要申请了吧 不然搞的人心惶惶的

栈回潮:如果你喜欢我的帖子可以帮忙点个关注 https://github.com/DragonQuestHero

这样等我去面试的时候 人家只要点开了我的个人页面 看到如此多的关注 谁TM不迷糊 至少面子是有了 你说对吧(狗头)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-3-31 04:25 被章鱼C编辑 ,原因:
收藏
免费 12
打赏
分享
最新回复 (21)
雪    币: 6124
活跃值: (4346)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 1 2023-3-31 06:47
2
1

DMA的话,其实各大厂,包括国内的几个厂都已经有检测了。DMA由于自身的局限,在fps上的表现差强人意。即使不检测硬件设备,通过判断录像回放的方式也比较容易甄别,当然,有资格被看录像的终究只是少数。然而DMA拉闸还是一拉一大批,为什么呢?总不可能是几百个客服一人看16块屏幕吧?

别问,问就是人工!问就是买单人独立固件/硬件!圈十几个直接提车,比微商还好收米是吧?


顺便,你这发帖时间是真阴间啊。

最后于 2023-3-31 06:55 被黑洛编辑 ,原因:
雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-3-31 08:59
3
1
黑洛 DMA的话,其实各大厂,包括国内的几个厂都已经有检测了。DMA由于自身的局限,在fps上的表现差强人意。即使不检测硬件设备,通过判断录像回放的方式也比较容易甄别,当然,有资格被看录像的终究只是少数。然 ...
经过3年发展其实已经很猛了 包括读写速度也冲上去了 其他方面也在进化 不过局限性也摆在那了 注定没啥风浪
昨晚通宵了 我玩了一夜AI画图 这玩意真的带劲啊哈哈哈
雪    币: 1460
活跃值: (14627)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
SSH山水画 3 2023-3-31 09:16
4
0
章鱼C 经过3年发展其实已经很猛了 包括读写速度也冲上去了 其他方面也在进化 不过局限性也摆在那了 注定没啥风浪 昨晚通宵了 我玩了一夜AI画图 这玩意真的带劲啊哈哈哈
通宵?你不用上班的吗?
雪    币: 6124
活跃值: (4346)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
黑洛 1 2023-3-31 09:30
5
1
章鱼C 经过3年发展其实已经很猛了 包括读写速度也冲上去了 其他方面也在进化 不过局限性也摆在那了 注定没啥风浪 昨晚通宵了 我玩了一夜AI画图 这玩意真的带劲啊哈哈哈

我手里几块板子,读写速度没有超过6000的,场景有限

最后于 2023-3-31 09:32 被黑洛编辑 ,原因:
雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-3-31 10:10
6
0
SSH山水画 通宵?你不用上班的吗?
最近失业了 正在当无业游民
雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-3-31 10:10
7
0
黑洛 章鱼C 经过3年发展其实已经很猛了 包括读写速度也冲上去了 其他方面也在进化 不过局限性也摆在那了 注定没啥风浪 昨晚通宵了 我玩了一夜AI画图 ...
我手里这块3 400M/S 你那个应该是3380
雪    币: 1180
活跃值: (214722)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
shinratensei 1 2023-3-31 10:46
8
0
tql
雪    币: 8569
活跃值: (2037)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
广岛秋泽 2023-3-31 11:35
9
1
你这应该是某赛灵思开发板的PCB源文件成本太高了,目前最低成本的应该是7A35T的方案。
雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-3-31 12:55
10
0
广岛秋泽 你这应该是某赛灵思开发板的PCB源文件成本太高了,目前最低成本的应该是7A35T的方案。
朋友送的 具体我也不清楚
雪    币: 73
活跃值: (903)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hixhi 2023-3-31 13:26
11
0
我草,物理外挂,666啊
雪    币: 798
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
扭牛 2023-3-31 16:46
12
0
感觉外挂最难过的是行为监测
雪    币: 3265
活跃值: (2933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamasbcx 2023-4-1 15:58
13
0
玩游戏图个开心。。还不如拿钱去R小JJ
雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-4-2 17:49
14
0
iamasbcx 玩游戏图个开心。。还不如拿钱去R小JJ
无敌赞同
雪    币: 212
活跃值: (102)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黄枫叶 2023-4-4 10:03
15
1

我还拿到了一份特殊的硬件图”有那么特殊吗??不就是AX7015的开发板吗。。。他们开发了软件部分,把HDMI融合器和DMA的功能整合到了一起。

雪    币: 468
活跃值: (1628)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_墨_198 2023-4-4 11:34
16
0
DMA下限很低,刷个板子就能用,上限也很高,但是大部分是处于水平比较低的,说白了就是圈钱的
雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-4-4 16:48
17
0
黄枫叶 “我还拿到了一份特殊的硬件图”有那么特殊吗??不就是AX7015的开发板吗。。。他们开发了软件部分,把HDMI融合器和DMA的功能整合到了一起。
我是20年底21年初拿到的 够不够"特殊"?
雪    币: 634
活跃值: (1149)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
BDBig 2023-4-15 13:42
18
0
6
雪    币: 12848
活跃值: (9103)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2023-4-15 14:01
19
0

挖个坟,我的评价是


雪    币: 205
活跃值: (2554)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
章鱼C 2023-4-16 00:49
20
0
hzqst 挖个坟,我的评价是

小问题 虚拟化热度这么久都还没过去 这种"新名词"当然可以接着火 我要是隔壁我就加一条pro plus max商业版 采用DMA读写

最后于 2023-4-16 00:52 被章鱼C编辑 ,原因:
雪    币: 8275
活跃值: (4961)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
大道在我 2023-4-18 21:52
21
0
这玩意家里没矿,应该开不起,动不动就是988,888的
雪    币: 8275
活跃值: (4961)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
大道在我 2023-4-18 21:53
22
0
对了据说对机器要求还不少,还要2台电脑,我直接来个陀螺乱杀不爽?
游客
登录 | 注册 方可回帖
返回