关于9行代码导致系统崩溃的分析整理_漏洞研究

目前很多地方都转载着利用9行代码史windows崩溃的文章,不过我发现没有关于为什么会使windows崩溃的分析。我先把原文给大家看看。然后把具体的细节说一下。  

微软一直声称Windows XP多么多么稳定可靠,但日前一位名为Masaru Tsuchiyama的外国编程爱好者刊出了一小段C语言代码。这一只有9行的小程序如果在Windows XP/2000下运行,则可导致系统完全崩溃,并重新启动。但此程序对其他版本的Windows没有任何影响。这一产生无限循环输出的小程序的代码如下:  

  #include  

  int main( void )  

  {   

  for(;{  

       printf( "hung up\t\t\b\b\b\b\b\b" );  

       print("hung up\t\t\b\b\b\b\b\b";  

      }  

  return 0;  

  }  

  如果去掉Print语句,此程序还会导致NT 4.0系统出现蓝屏错误。  

  但愿微软赶快修补这一漏洞。同时提醒大家,此代码只可用于研究,不得用于任何非法勾当。  

  如果去掉Print语句,此程序还会导致NT 4.0系统出现蓝屏错误。  

以上遍上网上纷纷转载的原文。  

关于为什么会导致错误,就在看下面的分析吧。  

\b是退格  

代码是用退格符把console里的光标退成null,  

然后显示任一字符(除\t),即崩溃.  

但是一般情况\b是不能退出规定的区域的,  

而如\b的前一个字符是\t则可以退出规定的区域(bug?).  

双击运行时,系统将新建一个console,所以我们的显示在console  

的左上角,我们只需两个\b就可退出屏幕(第一个吃掉\t).  

原因是win32子系统意外中止导致系统崩溃.smss是windows系统建立的第一个用户进程,他的工作之一是建立csrss和winlogon进程,然后一直等待这两个进程的句柄,如果这两个进程意外中止,  

smss将导致系统崩溃.csrss进程就是专门负责所有win32进程和系统进行通信的进程.所有win32进程的系统调用都会由csrss帮你完成,但是这样做因为需要进程切换所以效率太低.所以在windowsNT从3.51升级到4.0时将许多部分从用户态移入内核态,win32进程的系统调用将直接进行以减少进程切换时间.但是仍有少量系统调用需要csrss进程完成,据我所知createprocess  

是这样的函数,所有console上的显示是这样的函数(还有其他的).  

当我们调用printf("\t\b\ba")最终将调用WriteFile API.  

WriteFile((HANDLE)7,"\t\b\ba",NULL,NULL)等同于  

printf("\t\b\ba"),7是console标准输入的句柄.  

WriteFile判断句柄类型,如是文件句柄将调用ntdll.dll中的  

NtWriteFile函数.如是console句柄将调用WriteConsoleA函数.  

WriteConsoleA函数将调用ntdll.dll中的csrClientCallServer  

函数通知csrss进程,然后调用NtRequestWaitReplyPort等待结果.  

估计是csrss进程在处理这个请求过程中出错了.  

几年前侯杰老师分析后我整理出来的。因为没有地方说过,甚至简单的分析都没有,所以我才把他翻出来 :) 细心的人发现csrss出错的细节没有描述,谁有时间就补充一下吧.. 

时间: 2024-09-11 14:16:35

关于9行代码导致系统崩溃的分析整理_漏洞研究的相关文章

win7配置文件不正确导致系统崩溃无法使用的解决方法

  win7配置文件不正确导致系统崩溃无法使用的解决方法           解决方法如下: 1.当电脑出现系统崩溃的情况时,我们可以在重新启动电脑的时候,找到相关的修复方案. 2.在启动的过程中找到启动修复的功能按钮,然后对我们的电脑系统进行修复,来完成修复系统崩溃. 3.然后对我们的电脑进行系统的修复的相关方案,如下图所示对我们的电脑进行重镜像修复. 4.然后可以进入到启动设置的页面中,对电脑的系统启动进行设置,防止启动过多导致电脑系统崩溃. 5.如果以上操作还是不能够帮助我们修复电脑系统修

MindManager破解版导致系统崩溃怎么办?

  MindManager破解版导致系统崩溃怎么办?MindManager作为全球领先的思维导图软件,在中国也拥有大量的用户,但是MindManager作为商业软件,需要付费使用,很多用户容易坠入一个误区--为了省钱而选择所谓免费的破解版/绿色版MindManager软件. MindManager自上市以来,一直存在其对应的破解版本,但随着MindManager版本的不断升级,破解版本逐渐跟不上脚步,一些冒充最新版本破解版本的软件其实是老版本,更有一些不法分子恰好利用用户需求免费版本心理,在破解

cocos2dx-cocos2d-x CCArrary问题导致系统崩溃

问题描述 cocos2d-x CCArrary问题导致系统崩溃 请大家帮忙看看,m_monsterArr的状态貌似不对,但不知道哪里错了,报错的内容好像是无法认领child MonsterManager.h private: CCArray *m_monsterArr; //存放怪物对象列表 MonsterManager.cpp void MonsterManager::createMonsters(){ m_monsterArr = CCArray::create(); m_monsterAr

imageview-子线程扫描手机图片更新ImageView和RecylerView导致系统崩溃

问题描述 子线程扫描手机图片更新ImageView和RecylerView导致系统崩溃 我在主界面中使用了两个控件,一个是ImageView用来显示大图,一个是继承的RecylerView,用来实现类似Gallery的效果 在MainActivity中,我在OnCreate中扫描手机中的图片,并把目录信息.文件名等保存下来.扫描完毕以后,通过Handler发送消息,然后用handleMessage更新主界面. 后台我使用了一个子线程来加载图片,并保存到LruCache<StringBitmap>

android-获取shared preferences导致系统崩溃

问题描述 获取shared preferences导致系统崩溃 下面的activity继承ListActivity: public class TweetActivity extends ListActivity { SharedPreferences settings = this.getSharedPreferences("NewsTweetSettings", 0); @Override public void onCreate(Bundle savedInstanceState

poi-android中POI的FileInputStream找不到导致系统崩溃。

问题描述 android中POI的FileInputStream找不到导致系统崩溃. FileInputStream in = null; POIFSFileSystem pfs = null; try { in = new FileInputStream(nameStr); pfs = new POIFSFileSystem(in); hwpf = new HWPFDocument(pfs); } catch (Exception e) {} 这是读取word的一段,看报错问题应该出现在POI

诺顿误杀导致系统崩溃 百万PC面临灾难

近日不少电脑用户发现装有诺顿杀毒系统的电脑,在按照诺顿清除病毒的要求重新启动操作系统后,系统出现瘫痪. 瑞星公司表示,出现此种情况是由于诺顿杀毒软件升级病毒库后,把Windows XP系统的关键系统文件当作病毒清除,导致重启后系统瘫痪.据了解,截至中午12点已有超过7千名个人用户和近百家企业用户向瑞星客户服务中心求助,更多用户由于系统繁忙无法打入电话. 诺顿误杀系统文件时,显示的信息 安全专家表示,安装了MS06-070补丁的XP系统,如果将诺顿升级最新病毒库,则诺顿杀毒软件会把系统文件neta

魔兽世界新版本导致系统崩溃暴雪出解决方案

当一些玩家正在尽情游玩Patch 3.3.5中新增的内容时,许多人依然不得其门而入--因为目前存在着一个会导致游戏崩溃死机的系统问题.暴雪注意到了这个问题,并且已经全力着手修复这个问题.同一时间,官方技术支援论坛也针对这个问题发布一篇蓝帖,其中提到玩家要如何让游戏再度运行.目前看来,这个问题似乎是当玩家在64位元操作系统下运行WoW时,所产生的"存取不足"错误.在等待修复的同时你还能怎么做呢?很简单--调低你的显示设定.暴雪发言人Datth提出以下建议: 基于某些因素,这个版本占用了额

12行代码的浏览器DoS攻击分析及防御

有一段12行的JavaScript代码,可以让firefox.chrome.safari浏览器崩溃,而且还能让iphone重启.安卓闪退,本文作者对于该12行代码进行了分析解读并且提出了相应的防御办法,欢迎大家一同探讨. ajax与pjax AJAX(阿贾克斯),这里说的可不是阿贾克斯俱乐部哦! AJAX(阿贾克斯)即"Asynchronous Javascript And XML"(异步JavaScript和XML),是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交