首页
社区
课程
招聘
[原创]2023南极动物厂高校决赛之决赛附加题
发表于: 2023-4-17 18:10 21787

[原创]2023南极动物厂高校决赛之决赛附加题

2023-4-17 18:10
21787

没有参赛 看了下题目 感觉不太难 附加题比较有意思 蹭个热度 发个WP

先说结果:通过置位*MmTrackPtes标志位,让内核调用MiInsertPteTracker,把Length存储到*MiDeadPteTrackerSListHead链表,遍历检测这个链表中的Length是不是等于0x2023然后蓝屏。并且同时要置位*MiTrackPtesAborted为1,不然在置位*MmTrackPtes后会蓝屏。

备注:带*的(WRK里面叫这个但是pdb里面是去除了这个符号名称的)

题目:

题目分析

1.ida打开ring3的程序先看看做了啥。

2.接着打开ring0的程序看看他做了啥。

非常好基本上全部都被tvm0保护了。

3.综上考虑下出题人思路并验证。

驱动被全v了,但是导入表并没有被保护。出题人大概是想考察黑盒分析。因为这么短的时间考察去虚拟化,显然是不太符合要求的。

先来验证下常规思路,既然在驱动加载后,ring3程序一打开就蓝屏。题目说检测读功能,考虑句柄表。

so,验证下...

a.在ReadProccesMemory打断点,并不蓝屏,所以在CreateProcessA以后拿到了句柄以后,依然不会蓝屏,排除句柄表。

b.根据a很明显问题可以定位在ReadProcessMemory,观察ring3的程序,很明显的地方就是这个0x2023了罗。

c.让我们来验证下b,把这个0x2023改掉试试。

d.非常好,根本不蓝。

e.思路很清晰,大概率检测的Length。目标预期: 查找有无全局变量存储了Length,并且大概率这个全局变量是个数组、链表等。

f.打开Ntoskrnl.i64 来到NtReadVirtualMemory观察Length的去向。

走进了MmCopyVirtualMemory,在这个函数的内部发现Length被存到了一个临时的MDL结构里面。

所以我们继续跟踪MemoryDescriptorList的去向看看是谁获取了结构体中的ByteCount或者是Size

g.

只有这几个函数MmProbeAndLockPages MmMapLockedPagesSpecifyCache MmUnlockPages。我们一个一个来看看有什么奥秘所在。

g.1.MmProbeAndLockPages
先来看看函数内部

非常好拿了我们的ByteCount,接着我们来看看MiProbeAndLockPrepare函数内部

总的来说这个函数里面并没有直接存储ByteCount这个玩意,而是跟别的加加减减再搞一块。所以先放一边。

g.2.MmMapLockedPagesSpecifyCache

函数内部发现好几个函数引用了MemoryDescriptorList

思路大概跟g.1一样不细说了,没有直接存储ByteCout或者Size的函数直接先放一边,到时候回过头去看。

g.2.1

但是在MiInsertPteTracker我们发现了奥秘所在。

接下来我们观察v8的在哪里来的就完事了。并且根据WRK我们可以知道v8是个什么玩意了。

很明显就是PTE_TRACKED这个结构

`

`

与预想中的非常符合。ByteCount被直接存储到PTE_TRACKER::Length里面了。

g2.2

而且非常明显是从全局变量MiDeadPteTrackerSListHead里面拿到的v8。

g2.3

既然上述代码逻辑完全符合我们的目标预期,我们来看看在什么情况下,MmMapLockedPagesSpecifyCache内部会调用MiInsertPteTracker

噔噔噔~,发现在dword_140CFB17C(MmTrackPtes)为1的情况下会MiInsertPteTracker

g2.4

我们来双机看看这个标志位


很不幸,系统默认情况下,这个标志位为0。所以在默认情况下,压根不走这里。

那意思就是赛题的驱动把这个标志位改了?我们来验证一波。

在这里下个写入断点,然后加载赛题的驱动。

ba w1 fffff8020617318c(这是标志位地址,在上图)然后拉起驱动。

芜湖~,断在NotepadProtect.sys里面

至此分析完毕,其他的还分析个锤子。(其实还有)

1.综合0x02整个分析过程,绕过检测的思路已经非常简单了。给dword_140CFB17C(MmTrackPtes)标志位置0,长度就不会再往全局数组里面插入了。

2.模拟他的检测思路就是,给dword_140CFB17C(MmTrackPtes)标志位置1,然后遍历*MiDeadPteTrackerSListHead中的长度是不是等于0x2023。

很不幸的是,在我们手动置位dword_140CFB17C(MmTrackPtes)以后立马蓝屏了

我们来分析下为什么他不蓝屏,我们会蓝屏,先看看调用栈。

Ok,在函数里面主动蓝屏的,我们在WRK定位到相应位置看看

看来我们还需要给MiTrackPtesAborted置1。

3.思路很清晰。

结论:通过置位*MmTrackPtes标志位,让内核调用MiInsertPteTracker,把Length存储到*MiDeadPteTrackerSListHead链表,遍历检测这个链表中的Length是不是等于0x2023然后蓝屏。并且同时要置位*MiTrackPtesAborted为1,不然在置位*MmTrackPtes后会蓝屏。

就是大概看了一眼,代码没写。代码没什么技术含量,就是特征定位几个未导出的全局变量,然后遍历自己照着wrk写一遍就行。

总的来说,在加了tvm的情况下,只要思路清晰,就是钻一,还是能比较快速的解完这道题的。而且耗费的时间也并不长。

什么?你跟我说看完上面还是不会做?那把tvm去虚拟化了你总会做了吧?
附件是去虚拟化以后的NotepadProtect.sys的ida分析文件。
(附件被吞了 看评论区~)

1.https://github1s.com/zhuhuibeishadiao/ntoskrnl (WRK)
2.不愿公开姓名的xxx提供的去虚拟化sys。

 
 
 
 
 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-4-17 18:28 被淡然他徒弟编辑 ,原因:
收藏
免费 7
支持
分享
最新回复 (29)
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
2

附件被吞了?

评论区带附件 也吞?

最后于 2023-4-17 18:17 被淡然他徒弟编辑 ,原因:
上传的附件:
2023-4-17 18:15
0
雪    币: 914
活跃值: (2553)
能力值: ( LV5,RANK:68 )
在线值:
发帖
回帖
粉丝
3
踩楼
2023-4-17 18:17
1
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
4
万剑归宗 踩楼
谢谢霸哥捧场
2023-4-17 18:18
0
雪    币: 2074
活跃值: (4337)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
无敌老神仙
2023-4-17 18:24
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
6
CanineTooth 无敌老神仙
路总牛逼!!!
2023-4-17 18:34
0
雪    币: 2334
活跃值: (1349)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
7
不会是通过脱壳分析出来的结果,然后倒推出题人想让解题的思路吧, 如果我分析GET不到 "观察ring3的程序,很明显的地方就是这个0x2023了罗" 这个点,或许这个是我和大佬的差距
2023-4-17 18:46
0
雪    币: 4709
活跃值: (1605)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
存爷yyds
2023-4-17 19:35
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
9
FraMeQ 不会是通过脱壳分析出来的结果,然后倒推出题人想让解题的思路吧[em_2], 如果我分析GET不到 "观察ring3的程序,很明显的地方就是这个0x2023了罗" 这个点,或许这个是 ...
这个靠经验罗 句柄表都排除了 检测读写无非就是那几种方式 他总不可能把eac的fake cr3抄来出题把。

都定位在ReadProcessMemory了 无非就是检测那几个参数了。
2023-4-17 19:42
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
10
如斯咩咩咩 存爷yyds
积总 nb!!!
2023-4-17 19:43
0
雪    币: 187
活跃值: (863)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11

 !

最后于 2023-4-18 14:49 被crackcc编辑 ,原因:
2023-4-17 20:26
0
雪    币: 1015
活跃值: (5296)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
12
存哥 无敌!!!!!
2023-4-17 21:04
0
雪    币: 3335
活跃值: (5455)
能力值: ( LV6,RANK:92 )
在线值:
发帖
回帖
粉丝
13
我原称之为最强
2023-4-17 21:39
0
雪    币: 886
活跃值: (2415)
能力值: ( LV4,RANK:52 )
在线值:
发帖
回帖
粉丝
14
“那把tvm去虚拟化了你总会做了吧”
我去,太秀了
2023-4-17 22:55
0
雪    币: 6124
活跃值: (4721)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
15
坏了,有人要拿第一了
2023-4-18 05:46
0
雪    币: 3573
活跃值: (31026)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
强啊
2023-4-18 09:11
1
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
17
这下牛掰了
2023-4-18 09:32
0
雪    币: 8401
活跃值: (4976)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
坏了,有人要拿第一了
2023-4-18 17:06
0
雪    币: 665
活跃值: (1051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
存爷太强了
2023-4-19 01:42
0
雪    币: 29182
活跃值: (63621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
20

附件存档一份

上传的附件:
2023-4-19 21:09
0
雪    币: 3751
活跃值: (3156)
能力值: ( LV8,RANK:147 )
在线值:
发帖
回帖
粉丝
21
存哥牛逼
2023-4-20 14:56
0
雪    币: 4793
活跃值: (4484)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
淡然他徒弟 附件被吞了?评论区带附件 也吞?
没有使用vmp吗?  这么容易去虚拟化?
2023-4-20 16:45
0
雪    币: 6209
活跃值: (5032)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
23
木志本柯 没有使用vmp吗? 这么容易去虚拟化?
什么叫去虚拟化,肯定是用了虚拟才会有去虚拟化这么个说法啊。

至于为什么这么容易去虚拟化... 那你得去问tvm的人了。
2023-4-23 04:55
0
雪    币: 461
活跃值: (2808)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
tql!!!
2023-4-23 14:14
0
雪    币: 21
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
存爷yyds
2023-4-26 09:28
1
游客
登录 | 注册 方可回帖
返回
//