首页
社区
课程
招聘
[原创]360比赛第5题-我的解法
2008-12-19 14:39 39545

[原创]360比赛第5题-我的解法

2008-12-19 14:39
39545
这题得了100分哦。

驱动加载后,直接对对IoCreateFile函数进行PATCH,

PATCH前函数为:
8056ba8c ff7508 push dword ptr [ebp+8]
8056ba8f e882f2ffff call nt!IopCreateFile (8056ad16)
8056ba94 3bc6 cmp eax,esi
8056ba96 7d15 jge nt!IoCreateFile+0xa7 (8056baad)
8056ba98 f6c301 test bl,1
8056ba9b 0f8574ffffff jne nt!IoCreateFile+0xf (8056ba15)


PATCH后函数为:
8056ba8c ff7508 push dword ptr [ebp+8]
8056ba8f e8421a7b78 call fileprot+0x4d6 (f8d1d4d6)
8056ba94 3bc6 cmp eax,esi
8056ba96 7d15 jge nt!IoCreateFile+0xa7 (8056baad)
8056ba98 f6c301 test bl,1
8056ba9b 0f8574ffffff jne nt!IoCreateFile+0xf (8056ba15)


之后所有调用IoCreateFile函数的都要经fileprot进行过滤;
00010522    call    dword_10804    //  先调用原来的nt!IopCreateFile                                           
00010528    mov     [ebp+var_210], eax                                                 
0001052E    mov     eax, [ebp+var_210]                                                 
00010534    test    eax, eax                                                           
00010536    jl      short loc_105AD                                                    
00010538    mov     edx, [esi+8]                                                       
0001053B    cmp     word ptr [edx], 206h                                               
00010540    ja      short loc_105AD                                                    
00010542    cmp     dword ptr [edx+4], 0                                               
00010546    jz      short loc_105AD                                                    
00010548    cmp     word ptr [edx], 0                                                  
0001054C    jz      short loc_105AD                                                    
0001054E    mov     eax, edx                                                           
00010550    movzx   ecx, word ptr [eax]                                                
00010553    mov     esi, [eax+4]                                                       
00010556    mov     eax, ecx                                                           
00010558    shr     ecx, 2                                                             
0001055B    lea     edi, [ebp+var_20C]                                                 
00010561    rep movsd                                                                  
00010563    mov     ecx, eax                                                           
00010565    and     ecx, 3                                                             
00010568    rep movsb                                                                  
0001056A    movzx   eax, word ptr [edx]                                                
0001056D    and     [ebp+eax+var_20C], 0                                               
00010576    lea     eax, [ebp+var_20C]                                                 
0001057C    push    eax             ; wchar_t *                                        
0001057D    call    ds:_wcsupr                                                         
00010583    lea     eax, [ebp+var_20C]                                                 
00010589    mov     [esp+220h+var_220], offset a360game360game ;
 "360GAME\\360GAME.TXT"
00010590    push    eax             ; wchar_t *                                        
00010591    call    ds:wcsstr                                                          
00010597    test    eax, eax                                                           
00010599    pop     ecx                                                                
0001059A    pop     ecx                                                                
0001059B    jz      short loc_105A7                                                    
0001059D    and     dword ptr [ebx], 0                                                 
000105A0    mov     eax, 0C0000022h  
   

   当发现文件名路径中含有"360GAME\\360GAME.TXT",直接返回0C0000022h,即 拒绝访问,导致访问失败。
  实际上,该驱动不仅保护c:\360game\360game.Txt不被打开,所有文件名路径中含有"360GAME\\360GAME.TXT"都将被保护,如d:\360game\360game.Txt等等。
  要突破其保护,只要文件名路径中不含有"360GAME\\360GAME.TXT"即可,方法是设置当前路径到c:\360game,然后直接对360game.Txt进行写就可以了。
  另外,如果驱动其作用后,试图在通过双击直接打开c:\360game\360game.Txt的动作会导致explorer.exe占用c:\360game\360game.Txt的文件句柄,因此,在对c:\360game\360game.Txt进行写操作之前,先应该释放所有可能占用的文件句柄。在本程序中,是通过CloseFileHandle()来实现的,详细实现参见附件。
  程序运行后,写入的内容为:
“360game by windsun,and the tickCount is %d”
其中%d为GetTickCount()的返回值。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (17)
雪    币: 233
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
glery 2 2008-12-19 14:41
2
0
顶一个
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 2008-12-19 14:44
3
0
我是直接请求文件
c:\360game\\360game.txt,一切搞定。MS没LZ搞那么复杂
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 9 2008-12-19 14:46
4
0
这题和1题的方法都很多了,见仁见智,去了花之后就很简单了,关键看想象力
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 10 2008-12-19 18:49
5
0
可以用你说的硬链接么?
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 9 2008-12-19 18:55
6
0
硬链接不行,此题需要用重解析点,不过无法在非ntfs系统使用
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 10 2008-12-19 18:59
7
0
c:\360game\..\360game\360game.txt 这样吧~~呵呵,明白了
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 9 2008-12-19 19:05
8
0
不是这个。。。
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 10 2008-12-19 19:10
9
0

期待完整解答……
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 2008-12-19 19:11
10
0
ZwCreate之类的没有检查参数,而IopCreateFile不接受相对路径。
CreateFile之类的又会把相对路径转换成绝对路径。
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 2008-12-19 19:14
11
0
这个我的,给大家看看。
上传的附件:
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 2008-12-19 19:16
12
0
即使是使用c:\360game\..\360game\360game.txt这样的路径,路径中仍然包含
360GAME\360GAME.TXT,至少得是c:\360game\haha\..\360game.txt
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 10 2008-12-19 19:18
13
0
                              ·
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 2008-12-19 19:23
14
0
当时查资料的时候是看到可以这样
subst z: c:\360game
然后fopen()都能够打开,但是不知道为什么没成功过。不是很清楚虚拟盘的工作原理。
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
qihoocom 9 2008-12-19 19:43
15
0
dosdefinedevice是可以的
原理是ZwCreateSymbolicLinkObject~
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XSJS 2008-12-19 20:47
16
0
恩啊,是滴,成功了!
想想可能是因为测试之前用其他东西打开了文件。按LZ的说法是句柄被占用了。又会一招!
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SoBeIt 2008-12-19 22:02
17
0
路径的想法我也试过,不过在路径构造上的不同导致没成功。。。。重解析点的方法学习了。
雪    币: 71
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
doking 2008-12-20 12:00
18
0
学习了,我当时还想构造超长的路径,可惜也失败了。
游客
登录 | 注册 方可回帖
返回