首页
社区
课程
招聘
[原创]在win7 x64下做个简单的内核绘制
发表于: 2018-11-8 10:09 15986

[原创]在win7 x64下做个简单的内核绘制

2018-11-8 10:09
15986
       本贴只针对win7 x64系统下的 32位D3D9程序,局限性太大,仅作为抛砖引玉 。
下面进入正题。

基本流程如下:
1:在内核中 hook相关shadowSSDT或SSDT函数
2:在目标进程申请内存,写入用于D3D9绘制的shellcode
3:利用APC的力量回到 用户模式,执行用于D3D9绘制的 shellcode。

       首先,如果我们要做一个hook D3D9的绘制。
自然是要编写dll,
注入到目标进程,
hook D3D9虚函数,
获取到D3D9设备,
执行绘制代码。

        时至今日,这种技术已经是基本操作了。
经历各大游戏厂商(代理商)以及外挂作者们之间的斗争,
这种注入以及hook的方式已然不可取。

        那么是否有一种相对隐蔽的方式来完成这项工作呢?
答案是有的。(废话,没有你写这贴干嘛【滑稽】)
        从我们能想到的根本问题入手的话......
在应用层 hook D3D9虚函数以及直接注入dll会拉闸,
既然如此,我们在内核层做hook,代码全都以shellcode的形式
在目标进程里跑起来。

       在win7 x64下, 通过调试一个网上下载的D3D9示例Demo
仔细跟踪其 D3D9的Present函数,我们发现 Present 最终会调用
USER32.HungWindowFromGhostWindow+20处的代码
反汇编如下:

call fs:[000000C0]其实是call Wow64子系统的调用
经过Wow64子系统的包装,最终进入内核。

       mov eax, 000012CF这句汇编代码
其中 000012CF代表的是 shadowSSDT 的索引值
了解过 SSDT&shadowsSSDT的朋友都知道
第一个4k页面指向的是SSDT函数
第二个4k页面指向的是shadowSSDT函数
另外两个页面未使用(这是题外话。)
00000012CF在第二个页面上,所以这个索引指向shadowSSDT函数。
我们减去 0x1000 就是它的真实索引值 0x02CF,十进制就是 719。

       我们打开PChunter这款非常有用的软件, 我们可以看到索引719指向的
shadowSSDT函数名 NtUserHwndQueryRedirectionInfo


       接下来我们就hook这个函数并写好过滤
一般来说,这种shadowSSDT函数,只传进来一个参数(rcx), 保险起见我们写四个。
示例过滤函数如下:(自备shadowSSDT hook引擎,本贴不会放完整代码,防止伸手)



       But, 光是这样是不够的, 我们还要在这里获取到D3D9的设备。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 3
支持
分享
最新回复 (20)
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
内核hook->插APC->回到R3干活->留下R3的尾巴->被安排->999大礼包
2018-11-8 10:17
1
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
3
还行,有时间玩玩看
2018-11-8 10:23
0
雪    币: 300
活跃值: (2452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark
2018-11-8 10:33
0
雪    币: 878
活跃值: (737)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
mark 内核绘制  牛逼
2018-11-8 10:44
0
雪    币: 698
活跃值: (4564)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
感觉更容易被查了
2018-11-8 11:19
1
雪    币: 2899
活跃值: (438)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
被安排得明明白白
2018-11-8 11:32
1
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
8
牛逼了,八仙过海各显神通。其实还有很多强势的不着痕迹的shellcode注入方案,大家都不舍得公开罢了。
2018-11-8 12:04
1
雪    币: 6314
活跃值: (952)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
围观一下
最后于 2018-11-8 13:10 被二娃编辑 ,原因:
2018-11-8 13:10
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
显存为什么不会自动释放?调用Present才会占用显存是吗?
那如果不调用Present的话,就不占用显存了吧?
2018-11-8 14:21
0
雪    币: 914
活跃值: (2448)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
11
yy虫子yy 显存为什么不会自动释放?调用Present才会占用显存是吗? 那如果不调用Present的话,就不占用显存了吧?
win7 x64下,显存是在GUI进程之间全局共享的。
最后于 2018-11-8 16:00 被万剑归宗编辑 ,原因:
2018-11-8 16:00
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
万剑归宗 yy虫子yy 显存为什么不会自动释放?调用Present才会占用显存是吗? 那如果不调用Present的话,就不占用显存了吧? win7&nb ...
D3D该怎么优化显存占用呢?
2018-11-8 16:07
0
雪    币: 914
活跃值: (2448)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
13
yy虫子yy D3D该怎么优化显存占用呢?
hook present函数 不做处理,直接返回0
2018-11-8 16:39
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
万剑归宗 hook present函数 不做处理,直接返回0
就是这样做的,不调用Present啊
2018-11-8 17:33
0
雪    币: 914
活跃值: (2448)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
15
yy虫子yy 就是这样做的,不调用Present啊
别的没什么可优化的了
2018-11-8 17:35
0
雪    币: 697
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
Mark
2018-12-5 10:39
0
雪    币: 6124
活跃值: (4656)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
17
老铁, 你这个还是要回r3啊,还是会被安排了。不如考虑一下直接注入怎么样,puxg不是只拦截注入但是不检测注入吗?直接hookD3D函数好像也不会出事,你这里从内核走一下反而容易直接被爆掉。不过思路是不错的,可以用到别的情景不同的游戏上。
2018-12-18 14:42
0
雪    币: 280
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
怎么加不上你好友啊。18279000092这是我微信,恳请你加下我,大哥加下我,拜托了
2020-7-17 20:45
0
雪    币: 210
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
楼主  看到   加一下本人Q  956965830   有更好的方式!
2021-3-2 21:58
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
hzqst 内核hook->插APC->回到R3干活->留下R3的尾巴->被安排->999大礼包
为什么说留下r3的尾巴被安排,能详细说下吗大佬
2021-11-8 10:50
0
雪    币: 2428
活跃值: (2566)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
小小弟中弟 为什么说留下r3的尾巴被安排,能详细说下吗大佬[em_88]
线程栈回溯一下就发现不对劲了
2021-11-8 13:54
0
游客
登录 | 注册 方可回帖
返回
//