吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 22023|回复: 52
收起左侧

[系统底层] 2011年 - 第三届360软件大赛题目 - 第一题标准答案

  [复制链接]
sudami 发表于 2011-4-26 14:23
本帖最后由 sudami 于 2011-4-26 14:24 编辑

文章作者:sudami
信息来源:邪恶八进制信息安全团队(www.eviloctal.com
原始出处:http://hi.baidu.com/sudami/blog/item/8136d7458950632986947340.html?timeStamp=1303796061770

2011年 - 第三届360软件大赛 第一阶段海选已经结束! 现公布第一题的标准答案,供参考!

一. 此题原理:

360SafeGame.sys注册模块加载回调通知,动态修改进程内存中PE的导入表,通过一定的算法找到合适的空间(可能会覆盖原始数据),新增导入项C:\360SafeGame.dll.当R3进程成功加载c:\360SafeGame.dll后,需后者主动和驱动交互,取出备份的原始数据做修复工作

二. 评分标准
1. 分析文档,包括BUG原因,驱动注入DLL的具体细节 +40

2. 代码完全正确,具备通用性 +60
  a) 和驱动程序通信获取数据 [10]
  b) 恢复被覆盖的PE块 [20]
  c) 恢复IDD (Image Data Directory) [10]
  d) 恢复被注入进程的部分内存块的只读权限 [5]
  e) 处理托管代码(.net之流) [15]


3. 根据答题情况 0~10 分的附加分

三. 概述

360SafeGame.sys注册一个模块加载回调,监控到notepad.exe / iexplore.exe 启动时,会动态的修改内存中的PE结构.
在其资源节找一块足够存放新导入表的地方,构造一份新的导入表,其中包含c:\360SafeGame.dll这个模块; 同时驱动中
会将原始的数据备份. 这样notepad.exe / iexplore.exe就会按照这份新构造的导入表来加载DLL,完成进程的初始化工作.
因为新构造的导入表将模块c:\360SafeGame.dll的加载顺序放在第一的位置,所以一旦c:\360SafeGame.dll被加载,进入
其DllMain函数,我们需要主动和360SafeGame.sys通信,取得备份的原始数据,来恢复可能被覆盖的资源节. 当我们复原了
PE后,进程的初始化工作才能正常的完成. 那为什么IE可以被有BUG的360SafeGame.dll正常注入,而notepad.exe就会自动退出呢?
因为IE进程的资源节很大,有很多空隙; 我们构造的新导入表没有覆盖掉原始的资源节,而是放在了其空隙中; 但notepad.exe的PE
内存结构是非常紧凑的,没有那么大的空隙用来存放新构造的导入表,所以驱动在修改PE结构时,就已经破坏了notepad.exe的资源节.
用windbg启动notepad.exe,挂上异常退出的断点,观察栈上的调用函数序列,IDA打开notepad.exe,定位到出问题的函数位置,会发现
是其内部在找不到icon资源时会exitprocess,自动退出.

四. 衍生问题

多数选手仅分析了notepad退出的原因,从而读磁盘原始的EXE文件,进行覆盖修复;细心的选手会发现启动IE8.0界面无法显示,那么再尝试把任意exe重命名为notepad.exe,替换至C:\WINDOWS\notepad.exe启动,都有异常.也就是说此BUG任何进程都存在!这样不就是单一问题,不能通过硬编码来完成.

于是部分选手开始分析360SafeGame.sys,其中有部分的原始数据可供修复.这里可分为几类:
  a. 调试后硬编码驱动的固定地址,通过非正规方式读取驱动的备份数据,修复进程

  b. 调试后发现驱动可通过Ioctl获取数据,通过正规方式修复进程

  c. 小一部分选手没有浅尝辄止,耐心细心的深入分析驱动,发现a,b那样只做了1/4的修复工作,于是顺带修复了IDD

  d. 个别选手发现,经过a,b,c的修复后运行.net程序依然出错.结合驱动中有处理mscoree.dll / msvcm80.dll / msvcm90.dll的逻辑,
      再次分析,终于成功修复了托管代码,可使.net程序正常运行.

  e. 分析文档的得分占有一定的比例,有的同学简单写了点,有的同学写的非常认真,跟毕业论文一样!这可以看出做事的态度.

很少有童鞋注意到评分标准中的e,d两条;
对于e:恢复被注入进程的部分内存块的只读权限,可用windbg观察PE被覆盖处的内存块属性
def939d94c2500b039012fa0.jpg

对于f:处理托管代码(.net之流) ,只有"古河","KiDebug"关注过并写了修复代码.

此题本质是分析BUG不要只看一个点,要看到一个面;有人认为只要notepad.exe能启动,BUG就算修复,那为什么不可以继续深入的测试分析一下,找到问题的缘由呢? 对notepad.exe是资源节被覆盖,对其他程序可能就不是资源节被损坏,难道要硬编码一个一个的分析,读取不同文件的不同数据段进行修复么? 自然驱动备份了数据,从驱动取就行了.驱动的ioctl存在提权漏洞,同样可以写到分析文档里面.反正这些等等等的细节都是可以拿来说说的.

各位童鞋不管是不屑于做也好,懒得分析也罢,但只要参赛了,就要有一个认真的态度.10天的时间,如果真有心做,这第一题也花费不了多少精力.但好多选手有功底有实力,却还是敷衍了事,导致得分不多,实在可惜;而KiDbug同学的文档是所有参赛选手中写的最好的(包含于附件).

五. 附件

附件中包含第一题的标准答案/测试.net的程序/分析文档借用KiDebug同学.

谢谢各位参赛选手!重在参与,致敬!

2011年 - 第三届360软件大赛 - 第一题标准答案.7z

471.66 KB, 下载次数: 57, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

淡淡香草味 发表于 2011-4-26 14:30
我来支持你.....这么快就结束了啊~
Hmily 发表于 2011-4-26 14:33
比赛结束了,谁拿大奖了...

点评

H牛 有视频教程没?  发表于 2011-4-27 10:43
Squn 发表于 2011-4-26 14:33
友情支持 路过~~

点评

经过调查取证,squn没有灌水!  发表于 2011-4-27 21:53
有点灌水的嫌疑!  发表于 2011-4-26 14:57
 楼主| sudami 发表于 2011-4-26 14:37
海选结束,这只是第一阶段.还要请前12名选手来公司继续比赛的...
riusksk 发表于 2011-4-26 14:38
前来膜拜学习……
estelle 发表于 2011-4-26 14:43
看不懂啊 我
xzchina 发表于 2011-4-26 14:47
本帖最后由 xzchina 于 2011-4-26 19:05 编辑

此题本质是分析BUG不要只看一个点,要看到一个面;有人认为只要notepad.exe能启动,BUG就算修复,那为什么不可以继续深入的测试分析一下,找到问题的缘由呢?

那既然“可以继续深入的测试分析一下”,为什么不把所有bin的代码全部逆向出来呢??

这个明明就是题目出的要求不对嘛


vulnbug 发表于 2011-4-26 14:51
sudami 发表于 2011-4-26 14:37
海选结束,这只是第一阶段.还要请前12名选手来公司继续比赛的...

哇,羡慕
吾爱丶破解 发表于 2011-4-26 14:58
不错的。

支持一下!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 04:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表