Shell's Home

ViaVoice初步试用评估

Aug 8, 2005 - 1 minute read - Comments

今天Boss打字累了,准备在公司内部加个加速输入的方法。说实在我对此没有啥想法,对于我来说打字说不定还比说话快。但是总不能因此就和Boss说以后我来打字吧。所以大致想下来有三个方案,一个是ViaVoice,一个是扫描笔,一个是写字板。 扫描笔看来是最好用的一个,只要不是手写体,一扫全部搞定,没有要动脑子的部分。但是也只能用于一般印刷体,手写体花体啥的都不行的。成本也是最高的。 其次就是写字板,不过这个东西纯属鸡肋。写字的话一般人还不如打字,只有老头老太这种学不会打字的人才考虑写字板。虽然还有签名画画的辅助功能,不过有多少机会能用到呢。 最后就是ViaVoice了,成本可高可低。(IBM原装USB话筒啥价钱啊)一般来说是最廉价的快速输入方法。不过就是还要费心念字,而且要经过语音训练。公司鉴于经济价值上的考虑,决定使用ViaVoice。(说明白就是便宜啦,毕竟不好用当二十白花还可以换别的。要用了扫描笔不好用也得用了) 家里用ED下了一个ViaVoice9.1Pro的光盘版,然后安装,现场就有一个高级话筒。经过将近一个钟头的测试,试用和训练。我总算掌握了成功让ViaVoice识别九成以上文字的方法。简单来说,就是说话要靠近话筒!每次我嘴向后移动一厘米,识别率立刻降低两成,我Ft……在离话筒一厘米左右,说话可以直接拾音但是气流又不直接接触话筒的时候效果是最好的。在良好的拾音条件和阅读速度基础上,识别率还是令人满意的。不过我很奇怪,ViaVoice的低系统耗用识别非常差,高耗用也没有增加多少耗用,为啥IBM还这么定位呢?尤其是默认还是低系统耗用…… 总的来说,ViaVoice的试用结果还是让人满意的。如果正确使用,周岚的输入速度说不定尤在我上。但是如果运气不好,恐怕就……难说了。对于我们这种打字像吃饭一般的人来说,这种东西只是减轻负担的辅助工具,毕竟天天打字手还是会累的。(虽然念东西多了也会累,尤其是念那个训练文本的时候。)对于输入速度比较慢的人来说,这个不啻为一个非常好的输入手段。可惜他和扫描一样,要求你至少会一点的输入法。否则一旦出现根本不搭边的错误就无法修改了。而手写板就可以避免这点,理论上说手写板是不会遇到无法识别的东西的,除非你写的东西我都不认识。

网络实施

Aug 3, 2005 - 1 minute read - Comments

最近上班了,实在很懒。回来没事做,上班没做事,累嘛累的要死,天天跑来跑去。为了拿钱阿…… 很久没写过blog了,最近也没有时间研究啥技术的。就把在单位里面实施的一个网络系统描述下,权当技术文好咯。 首先是原来状况。一个路由连接外面,路由密码没有更改(太扯淡了)。内部一个10M的大HUB(还不是交换机,我可以嗅探的哦),九台机器,其中两台本本,不定量的本本随时接入。台式win2k,本本XP,结构很干净,不过补丁一个没打(汗……)。有一个服务器,主要打印使用,别的也用。OK,下面着手实施整体网络。 首先别的不说,路由密码我会放着就是白痴了。然后是一个个打补丁(还要看人家机器空不空,头痛阿)。然后用SSS扫描内部,果然漏洞少了。下面修改每个机器的配置,禁止SMB连接中的不严格现象(里面开了SMB文件共享哦,贝壳改成了允许的话使用加密形式),然后禁止客户机器的空连接和guest用户。打印服务器要打印,关闭了guest管理不大方便。这样客户上面基本没有漏洞了。 然后主机上面转换一个空盘到NTFS,实施大共享,做成文件服务器。给每个客户机做一个映射,这样基本可以将零散的文件共享集中到主机上,方便共享和备份。然后主机上面做一个FTP,路由上面开启部分路由映射进来,这样做成了远程FTP。严格来说,这样的FTP是瑕疵的,因为贝壳没有申请外网域名映射。FTP在被动方式时候发送的连接字符中IP是内网IP。如果FTP软件严格照来的话是连接不上的。但是FlashFXP等软件在PASV模式的时候只要返回数据中的端口部分,这个被映射了,所以可以正常使用。 然后在集中共享上放了很多软件,声明要装软件能从这里拿就必须从这里拿。找不到的下载安装后要放这里备份。这样削弱了软件后门的隐患。同时推荐了Mozllia,防止网页木马。使用Iris检测网络,防止内部攻击。其实这里应该放IDS的,而且应该更换成交换机,增快速度,防止嗅探。基本实施就结束了,等大家把文件整理到集成共享中,就可以备份刻盘出来了。

无常

Jul 24, 2005 - 1 minute read - Comments

世界就是这么无常,种下一颗苗。人说,会得到一颗树。但是真实的世界里面,种下一颗树的结果可能是被雷劈了,然后在你不想种的地方张出个头。 人喊老吾老以及人之老,幼吾幼以及人之幼,天下大同,非攻兼爱。喊己所不欲勿施于人。恐怕已经喊了上千年了吧。我们都同意,人是一种动物。那么,按动物间斗争的天性,人为何会喊出爱这个词呢?怕是在为自己种树吧。种下冤冤想报何时了的苗,结下自己的后路。可是一如生活,种下的苗没有张出想要的树,反到经常在不要的地方张了个头。 有的人对此是反过来喊,物竞天择,适者生存。可是将来落魄漂泊时如何能忍受一身的萧索?有人明知无奈,却还只能种树。无形中形同靠天吃饭的无奈。有人以因果报应以解,可是世界即使有因果,又何尝是我们能揣测的呢?以自己的因果为世界的因果,刻舟求剑掩耳盗铃就是这种人了。 有志者不惮以数代人,试图构建一个大同。使得世界所无法贯彻的因果可以得到补偿,善有善报恶有恶报。但只要有几个关键人物在其中得到了自己没有种的树,大同世界立时便会瓦解。若要天下大同,先必天下无人为私。人类若实现大同,想必也是一种悲哀吧。 所谓大同,不过仅仅是种理想。我们一般认为为天下大同的,便是对的。是为了万民的,是高尚的。需倾天下而从之。即使自己需为天下而牺牲,亦要在所不辞。其实天下无定规,我们认为天经地义的东西,何尝不是我们加给自己的枷锁呢?例如兄妹不相婚,天下岂有天然的此种道理?此乃为了延续后代而订,若说广而流传会遗毒天下故必弃之。那无意中悉知秘密,又何必视之如蛇蝎非欲去之而后快。然而人就是无法褪去自己身上的枷锁,清末有人如此,坚持王天下必刘氏。帝王将相安有种乎?今天亦有人如此,以为位高必能,岂知富不过三泽不过五的道理。天下的规矩就是没有规矩。面对种种非我可解的因果,我何去何从? 罢了,还是搞我的计算机罢。

磁悬浮列车

Jul 23, 2005 - 1 minute read - Comments

前两天小姚出国,十点的飞机。本来不准备去机场送行的。无奈去给孙Kaka和小明送钱的时候居然没带够钱,结果不去送行也不行了。查查时间,大Bus肯定来不及,坐出租过去也要50多。所以干脆奢侈一把,直接坐次磁悬浮,过过世界第一快的瘾。 说快也真的蛮快的,七点半出来,八点不到到龙阳磁悬浮站。八点二十五给小姚发了个消息说到龙阳了,三十分开车,三八分到机场,四二分已经找到人了。当时说从家出来多少时间,估计也就半个钟头的行车。如果不是时间算的太差,白白等了半个小时的话……然后一堆同学以为我开玩笑,还问是否是走过来的。(贝壳的神行功夫一流哦,和体形超不衬的。)最后拿出磁悬浮的票来,吓的N多人鬼叫鬼叫。 小姚出国的时候还真是麻烦多多,毕竟是头次,下次就好了。先是瞿感冒了,然后要喝水。接下来找不到人,天知道两个主角跑到M区去做甚,明明登机口在E区的说。还有通关时间啥的问题,零零碎碎一大套,小明的摄像机还临时没电凑凑热闹。然后通关前面瞿的行李居然超重,被迫临时拆包换重量(小姚的差很多……),还拆走堆书。勉强过关,希望他们旅途顺利吧。(貌似晚了,毕竟猥琐都到了……) 下面聊聊磁悬浮的感受吧。开始的时候非常平稳,后来速度超过300公里后有明显的震动。总的来说还是不错的,毕竟除了飞机,没有东西超过300公里运行。震动是在所难免的,飞机是通过种种方法来减轻的。转弯的时候,曲率半径和公路的三次转角曲率半径大致相当。但是转角倾斜高达三十到四十度(其实这样已经可以推算出速度了),仅仅略小于飞机。飞机这个家伙转角倾斜可以达到八十度以上,就不用说了。飞驰而过的时候东西全部都看不清楚,远处的东西还算凑合。至于啥电视上速度快了会有怎么怎么的多数是体感速度造成的主观感觉。也许飞机上看不清楚,磁悬浮可是430Km/h运行的,没有更快的车了吧。(如果你是超级汽车的试驾,当我没说)可是磁悬浮上看地面的时候只有快的感觉……没别的了。 不过说回来,磁悬浮的价钱还真是蛮贵的。单程五十来回八十,坐大巴估计是二十。磁悬浮的上座率大约是二到三成。回来的时候人比较多,不会超过五成,简直和过山车无异。如果价格下降一倍,达到单程二十五来回四十。那么估计坐大巴的人会跑过来六成以上,上座率铁定超过一百。这样回收的资金保持不变或者会更高,如此可能是比较有利的方式。不过磁悬浮的乘坐的却不方便。行李都要自己拉,居然还有X光检测……

If

Jul 18, 2005 - 2 minute read - Comments

Lyrics:David Gates Music:David Gates 演唱:莫文蔚 If a man could be two places at one time, I’d be with you. Tomorrow and today, beside you all the way. If the world should stop revolving spinning slowly down to die, I’d spend the end with you.And when the world was through. Then one by one the stars would all go out, and you and I would simply fly away. If a picture paints a thousand words, Then why can’t I paint you?

windows系统四、五

Jul 15, 2005 - 1 minute read - Comments

四,内核对象和句柄 调用API的过程中,有必要区分调用的目的和对象。说的通俗点,就是为什么调用和对谁调用。例如打开哪个文件,或者终止什么进程。调用的目的是根据不同的API和状态或者属性参数而变化的,而调用的对象则是根据句柄而选择的。 句柄大致分为内核句柄和对象句柄两种。一般来说,申请打开句柄时需要你传入安全令牌的就是内核句柄,内核句柄具有可继承性(inherit)。而像窗口等等东西就是对象句柄。SDK编程中,程序根据句柄的不同而操作不同对象,实现程序的种种目的。可以说,句柄和API组成了程序对下层的接口。 而在系统实现中,句柄则是某个内核对象,这个对象在系统中有个编号。句柄实际返回的多数是这个编号。大家可以申请两个句柄出来玩玩看,一般都是09XX之类的数字。从大小上看还属于NULL地址段(具体请看jefferey的windows核心编程),所以多数就是内核对象表项编号。这种一般以非内核句柄居多,因为这种句柄的特性可以从一个进程直接传递到另外一个进程。而有的则是某个在进程地址空间(这里插句,windows中进程和线程的区别可以理解成为,进程拥有独立空间和句柄,线程拥有独立CPU调度)内的某个数据块。这个块指向了某个确定的内核对象,这种句柄数字上一般大于4M。一般以内核句柄居多,进程间不可以传递只能继承。(其实也可以传递的,不过要用API主动复制,而不是Copy句柄过去了事) 五,通讯方法 通讯方法,通俗的讲,任何程序必定涉及和其他程序的通讯。windows中的通讯肯定是要通过API实现的。具体方法最简单的是消息通讯。需要对方的线程ID(进程ID没用的),或者进程创立的windows句柄。如果使用sendmseeage发送消息,接收方又是本线程创立的窗口,则将窗口处理函数作为子例调用(因为sendmessage是阻塞调用,本线程阻塞了来调用本线程的派生,当然,也只能,直接调用)。否则将消息挂到对方的接收区域去,然后要么阻塞,要么直接返回。(注意到为何sendmessage给本线程要直接调用了吧。阻塞的线程是无法通过messageloop的。) 如果不高兴使用消息,那么可以使用文件映射。这个方法本来是自虚拟内存中引入的,后来渐渐用来做文件的系统缓冲处理,也用来处理系统通讯。将一个文件同时映射到两个进程空间,则任何空间的变化会引发另外一个空间的变化。注意所谓文件的变化和虚拟内存一样,是未必写入磁盘的。使用这个方法需要注意同步问题。 另外,这个方法有个变形。可执行文件是PE格式时,文件载入内存时会自动做文件内存映射。此时设定属性,让某个section自动的作为同步映射,这样所有的自这个文件派生的进程在此section上是内存共享的。具体还是可以看jefferey的windows核心编程。 再差就是使用管道了,管道是用来套接标准输入输出的。去找找CUI界面重定向的问题就知道管道的用途了。除了定向到网络上,管道还可以定向到text框中。例如VC编译的时候…… 再傻点?你两个程序各申请一个winsock通讯好咯,OLE,COM,都随便你用的阿。不过拿电脑间互相通讯的东西做进程通讯,你一定是头壳坏去了。

windows系统二、三

Jul 14, 2005 - 1 minute read - Comments

二,从程序到内核 程序是被CreateProcess载入的,中间过程就略去不说了。不过程序为何可以在不同系统上运行呢? 首先每个程序会调用一系列的库函数,具体视使用语言和编译工具,编程框架而定。程序或者框架会调用系统的API,这个部分是SDK编程的内容。具体调用哪个API,在什么DLL里面,传入啥参数,在所有windows系统中都是一样的。不过每个windows系统对于具体实现就完全不同了。调用的API会在程序文件中载明。然后系统会将每个DLL载入进程空间,于是就实现了具体和系统的链接。每个DLL最终都会调用int 2eh(或者SYSENTER)陷入系统来完成各种使用。这部分就是内核的事情了。由刚刚的程序载入(每个系统都相同的动作),到内核实现(每个内核都不同的事情)。中间具体的过程就是系统附带的DLL的所完成的。 三,MM,不是美媚 MM是MemoryMangermant的简称,而非美媚。windows的内存管理在程序来看是透明的,因为对于程序来说,地址空间是连续的。主要原因是系统通过段寄存器索引了某个表,通过此表来映射你的“连续”内存地址到真实内存地址上来。当然,也有可能映射到了硬盘上的某个区域。Windows的每个内存块都对应某个硬盘上的区域。不过如果在内存中,则区域保留等待写入。如果不在内存中,需要的时候读出来而已。在你“透明”访问内存的时候,段寄存器会访问这张表(实际一般不访问,表的项目会在首次访问的时候载入某个缓冲用的快速寄存器),而后映射到真实的内存地址。如果“真实”的内存地址不存在,则会发生异常。windows的异常捕获会直接将硬盘内数据调入,然后继续程序执行。所以在访问内存过程中,程序看来是“透明”的。

病毒编年史-当代

Jul 14, 2005 - 1 minute read - Comments

现代病毒的最大特征是混合化,商业化。可能同时具备文件病毒,木马,蠕虫的特征,很难界定其归属。也可能具备多种传播途径,在多方向传播。同时可能具备多个部分分别载入。病毒的意义也渐渐从无明确的多种意义渐渐转向商业化。 AD 2001.9.18,混合代码出现,代表作 W32.Nimda,作者未知。 蠕虫通过电子邮件发送自己,搜索开放的网络共享,试图将自己复制到未打补丁的或已经有漏洞的 Microsoft IIS 网站服务器上,是一种既影响本地文件又影响远程网络共享文件的病毒。 贝壳评论: 可以看出,蠕虫同时具备了邮件蠕虫,漏洞蠕虫,社会工程蠕虫三者的特征。并且蠕虫会在系统中留下一个后门,这又具备了木马的特征。这正是现代病毒非常明显的特征。 AD 2002.5,蠕虫中的病毒,W32.Klez中的W95.CIH.1049。上面曾经说BackOrifice2000感染过CIH,这次CIH又感染了W32.Klez蠕虫,W32.Klez的大规模流行使得CIH卷土重来。这是首次由大规模蠕虫引起的病毒流行。 AD 2003,IM混合型病毒大规模流行,代表作 QQ尾巴。 贝壳评论: QQ尾巴是比较有趣的混合型IM病毒(虽然很多人不这么认为……)。通过IM传递一个消息,驱动你去某个网站访问,然后通过IE漏洞使你中毒。结合了IM传递,AcitveX或者脚本病毒,蠕虫三者的特征。这表明现代的病毒正逐渐融合各种技术,各个有害代码的严格分界线正在渐渐消失。 IM病毒有很多有趣的分支,无论技术如何变革。其核心都在IM传递的语言如何驱动人获得病毒。最近有直接发送病毒文件的例子,还有通过URL用户名结合的特定传染的(http://www.sina.com.cn:80@18.com/1.scr)。甚至有你回复是否中毒时对方自动应答没有啊的例子。这个过程中一般用的是社会工程攻击的知识,通过人的心理去驱动人。 AD 2003.2,W32.SQLExp.Worm SQL注入病毒,相信众多网管一定感触多多。 AD 2003.8,W32.Blaster.Worm 史上赫赫有名的“冲击波”病毒。步了红码的后尘,也是一个蠕虫。不过2K/XP双溢出的特性加上2K中一分钟重起的“有趣”特性造就了它的名声。曾经有人说病毒自动设计了一分钟重起,防止更新补丁。根据贝壳的分析,这个应该是溢出失败导致系统进程关闭,而后系统自行决定重起的。这种防止下补丁的方法既不实用风险也大,而且对于病毒传播没有贡献。只有呆子才用他。 AD 2003,“无法删除”的3721。3721是一家公司的网络实名解决方案。为了防止软件被删除,该公司使用底层驱动阻止核心文件和注册表键值被删除,导致系统效率低下。 老实说我对诸多解决方案没有啥兴趣,严格来说左解决右解决就是为了抢实名到底谁用的问题。但是这个事情引申出来一个问题,无法删除是否是恶意代码。如果说非恶意吧,他确实的违背了用户的意志。要说恶意吧,谁能说防删除就是恶意呢?如果这么说,防修改的保护卡是否是恶意呢?同时,这个技术也为诸多病毒提供了借鉴。可以想见将来的诸多病毒左右删不掉的场景,届时恐怕就头痛多多了。 另外贝壳插句话,谁写个linux引导专门对付3721之类的东西阿?我已经被问的脑袋大死了。这个东西DOS下删不了,上NTFS4DOS是ReadOnly的。linux支持了NTFS的RW挂载恐怕内核在软盘上已经放不下了,那就是说要光引导或者是USB引导咯……多软件也可以考虑。哪位大大,出一个吧。 PS.后记,病毒编年史的更新曾经一度中断。最后贝壳偶尔想起是否是文字中的某些病毒特征码导致的呢?结果果然如此,哎……此天意也(旁:又开始打太极了)。

病毒编年史-近代

Jul 14, 2005 - 1 minute read - Comments

近代病毒的特征是多样化,结合化,跨平台。对社会工程的依赖大于对技术问题的依赖,传播中对于网络的依赖大于对软盘的依赖。种种病毒多数是通过社会工程方法或者漏洞来传播的。此时也大规模的兴起了后门运动。满世界飞的后门造就了很多Cracker,有害代码的破坏力展露无疑。 AD 1998,木马后门首次为大众所知,代表作 Back Orifice,作者 死牛崇拜(Cult Dead Cow)。 贝壳评论: 1998年真是电脑界风云之年,win98出世,BO发布,CIH流行,java病毒出现,到处充满了生机(如果这个算是生机的话)。BO作为木马,不是最早的一个。但是作为近代木马的鼻祖,BO当之无愧。木马自Unix产生以来就出现了,最早是管理员用来方便自己进出的后门,或者诱骗套取密码用。BO发布的木马可以在win9X系统上开个洞,使得别人任意操控机器。当今世界九成以上的破坏性代码(或者说恶意代码),均结合了这个特点,在侵入别人的机器后会留下后门方便作者进出,或者窃取用户各类密码。 说到死牛崇拜,还有个好笑的事情。在美国拉斯维加斯第七届“黑客”周年大会上,黑客组织“死牛崇拜” 推出特洛伊木马型黑客软件Back Orifice 2000。然而15日“死牛帮”证实其推出的正式版“BackOrifice2000”软件光盘确实感染了CIH病毒…… AD 1999,中国木马兴起,代表作 glacier,作者 西安电子科技大学 黄鑫。 冰河为国内相当优秀的木马,即使在国际上也非常有名。现今很多出名的黑客都是利用冰河迈向通往黑客道路的第一步的。黄鑫的冰河让很多人体会了做黑客的快感,更让很多人了解了网络安全的重要性。此人目前为网站“安全焦点” 的工作人员,水平极高。在安焦论坛上经常可以见到,大家不妨去过把名人瘾,要两个签名来留念…… AD 1999,Millenniu蠕虫出现,作者未知。这是迄今为止最没有名气的一种病毒,只有一个人报告受到感染。因此此病毒入选最没有名气病毒奖…… AD 1999,邮件蠕虫兴起,代表作 W97M/Melissa,作者 David L. Smith。不要被骗了哦,W97M中指的是win97。时间大约是99年(贝壳在symantec的安全响应中心99年才找到它的资料)。 AD 2000.5,邮件蠕虫和脚本病毒的结合,代表作 VBS.LoveLetter,作者未知。 AD 2000.10,嵌入式系统病毒出现,代表作 Palm.Phage.Dropper,作者未知。这是一个感染PlamOS的病毒,感染能力很小。但是代表嵌入设备病毒首次出现。 AD 2000.11,PHP网页病毒出现,代表作 PHP.Pirus,作者未知。 AD 2000,史上最出名的本地漏洞出现,代表作 win2000,作者Bill.Gates。 贝壳评论: windows2000的输入法漏洞可以号称是计算机史上最出名的漏洞了,直到去年还出现了一种新的表现形式。输入法漏洞以其简洁有效,立竿见影而著称。任何人都可以轻易学会,从而进入不是自己的系统里面去。漏洞总共有三种表现形式。一个是登陆时使用输入法,察看帮助,Internet属性。一个是登陆是等待,直到KV系列杀毒软件跳出来(怎么又是你)。一个是在特定输入法中按特定键序列,导致缓冲溢出。(这个去年才出来) AD 2001,史上最出名网络漏洞,UNICODE绕回漏洞出现,代表作 IIS5,作者Bill.Gates,发现者NSFOCUS。 贝壳评论: 这个漏洞是下面的红码的基础,红码在窜入新的机器前就扫描此漏洞。并且在远程下载病毒执行。漏洞简单来说就是在UNICODE解码的时候检验不严格,导致可以执行任何一个同盘上的文件。严格来说,如果在IIS或者NTFS安全属性上设置过的话,或者使用了安全策略和IPSEC,漏洞都不会作用。但是漏洞之所以出名就是因为连IIS都是大家糊里糊涂装上去的…… 其攻击形式大致如下: (此处省略,否则无法发表) 想当年我的IIS上面一半都是这种扫描代码。虽然我开了各种安全配置,而且上了补丁,上了IISLock。不过机器不停跑这种东西还是非常讨厌的,最终导致了贝壳的个人网站的倒站(太麻烦了)。 AD 2001.8,新一代蠕虫,红色代码II出现。 贝壳评论: 红色代码不同于以往蠕虫的是,它不使用感染文件的方法驻留在系统内部,因此可以简单的通过重起解除感染。但是问题在于,如果没有打补丁,重起后会重新感染病毒。这点和Blaster很像,但是Blaster还会定时重起,导致无法下载补丁。由于很多默认安装的个人win2000系统安装了没有必要的IIS组件,导致了该病毒大量感染。其声势不在Morris之下。 AD 2001.9,反蠕虫蠕虫,W32.BlueCode.Worm出现。此病毒的目的是为了解除红码的流行。在利用和红码相同的漏洞入侵系统后,此病毒会去下载补丁并且清除红码。而后寻找下个中毒机器,并且消灭自身。作为反蠕虫蠕虫,早在磁芯大战(Core War)的年代就出来过了。不过其合法和有效性一直没有得到肯定。 近代的结束年月并无法详细划定,不过我将其定为2001年9月。因为此时出现了一种混合型的病毒,结合了蠕虫,后门,病毒的特征。此后的有害代码正向混合化的方向发展。

windows系统一

Jul 13, 2005 - 1 minute read - Comments

一,启动 任何一个系统,一般都从启动讲起的。这里讲启动本来从NTLDR讲就好,可是怕有人不懂,所以简略概述加电后系统的启动流程。 系统加电后,会将CS:IP(注意不是EIP)设定为FFFF:0000。然后开始BIOS自检流程(Power-On Self Test,POST),最后初始化0地址的中断向量表,将引导盘CHS(0,0,1)读入系统0000:7C00开始执行。我们假定这是硬盘(软盘的没有MBR这步),并且没有安装LILO到MBR(否则流程不大一样)。于是MBR会先读取分区表(Disk Partition Table,DPT),寻找活动分区并且载入其第一扇区到000:7C00位置执行。这样MBR等于一个透明层,无论哪个分区(逻辑磁盘不行哦)获得了活动分区,其引导区(OS Boot Record,OBR)都可以当做自己是被BIOS读取执行的。而后如果是9X系统,引导区会读取系统文件(FAT32)头部来执行。这个就是我们非常熟悉的DOS启动流程。同时插句话,如果您无法format一个DOS系统盘出来。那么先彻底格式化(注意彻底,否则FAT遗留信息会让你失败)磁盘,然后COPY IO.SYS上去。照样可以产生系统盘,当然这种BT非常规手法只有了解系统才干的出来…… 如果是NT系统嘛,就会按照某种方法载入NTLDR这个文件。具体方法我也不清楚。因为NTLDR文件没有位置要求支持NTFS和FAT两种格式。按理这么一来引导代码会超过引导区的容量。根据分析NT系统的引导区内容总共有六个连续扇区,分布在头六扇区中。当然第一个扇区还包含了文件系统相关信息BPB(BIOS Parameter Block,研究MFT的还有一个Extend)。这样的大小还是无法容纳整个文件系统的支持阿?要解决除非我愿意反向引导代码,不过为了这么一个问题反向引导代码……等我有空再说吧。 下面NTLDR会进入保护模式,设置了GDT,LDT等等东西,并且彻底支持了NTFS和FAT的读取(引导区只要能从两个格式盘上马找到一个文件就好)。然后会根据BOOT.ini中内容决定如何进行引导,如果出现文字,还可能需要bootfont.bin字体文件。一般来说,会直接调用NTDETECT.COM来检测硬件变化,继续系统加载过程。这个就是我们经常看到的黑色屏幕上有东西从左到右闪的那个…… 后面的东西就是微软内部的资料,众人根据推理分析得来,所以不是很准确。不过可以肯定,后面的东西全在system32中打转。根据分析,首先加载的是NTOSKRNL.EXE(单处理器)或者NTKRNLPA.EXE(SMP,对称多处理器)。这个东西就是windows的微内核,由它导出了windows全部NativeAPI的实现。然后是SMSS.EXE,这是进程管理器,也可以说是头个系统派生的进程。后续所有进程可以视为它的子例。由它派生了CSRSS.EXE和WINLOGON.EXE。后者接管了系统的很多部分,例如GINA。它派生了SERVICES.EXE进程,系统开始加载各种服务。最后在登陆后由GINA启动EXPLORER.EXE。出现桌面等操作界面,启动基本完成。按照上述分析,多数服务的宿主进程都是SERVICES.EXE的派生进程(有特例,例如贝壳手里的RaidenFTPD守护进程就是先由SERVICES.EXE派生,再两次派生所成的)。而多数应用程序的进程都是EXPLORER.EXE的派生进程(当然,或者再派生进程)。EXPLORER.EXE负责的内容包括了开始菜单等等,所以除非你通过某个服务去启动程序,否则都是它的子孙。(特例包括Process Explorer工具作为Ctrl+Atl+Del启动时,是WINLOGON.EXE的子例。所以在上面启动一个CMD就成了服务派生,无服务身份。还有MSN弹出的邮件或者Space都是作为某个服务的派生的,所以也不是EXPLORER.EXE的子例。)