查看原文
其他

游戏安全之借坡下驴

HadesW 看雪学苑 2022-07-13


本文为看雪论坛精华文章
看雪论坛作者ID:HadesW


exp: https://github.com/HadesW/mhy_exp
注:《借坡下驴》凭借有利的地势下驴。比喻利用有利条件行事。





简述


之前有介绍《借刀杀人》,指的是利用高权限的系统进程。这次《借坡下驴》,是利用了某游戏本身的驱动保护程序。

此文主要是记录分析某款游戏驱动保护的r3-r0通讯算法。因为文章整理于作者2020年10月份左右的笔记,有点流水账,分析和利用的样本大概是2020年8月-9月份左右的。


样本文件详情如下:
文件名:xxxxxxxx.sys
大小: 1269880 bytes
修改时间: 2020年9月29日, 12:27:38





结构分析


最开始,作者只是简单的关注了此驱动读写任意进程的功能。所以这里自底向上分析,通过基本的内核API分析其参数,然后查看其调用方如何把IoBuffer解析传入。

分析完后,其进程读写函数大概如下:
// 使用以下内核函数跨进程读写 NTSTATUSMmCopyVirtualMemory( IN PEPROCESS FromProcess, IN CONST VOID *FromAddress, IN PEPROCESS ToProcess, OUT PVOID ToAddress, IN SIZE_T BufferSize, IN KPROCESSOR_MODE PreviousMode, OUT PSIZE_T NumberOfBytesCopied )

第一层调用:


第二层调用:

第三层调用:
dispatch call :  定位到读写IO码

最后的进程读写结构:
// read write process memorytypedef struct _rwpm_data{ uint32_t is_write; uint32_t padding; uint64_t pid; uint64_t dst; uint64_t src; uint64_t size;}rwpm_data, * p_rwpm_data;





通讯分析


当时我有了读写结构之后,去做了demo调用,发现其通讯的数据是有加解密的,并且很多函数是有VMP过的。所以这里用动静结合的方式来还原算法。

1. 双机调试,下断其入口处,patch掉其反调试。

2. 定位其加解密Key初始化,下断单步,结合IDA观察传入数据的变化。

3. 根据一些经验猜测函数大概功能。

4. 还原初始化部分。

5. 还原加解密部分。

6. 用std::mt19937_64()重写加解密。





功能分析


这里只给部分功能分析完后的结果:


1. 检测调试信息


2. 遍历进程模块信息


3. 强制结束进程


4. 获取线程信息


5. 获取进程信息


6. 获取驱动信息


7. 读取内核内存




8. 保护自身回调


9. 自保护(访问权限)





简单利用


1. 干掉杀毒软件后,运行RAT




2. 读写系统进程 和 Hook检测(csrss.exe / lsass.exe / explorer.exe)


3. 读写保护进程(透视)




注:图中数据取自20220517日,游戏版本号6.0.4。




看雪ID:HadesW

https://bbs.pediy.com/user-home-766647.htm

*本文由看雪论坛 HadesW 原创,转载请注明来自看雪社区


# 往期推荐

1.EXP编写学习之绕过SafeSEH

2.CVE-2016-0165提权漏洞学习笔记

3.CVE-2015-0057提权漏洞学习笔记

4.Android Hook技术学习——常见的Hook技术方案总结

5.2022DASCTF MAY 出题人挑战赛

6.go语言模糊测试与oss-fuzz






球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存