Profil de 克莱克莱沃曼PhotosBlogListesPlus Outils Aide

Blog


26 novembre

Google Chrome OS 问题解答(1)

在使用Chrome OS的时候自己也有些疑问,有些找到了解答,有些是推测,写下来想跟使用Chrome OS的网友分享。

1. Chrome会不会支持插件,比如Flash,Silverlight等等?

Google在Web开发上非常推荐用开放的标准和技术。他们认为使用Javascript和HTML5完全可以做到不再需要Flash,Silverlight这类插件。并且,Chrome OS是不允许安装任何程序的,因此用户也不可以安装插件。所以,像Silverlight,Java,Quicktime等等目前浏览器比较流行的插件,Chrome都不会提供官方支持。但是,我估计是因为Flash的应用实在是太广泛了,Chrome内置了对Flash的支持。这就给微软出了个难题,“如何通过Silverlight服务所有的用户?”。微软的Silverlight战略终于开始尝到些苦头了,需要看别人的脸色行事了。如果Chrome能够流行开来,还有什么开发商会选择Silverlight呢?

2. Chrome将会怎样支持离线应用?

目前看来,Chrome很可能会倾向于HTML5的离线支持,而不是Gears,毕竟HTML5是开发的标准。也许这也是为什么Google并没有在自己的产品里大范围使用Gears的原因。我尝试在Chrome OS上安装Gears,并没有成功。

3. Chrome 不能安装传统的软件?

传统的软件有一个很大的问题就是需要安装。比如,你重装了系统需要重新安装所有的软件,你使用另外一台新计算机也需要安装所有的软件才能正常工作,娱乐。Google的Chrome是不允许安装软件的,很大的原因就是想解决这个问题。但是,这并不代表你不能使用传统的软件,只是你会更方便,比如输入网址,或者点击一个链接就可以使用了。Chrome提供Native code的支持,因此,现在所有的传统软件其实都是可以通过一定的修改和特殊的编译在Chrome上运行的。当然这需要Chrome占据一定市场份额之后才有软件开发商愿意和值得去这么做。

4. Chrome 不能打游戏?

跟上一个问题类似,游戏商完全可以编写在Chrome上运行的游戏。虽然现在没有这样的游戏,但是Chrome并不是一个不能打游戏的系统,未来的潜力还是有的。

5. Chrome使用Gmail帐号登录,没有网络怎么办?

第一次登陆Chrome需要网络,你的登录信息会被cache起来,因此以后即使断网,你一样可以登录。

6. 为什么进入Chrome之后发现很慢,点鼠标要等个2,3秒才有反应?

很可能你的机器使用的是Nvidia显卡,而Nvidia显卡没有open source 的显卡驱动,所以Chrome都是通过软件的方式来显示,因此很慢。

7. 怎么调分辨率?

进入到Terminal, 然后 /usr/bin/xrandr –size 1280x1024

8. 怎样调音量?

进入到Terminal, 然后 /usr/bin/alsamixer

25 novembre

从Chrome来看Google和微软的战略,现状及未来展望

互联网已经发展到了云计算时代,而云计算一个非常重要的问题就是支持多设备,比如PC,Netbook,Mobile等等,以及多系统,比如Windows,Mac,Linux等等,而一个公司能否成功,很大程度上在于对他们支持的多少。我今天就想简单分析一下微软和Google的各自战略以及对未来的展望。因为有很多话要说,所以可能会有点乱,有些没有整理好的思路,以后补上。

毫无疑问,微软的战略核心就是Windows,因此出现了Windows 7, Windows phone, Windows Live, Windows Azure 等等术语。而微软的直接想法就是把在PC上的操作系统Windows的品牌和优势扩展到手机,互联网和云计算上来。 而Google的战略核心则是在Chrome。很多人奇怪为什么Google把OS和Browser都叫一个名字,其实这正体现了Chrome在Google战略的核心地位,跟微软一样,把什么东西都贴上了Windows的标签。那么我想从底层到上层来分析一下微软和Google的情况。

  • OS: PC windows和windows mobile其实是两个系统,而Google虽然有Chrome和Android,但是将来要合二为一,我们有理由相信合并之后的OS还是叫Chrome。看看Mac和iphone其实是用了同一个系统,而且获得了巨大的成功,因此未来微软也非常有可能把两个Windows也合并起来。在这一层来看,双方都支持多设备,不过现在还没什么交集,Chrome OS主要应用在上网本上,而微软的对策则是Windows 7 Starter。相比Chrome OS来讲,Windows的巨大优势在于桌面应用,不知道被限制了很多功能的Starter还能不能像以前的XP对Linux在上网本上产生巨大的优势呢?不过总而言之,微软在OS这一层的垄断地位目前是无人能及的,Chrome只不过是有可能通过上网本去改变一些。
  • Browser:微软的browser就是IE,只能运行在Windows上。Google的Browser是Chrome,可以运行在不同的操作系统。由于历史原因,无论IE怎么烂,兼容性也是其他浏览器不可比拟的。由于很多网站只能通过IE才能良好地浏览,使得互联网用户必须在某种程度上粘在IE上,从而也就是粘在了Windows上。由于桌面程序在不断地,快速地往Web上转移,Windows通过桌面应用来粘住用户的可能性越来越低,因此IE就显得非常重要,更像是Windows的一道护身符。而Google Chrome浏览器则是新一代的浏览器,支持不同的系统平台,甚至通过Frame可以运行在其他浏览器之上。我说过Chrome OS不是那么重要,Chrome Browser才是Google的战略关键,Google的目的就是想在Browser这一个层面一统江湖,从而确定像微软在OS上那种垄断地位。一旦这种情况发生,Google就可以通过浏览器控制Web服务提供商,就像微软通过OS来控制软件商一样。当然这是Google的目标,在实现目标之前肯定会有一番龙争虎斗,Google也未必最终会成功,但是今后几年的互联网焦点都会落在浏览器竞争上。
  • 应用: Google在Web应用这个层面是全面地取得了领先,并且比微软走得要远很多。现在微软的唯一领先之处也许就是Live Messenger了,可是它毕竟是一个桌面程序,论Web应用的话,GTalk肯定要更强。Google的Web应用是依赖所有浏览器都支持的Javascript,而微软基本放弃了Javascript而强力推自己的Silverlight。由于IE只支持Windows,而互联网又需要支持多系统,Silverlight则是微软的多系统支持的解决方案。从需要安装这个角度,我就更倾向于Javascript,但是从开发人员来说Silverlight应该更合理,方便。由于Web2.0的这股热潮正是靠AJAX推动的,使我们看到很多通过Javascript实现的Web应用典范,比如Gmail, Facebook, Twitter, 还有Javascript的巅峰之作Gwave。而我并没有看到什么热门网站是通过Silverlight来实现的,毕竟Silverlight出道的时间也不短了。因此,我很怀疑Silverlight能够改变游戏规则。而Silverlight完全是微软自己的标准,并不是开放的,而对于以开放为基础的互联网来说,还是有些格格不入。

综上所述,目前来看,Google在Web应用是全面地领先微软,而微软在OS上的垄断地位也很难撼动,双方今后几年的争夺焦点主要会集中在浏览器上。由于微软一向是以OS为中心,而Google是很明显以Browser为中心,所以胜利的天平很可能像Google一边倾斜。而一旦Google在Browser上取得胜利,微软的OS的优势也会面临相当大的威胁。

最后回答一下一些网友的典型提问,“Linux这么多年挑战Windows彻底失败,Chrome就是一个Linux怎么可能成功呢?”,“Firefox挑战IE只有一点小成果,Chrome怎么可能成功呢?”我们如果分析一下,Linux挑战Windows是在OS这一层来挑战的,而Firefox挑战IE是在浏览器这一层挑战的,但是Google不同,Google是在三层全面地,立体地发动挑战的。换句话说,Linux做的再好,在应用层没有支持怎么办?Firefox做的再好,应用层都去兼容IE怎么办?而Google本身就是个应用大户,不存在这个问题,它与微软公司的发展是采取了截然相反的路程。微软是通过OS来控制应用,比如通过Windows集成IE打败了Netscape,通过Windows集成Hyper-V打Vmware,通过Windows集成.NET挑战Java, 通过Windows的优势开发杀毒软件因此导致杀毒领域的一片混乱。所以说,微软是采取的自下向上的发展方式,而Google则是采取的自上向下的方式。先有了广泛的应用,比如Search的垄断,Gmail,GReader, GDocs, GVoice, GWave, GTalk, 等等。然后在这个基础之上杀入浏览器领域,并且进一步杀入OS领域。对于用户来说,首要关心的并不是什么OS,浏览器,而是应用。对于一个典型的网友来说,即使用Windows,用IE,还是离不开Google Search。而Google开发了Browser和OS之后,想用Google 的各项服务就可以不用IE和Windows。这就是Google对于微软的最大威胁,你做的再强也离不开我,而我做好了就可以不需要你。我们有理由相信,用Google的各种Web应用,Chrome OS肯定会达到最好的效果,其次就是在其他系统上用Chrome Browser。而Google可以借应用的巨大优势让用户跳过微软,而微软却很难通过Silverlight加自己或者第三方应用去挑战Google的应用。因此,未来的Web应用会决定底层浏览器和OS的成败,而微软的优势还是历史上遗留下来的桌面应用,而这个优势现在越来越小了。这也是为什么由Google去做Browser和OS很可能会产生跟Linux和Firefox不同的效果。

最后总结,微软的打算是把Windows扩展到多设备,但是解决不了多系统的问题,就出了Silverlight。而Google则是打算通过Chrome Browser解决多设备,多系统,甚至多浏览器的问题。不得不说Google的眼光真是更高一筹。

24 novembre

Google Chrome OS 试用初步印象

上次那个虚拟机没搞定,这次的U盘启动这个搞成功了,而且还支持我新买的一台2500廉价东芝笔记本。下面说说自己的一些体会,总的来说跟我心中的设想几乎是完全一致的,甚至更好一点。本来以为因为驱动的原因,基本不支持现有的机器,没想到Chrome现在支持的机器并不少。虽然现在bug还挺多,或者功能还不完善,但我也还没看到什么重要的原因使我不能用它做个Windows替代,毕竟对Windows的很多方面早就忍够了。

  1. 先谈界面。Chrome OS的界面几乎是Windows 7界面的一个翻版。在Web OS的概念中,应用程序就是Web应用,或者说一个个的网站/网页。因此,如果从这个角度上去看,Chrome左上角那个按键就是活生生的Windows开始菜单,虽然现在十几个图标,但是以后扩展的可能是一定的,应该会搞的非常类似开始菜单。靠右的小Tab就是Widnows 7 Pined program再加上Startup,这个设计跟我使用Chrome Browser的习惯不谋而合。我就是设置Chrome启动的时候打开我最常用的Gmail, Reader, Wave等等,因此我很喜欢这个设计。再往右就是一个个Web应用的Tab了,就像Windows Taskbar一样,你可以在应用程序中间来回切换。最后右上角就是Windows的状态条了,包括电池,网络,还有个系统菜单是Windows没有的,但是好像没太大必要出现在那里,因为地址栏右边的工具条也包括了。Home Page则相当于Windows的Desktop,上边列出了你常去网站的快捷链接,Windows里是快捷键,不知道以后会不会加入壁纸的功能呢?总的来说,Chrome Browser就相当于Windows的Desktop,而Chrome OS是支持多个Browser窗口的,但是Windows并不知道多个桌面,当然这个意义也不是很大。
  2. 用途。目前来讲Chrome肯定不能作为主OS来用,比如这个镜像是通过BT下载的,U盘的制作也是通过Windows应用,Chrome都不可能实现。但是,作为一个替代OS给上网本用,给那些像我一样使用计算机几乎100%就是上网的人群来说,我并没有看到有什么大问题。快速启动,无需安装,管理应用,自动更新/恢复系统,设置/数据同步,Single Sign On等等优点都是Windows不具备的,而相反在Windows上表现出来的缺点又是无法让我忍受的。比如,我看着Windows开机/关机那么慢就着急,很多时候还关不掉。我特别不愿意在Windows上安装应用,迫不得已要安装的时候都很恼火,而且极其不信任有些应用,用完卸载的时候也不清楚是否卸载干净了,是不是还留下什么烂七八糟的东西。系统整天自动更新让我要启动机器,系统万一有点什么问题恢复起来也是很不理想,基本就是重装系统,而重装之后又要重新安装软件和配置系统。机器自己有个帐号去登录,登录之后去网站还需要另外的账户。这些恼火的地方,在Chrome上都不存在了,我不知道我为什么不去用Chrome?
  3. 目前的问题。Bug还是很多,刚开始用的时候好像很快就会crash,要关机再开机。后来发现,有些时候不是crash,它自己会恢复,重启什么的,而且如果你老老实实看网页的话,crash不算严重,还算是可以一用,当然希望能够有一个相对稳定的版本出来。Sync现在并不work,菜单也是灰色的。分辨率会变,有的时候重启变低分辨率了,如果再重启就可能又高分辨率了。重启或者关机的时候总是有个disk I/O error。性能并不比Widnows上的Chrome Browser快,而且目前肯定不如在其他系统直接用Chrome Browser好用。
  4. 一些技巧。我基本不怎么懂Linux,因此这些技巧不知道是不是大家都知道呢?
  • 一些有用的快捷键:Ctrl+N (new windows), Shit+ESC (task manager), F11 (full screen), F8 (shortcuts), F12 (windows preview), Ctrl+Alt+T (new terminal),

Ctrl+Shift+W (close window)。

  • 重启:Ctrl+Alt+T, sudo reboot
  • 关机:Ctrl+Alt+T, sudo shutdown –h now
  • 进入Terminal返回Windows,F12
  • 改密码:在另一台Linux机器上把passwd里的root和chronos的密码删除。
  • 中文输入:在谷奥上看一个网友发的搜狗云输入法,试了一下还不错。
22 novembre

Chrome OS 就是 Web OS

Chrome OS发布会已经过去几天了,照理说当天我会写篇文章出来的,可是一来现在比较懒,懒得长篇大论,二来Chrome OS跟我几个月前的想法基本一致,没太多意外,因此就觉得没什么必要写这个文章了。最近这几天看了不少评论,比较意外地是绝大多数人对Chrome OS持有否定的态度。本来按我的设想正面负面的应该是五五开的局面,没想到其实绝大多数网友的思维惯性还是很大的,还深深陷入在PC OS的时代。今天看到一篇文章与我的观点及其一致《Underwhelmed By Chrome OS? That's Kinda the Point》,更觉得没必要再表达些什么,可是由于我还有一个观点没看到人提起,就随便写写表达一下我的看法。

最近这两年大家被云的概念搞得模模糊糊的,什么是云?什么是云操作系统?这个概念都很少有人能分清楚,更让大家忘记了在炒作云之前的热门话题“Web OS”。在PC刚开始的时候就是个单机系统,后来发展到了网络应用就在PC OS上加入了相应的功能,比如RPC,DCOM等等,又后来由于Internet的发展,PC OS上又加入了浏览器,成为了现在的模样。也就是说,目前的OS实际上还是从单机OS繁衍过来的,根基还是在本地计算。另一方面,在局域网的时代我们开发应用都是C/S结构的,也就是说client/server结构,而在10年前开始往BS,browser/server的结构转变,最近几年转变的尤其快速,甚至单机应用也在很大程度上向B/S的结构转变。那么我们知道,在C/S时代我们的OS是分Client和Server的,比如XP/Server2003。可是在B/S时代,我们的OS还是老的样子,分为Client和Server,比如Windows最新的Win7和Server 2008 R2。那么是不是这个结构有点过时了呢?我的回答是肯定的。在B/S时代,我们应该在操作系统层面有一个全新的结构,那就应该是Web OS和Cloud OS。什么是Web OS?什么又是Cloud OS?有的网友竟然拿Chrome OS跟Windows Azure进行比较,简直是驴唇不对马嘴。按照我的理解,Chrome OS就是Web OS,Windows Azure则是Cloud OS。在一个新的时代,云计算的时代,OS一定要脱离PC时代的概念,而跟云的概念紧密结合起来。Cloud OS是云里的一个虚拟服务器,具体到有多少台服务器,服务器上装的什么操作系统,一点也不重要,重要的是他提供的服务。而Web OS则是云的端,也就是云的接入点。而Web OS不应该仅仅是一个PC上的OS,它可以在多种设备上安装,提供接入到云的服务,比如手机。用户也不在乎到底是用的什么设备,设备上到底装的什么系统,只要通过Web OS能访问云就可以了。因此,Chrome Browser比Chrome OS重要的多。Chrome OS是一个纯Web OS,而Chrome Browser则是其他设备和系统上的虚拟Web OS。以后的真正焦点还是应该集中在Chrome Browser上来。别忘了现在是Browser/Server的时代,Browser才应该是故事的主角。

在Web OS这个术语很热的时候,我试用过一些所谓的Web OS,没什么满意的。他们大多是建筑在Adobe的Flash上面。而Facebook带给了我不少Web OS的感觉,可是它还远远不够。Chrome Browser的出现使我对Web OS的理解有深了一个层次,而Chrome OS的公布则是第一个让我彻底信服的Web OS。Google这一步走的可能超前了一些,可是事实上也许是微软拖后腿时间太长了,别忘了C/S到B/S的转变可是已经发生了很多年了。也许很多网友并不知道,微软正在研究开发很多Chrome OS已经实现的功能,很遗憾第一步被Google迈出去了,就像Office online一样,Google推出很多年,微软还没有完全实现。所以,Google的Chrome OS的方向是对的,无论成功与否,都是一个非常积极的尝试。(微软完全有时间和资源短时间改善Windows把Chrome打败)

最后说一下我的失望之处就是由于驱动的问题,Chrome OS不能安装在绝大多数的PC上,而我也不太可能为了使用它而花钱买一台新机器。可是我说过了,以后的真正重点还是在浏览器上,因此Windows7+Chrome Browser也是一个很好的选择。

14 août

网友对Google Chrome OS的一些误区

最近在网上发现一些网友对Chrome OS的提问及观点表现出对Chrome OS的理解有一定的误区。我想对几个常见的误区谈谈自己的看法。首先,Chrome OS虽然还未推出,而相关信息也是少的可怜,但它却是唯一一款能够说服我的Web OS。无论Chrome OS是否能够成功,我认为它的理念都是跨时代的,都是应该研究和学习的。Google的Web OS的概念首先通过Chrome Browser突破到了浏览器,用通过Chrome OS突破到了操作系统,成为真正意义的Web OS。相比较之下,一些WebOS及Facebook的理念就要狭隘很多了。这也解释了我一个很长时间的疑问“Google为什么不把它的服务向Facebook一样有一个很好的组织,而让微软嘲笑它的服务混乱无序”,因为Google对Web应用的组织放到了浏览器这个层面,以及扩展到了桌面。下面是对一些常见误区的个人解释。

1. 比尔盖茨:Chrome OS 就是Linux,没什么新鲜的。

Chrome OS 采用了Linux内核不假,从传统OS的角度来说它就是Linux也并不为过,但是这个说话是不完全的,尤其是隐瞒了一些OS革命性的变动。传统OS分为Kernal mode及User mode,而桌面应用则是通过OS的API开发的user mode程序。Chrome OS的变革在于,它在user mode上只有一个浏览器,而Chrome OS上运行的程序则完全是Web应用程序。换句话说,Chrome OS与传统OS的理念及架构已经截然不同了,采用的Kernel无论是什么,只是管理硬件用的,普通用户根本就不care,而开发人员构建软件方式和用户的软件体验上才是重点。

2. Chrome OS是Cloud OS。

张亚勤已经谈过很多遍“云+端”了,这个概念还是很实际的。我们能够非常清楚地看到,Chrome OS不会被应用于云上,而只是应用于端上,所以我们不能把它称为Cloud OS,而Web OS可能是目前最合适的称谓了,虽然Web OS的定义也并不明确。

3. Chrome OS会颠覆Windows。

Chrome OS面向的市场是上网本,本身就比较局限,因此不可能颠覆Windows。Google不可能傻到这个地步一心要颠覆Windows,比较实际的目标是占据上网本的一定市场份额,并且使微软继续在上网本上挣不到钱,另外随时保持向笔记本和台机进军的可能,给微软造成巨大的压力。微软在上网本上不赚钱对Windows业务影响很大,本想通过Windows 7的发布扭转局面,被Chrome OS彻底扰乱了。

4. Chrome OS的兼容性会差,或者应用程序太少。

Chrome OS上的应用是Web应用,只要是能在Chrome浏览器中运行的应当都能在Chrome OS上运行。由于采用的是标准的跨平台,跨浏览器的Web应用,基本不存在太多的兼容性问题,尤其是在Chrome浏览器越来越成熟的情况下。同样,web应用丰富多彩,也不存在应用程序少的问题。

5. 离开网络,Chrome OS什么都干不了了。

早在Chrome Browser发布之前,Google就已经有了离线的解决方案Google Gears了,并且集成在了Chrome Browser里。因此,断网之后你还是可以查看/撰写emails,documents等等。

6. Chrome应该提供API。

Chrome是全新理念的Web OS,不再支持桌面应用,因此也不会有传统API提供。

7. Chrome应该可以运行Office。

Chrome上的Office就是Google Docs。

8. Chrome很安全,不会染病毒。

无论设计的多么完美,是程序都是会有bug的,不存在绝对安全的系统或软件,更何况hack的技术也是在不断发展的。因此,对于这个广告语似的口号,大家就没必要信以为真了。

7 août

微软,Google云计算基础技术的比较

 

我想现在几乎没有人没有听说过“云计算”这个术语了,但是能明白云计算是怎么回事的人可能就是少数了,而在云计算的理解上也是因人而异,可能非常不同。这也不算不正常,因为云计算只是个概念,是个方向,很多时候大家都只是看到,抓到,感受到那么一点点,好比盲人摸象。就算大公司的理解也是千差万别,更何况每一个人了。我今天想通过对比微软和Google的云计算的基础技术来阐述一下自己对云计算的理解。首先我想澄清一些概念:

  • 云计算:现在最泛泛的概念就是云计算了。由于计算是其中的重点,我们经常把云上的所有东西统称为云计算,这就很容易使人感到迷惑。我个人认为云计算有两种context,一个就是计算,发生在云上的计算。另外一个是我刚提到的泛泛的概念,比如把云存储也归于云计算了。所以大家看相关文章的时候,一旦看到云计算要搞清楚context,否则就容易迷糊。而且我发现很多文章的作者本身对这两个概念也很迷糊。我在跟很多人讨论云计算的时候,也正是这个原因使得讨论无法进行。我个人倾向于把云和云计算区分开,就像把计算机和CPU的概念区分开,虽然CPU是计算机的核心。当然,这不是由我来作主的。
  • Server和client:我发现在讨论云计算的时候,不但需要区分上边讲的两个context,还需要区分server端和client端。如果从计算的角度来说,那当然server端是重点了,毕竟计算在server上产生。可是如果从云的整体来说,server端和client端就都很重要。而如果从用户的角度来讲,那就应该是client端最重要了,因为计算的发生对用户来讲是透明的,而client端的交互最重要。很多时候在讨论云计算的时候,人们竟然把client端跟server端混着来讨论。比如我在写livemesh与云计算的文章的时候,很多人竟然把windows azure拿进来讨论。我最近还看到有些文章竟然拿Chrome OS和Winows Azure进行讨论。
  • 由于以上原因,为了减少混乱,我会把云计算按照计算的context来讲,而把泛泛的概念直接称为云。我在讨论技术的时候,会把他们分为client和server端分别进行比较的。
  • Cloud OS与Web OS。在云计算概念流行以前,人们更多的是谈论Web OS。现在人们谈论的更多的是云计算,因此Cloud OS和Web OS的概念就又混淆了。可能不少人认为是一个东西,可是从我个方面的得到的信息来看,我们基本上可以用client/server端来区分他们。Cloud OS是server端的,比如微软的windows azure就号称Cloud OS。而Web OS则是客户端的,比如市面上的各种号称Web OS的网站,比如Facebook,比如Google的Chrome Browser,Chrome OS等等。目前来讲,Web OS还没有明确的概念,所有产品基本都是试验性质的,但是Web OS在client端还是比较明确的。
  • 对于云来讲,不同的人关心的重点不同。网络服务提供商,开发人员关心的是server端的cloud OS,而用户关心的是client端的web os。因此,对于大多数人都作为普通用户来讲,就没有太大必要去注意server端的那些新技术,新术语了,也不要被他们的出现搞糊涂了。

下面的表格列出了微软和Google公司云计算基础技术和产品,随后有我个人的讲解。

Server/client Technique Google Microsoft
Server Cloud OS App Engine Windows Azure
Client Web OS Chrome OS Live Mesh
Browser Chrome IE
RIA Javascript+V8 Silverlight
Offline Gears Live Mesh/Silverlight
OOB Chrome shortcuts Live Mesh/Silverlight

 

  • Cloud OS:由于Google App Engine只支持Python和Java,而我不想学Python也不喜欢Java,所以没有任何体验。而Windows Azure则体现出了微软强大的实力。从下至上,除了hardware则清一色使用微软自己的产品。OS: Server2008, VM: Hyper-V, Host: IIS, Dev tools: Visual Studio。从Azure来看,微软在云上开发了一套开发平台,从而改变了网络服务提供商的经营和开发模式。他们不再需要买自己的服务器,而转为租用微软的虚拟机,开发则是通过微软提供的接口开发在IIS上的web服务。重点是他们不需要考虑sacalability,而是按计算的需要和使用情况向微软付钱,就好比我们现在买电一样。而云计算的提供商则相当于现在的电力公司一样,使得计算变成一种资源去交易。由于我不是搞这行的,所以,我更多的注意力放在了client端。
  • RIA:要想建立client端的Web OS,则需要依赖于rich internet application。这方面的技术主要有三种,Adobe的Flash,微软的Silverlight以及Google推崇的AJAX。以前用过一些Web OS都是建立在Flash上, 我就感觉很别扭。一是因为既然是OS还需要依赖Flash?二是因为点右键总是有个Adobe的影子,而且不能customize。其实也正是因为这个原因使得Google在很早就放弃使用Flash了,而进行了更灵活的Javascript的大力支持。微软的Silverlight则正像是Flash的翻版,到现在为止我基本上没看到过什么基于Silverlight的应用,好像主要是播放视频。而Google自己基于javascript的Gmail, reader, 以及最近公布的集大成的Ajax的顶尖作品Google Wave等,都让我在RIA这个方向上很支持Google。
  • Browser:前边说过Google大力推行Javascript,而运行速度慢是Javascript的一个致命的问题,使得在和Flash, Silverlight的竞争中处于劣势。基于这个原因,Google推出了自己的Browser Chrome,并且内嵌了V8的JS的引擎,使得javascript的运行效率大大提高,从而可以用javascript开发出更高级的界面。比如,我看过JS实现的一些SD,动画的demo,都还是比较出色。而Chrome又大力支持HTML5,其中重要的一点是支持了视频,从而使得Flash和Silverlight的竞争力进一步降低。而且,javascript的好处在于浏览器本身就支持,不用像Flash, Silverlight还需要单独安装。进一步说,Chrome对JS的优化直接推动了Firefox和IE对JS的优化,而JS的运行效率也成为了浏览器的最重要的指标之一,使得Javascript的前景更加的光明。
  • Web OS:现在已经比较明确的看出来了Google的Web OS就是即将公开源代码的Chrome OS,而对于普通用户来讲,Chrome OS和Chrome Browser基本就是一个东西。因为普通用户对那块Linux内核是透明的,也是不在乎的。所以,我们只要看Chrome Browser的发展,就应该能推断出Chrome OS大概的样子。Chrome OS最大的焦点在于替换掉Windows,而Chrome Browser将要增加的同步功能,使得Google的Web OS更加完善,而谣传了许久的GDrive如果能够稍后推出的话,则Google的Web OS将基本成形。微软目前并没有一个所谓的Web OS,而最像Web OS的产品则是Live Mesh。Live Mesh我以前已经谈论过了,就不再重复了,简单来讲我很失望。
  • Offline:云计算的一个重大问题就是离线怎么办?这也是很多人质疑云计算的一个主要原因。Google的解决方案是Google Gears, 它内嵌于Chrome里,也可以安装到其他浏览器上。Google Gears使得用户在离线的时候还可以访问,操作数据。微软的主要解决方案是Mesh, 通过同步各种设备。最新的Silverlight也加入了一定的离线支持。
  • OOB (Out of Browser): 在浏览器中运行的Web应用界面与传统桌面软件比起来总是死板,不够灵活的。因此,人们就产生了需求,想在浏览器之外运行web应用。Adobe的Air可以实现这个功能,而Google的解决方案是Chrome里的shortcuts。给Web应用建立了shortcuts之后,就可以按照人们习惯的方式启动这个应用,而界面也很传统软件非常接近了。微软的解决方案则是Mesh, 或者最新的Silverlight OOB功能。

综上所述,我们可以清楚地看到,Google的云技术的client端的核心就是Chrome浏览器,所有相关的技术都嵌入到了浏览器中,甚至操作系统的内核也算嵌到了浏览器中,这也是为什么Google为它Browser和OS起了一个同样的名字。所以,我们可以说Google Chrome未来就是一个Web OS。而反观微软,则是把这些feature分散在了几个不同的产品中:Windows, IE, Silverlight, Live Mesh,并没有一个统一的解决方案。因此,在云计算的战略上,还是感觉Google比微软看的更高更远一些。

4 août

我谈谈微软园区(Microsoft Campus) (2)- Commons与巴萨

近两年微软大兴土木建成了奢侈豪华的Commons mall,奢侈程度令人咂舌。这么说吧,在西雅图这片没见过能相提并论的地方。今天又听说巴萨要来微软参观,不过搞得很神秘,大家猜测可能是参观Commons,以及在Commons新建的球场踢球。在Commons等候了半个小时不见踪影,拍了一些照片,包括visitor center和company store。然后赶回main campus去寻找,终于发现在一个我从没进去过,也不知道能不能进去的,也从来没敢进去过的独一无二的builing外面发现了几辆大巴。和大家在长时间等待以后,遗憾的是由于他们行走太快,以及人太多,并没有照到那几个球星 (除了亨利的一个远景),而录像也按错了,只拍到了最后一部分。其中见到了伊布,亨利,没有见到梅西,可能他个子太矮了,不显眼。大家看照片吧。

 

视频里有亨利:http://www.facebook.com/v/139495017781

从WebQQ谈云计算

我是一个非常讨厌QQ的人,但是由于国内的亲戚朋友大多都是用QQ,所以很多时候迫不得已还是要狠下心来安装一下QQ。有的时候急需要联系人,在单位就麻烦了,安装了QQ也用不了,因为被封掉了。两天前没事干依稀记得听到过有个WebQQ,所以就抱着尝试的心态去试了试,发现它很优秀,它正是我心目中的软件即服务的形态。因此,我也想从WebQQ来再一次谈谈云计算。

一谈到云计算争论总是很多,而我发现很多时候跟别人谈论的时候并没有太多交集。这是因为云计算的概念目前阶段并不明确,云计算的发展也只是开始,远不够成熟。而我也只是从个人的一些体会去谈论,由于接触的产品有限,并没有一个全局观。但是,我想把云计算简单划分一下,就是server端和client端。现在技术的发展在两端的表现形式差别太大,因此就更加使人迷惑。在server端的概念更注重云计算,就是Google说的像买电一样买计算。这也是最赚钱的一部分,所以各大公司都在搞自己的云计算平台,比如微软的Windows Azure, Google的App Engine, 以及亚马逊的EC2。而client端,也就是普通用户亲身体验的则是软件即服务的形态。有些公司是准备用web应用代替桌面应用,比如Web2.0掀起的Ajax,这一点是Google的赌注所在 (Ajax, V8, Chrome, Chrome OS), Adobe的flash,而微软则是准备在桌面和web应用进行一个统一,比如WPF,Silverlight,Live Mesh。而我今天谈的WebQQ则是在client端的讨论。

对于我个人来讲是厌倦了桌面软件,因此安装好操作系统以后则是能不装软件尽量不装软件。比如QQ软件,我是在极度无聊的时候才会安装消磨会儿时间而已。我是真的希望哪天能够只安装操作系统,然后开机,登陆,就能享用各式各样的软件了。而这在软件即服务的概念下变得可能了。我想谈谈几个WebQQ的优点,基本上这几个优点也是软件即服务的几个卖点。

  1. 没有广告。这个跟云计算优点没啥关系,而且肯定也是暂时的,我提出它来是因为现阶段确实是个使用WebQQ的一大理由。以后有广告了,用浏览器的广告屏蔽功能也能搞定吧?
  2. 没有安装。这个就不用多说了,对于极度厌恶安装软件的我来说,没有什么优点比这个来的更实际了。
  3. 没有更新。更新都在server端进行了,不用整天看到QQ update搞得UAC弹出来的烦人情景了。
  4. 没有病毒扫描。因为不用安装,也就不存在感染病毒的情况,也就不用看到QQ扫描我机器了。
  5. 不怕防火墙。由于走的是http/https协议,在单位也能随时用QQ了。

以上几点,除了广告以外,也基本上是云计算给终端用户带来的好处了。由于我是用Google Chrome浏览器的,因此我用到了“create application shortcuts”,创建了一个快捷图标。这样的话,启动方式以及界面跟传统软件基本一致。(在Google Chrome的概念里,看得出来他们认为一个网页就可以看作一个application,而Chrome就可以认为是WebOS了,这也是为什么他们要推出Chrome OS,用web app+Chrome来替换desktop app+Windows了)

3 août

微软将要大转型

在微软与Google的大战中,我提过微软占有优势地位,但Google占有方向的优势。也就是说各方面的实力都是微软要高Google一头,但是在两个公司的理念上,我推崇Google。Google讲的是云计算,软件即服务,而微软由于软件霸主的地位使得微软不能放弃传统软件而提出了Software+Service的口号。我其实并不赞成这个口号,以前也批判过一些,而微软在这个口号下也没做出什么优秀的产品出来。倒是Google在云计算上做的风生水起。

最近微软的一些变化让人感到很惊喜,首先就是Steve Ballmer竟然零代价搞定了Yahoo,简直是让我对他刮目相看。然后就是战略的转变让我重新看到了希望。微软每一年度开始,CEO都会发表下一年度的公司策略,而software+service则是去年的重点。我统计了一下去年与今年的变化,列出了主要的区别如下,

  2008 2009
Software 出现9次 出现3次
Cloud 出现2次 出现6次
Strategy Embrace software plus services Embrace the cloud across all of our businesses

 

Software的出现频率下降了三分之二,而cloud的出现频率则增长了两倍。可见微软这两年正在经历Software->Software plus Services->Cloud的一个重大历史转变。希望2010年微软能够推出一些重量级的产品出来与Google更好地进行竞争。

28 juillet

买房子的considerations

今年房子降了不少,因此开始做功课研究一下买房的问题。其实早在两年前就开始看房子了,那时候房子差不多在顶上,我基本没看single house,主要集中在了condo上,因为当时最差的condo基本也将近30万了。降价之后可不得了,以前看上的一个 remodeled condo 是35万,现在降到了23万,以前一个崭新的townhouse是60多万,现在只要40万了。而single house很多也降到了30多万了,因此自然就不会考虑condo和townhouse而只考虑single house。最近看了不少open house,稍微有了一点感觉,今天算做个小总结吧。我认为选房子需要考虑的几个主要问题:

  1. 学区:除非你没有孩子,而且以后不打算要孩子,或者你孩子已经大了,学区无疑是选房子的第一要素。通常来讲,学区好的地方一定是富人区,穷人住的地方学区一定差。而且,在好学区通常只有single house,没有condo和townhouse,或有少量townhouse,而condo群集的地方一定学区不好。所以,在好学区买房子就意味着多花钱。
  2. 新旧程度:本来我是不太在乎这一点,但是发现大家还是更倾向于买新房子。选房子很重要的一点就是等你卖的时候一定要好卖,因此买个新一些的房子就可以在自己不得以卖房子的时候更容易一些,当然也意味着要多花钱。但是新房子普遍yard较小,甚至几乎没有yard,而老房子的大yard还是非常享受的,尤其是对小孩来说。但是照顾花草的工作还是蛮累人的,我人比较懒,因此还是倾向于小院子。
  3. 离公司的距离:以前这个是我的第二考虑要素,因为单位离家近的确是特别方便。比如我现在离单位车程5-10分钟,因此可以回家吃午饭,或者随时可以单位家里来回串,而有些人的房子离单位比较远,加上traffic,每天上下班两个小时就很没意思了。
  4. Parks and shopping:房子周围有park对小孩非常重要。每天下午下班回家可以带小孩去park玩,而且很多park在湖边,可以去游泳。如果周围没有park,生活质量感觉会下降不少。shopping相对次要,因为一般每周一次大采购就可以了,路程远点也不太要紧,当然如果附近有很多shopping就更方便了,缺什么可以随时去买。

综上所述,如果以上条件都满足的话,那房子就会好贵好贵了,根本买不起。如果不考虑学区的话,2-4点还是很容易就可以满足的。而由于为了孩子一定要上好学校,就只能选择一个学区好,比较新的房子,离公司远一些,没什么park和shopping的房子,或者学区好,旧房子,离公司近一些,park,shopping方便的。我倾向于第二种,但是由于现今经济不好,工作不稳定,随时可能遇到意外情况需要卖房,因此前一种房子也许更明智一些。所以很矛盾 :(

微软终于做了个正确决定

Windows 7 取消了对上网本只可运行三个应用程序的限制。我一个多月前就在Twitter质疑这个限制。

image

image

Code Review, Debugging, Windows Internals, WDM小结 (一)

学完Silverlight之后,最近两三个星期集中在了code review, debugging, 以及Windows Internals和WDM的学习上。现在是时候做个小结了。

逛了一些关于debug,windows内核,驱动等的论坛,发现大家主要集中在了加密/解密,逆向,系统漏洞和反病毒等等专业领域,和我所学习他们的目的并不相同。所以,文章和我所关注的知识点也不很match。对于我来说,我学习他们的主要目的集中在了Debug和Security Test上。在学习的过程中有种知识零散的感觉,昨晚才把他们互相联系起来,因此也就有个立体的感觉(请看下图)。下面想简单地谈谈。

首先,Debug是一项软件人员应该掌握的既基本,又高级的技能。它并不属于开发人员的专利,测试人员拥有这项技能也如虎添翼。说它基本是因为在你大学学习计算机语言的时候都会或多或少用到debug的技术,是编程中一项必用的技术。说它高级是因为很多疑难杂症都需要高超的debug能力才能去解决,debug的能力很大程度上体现了一个人的软件开发测试的水平。大家debug的目的各不相同,而对于测试人员来说就是在发现一个bug的时候能够通过debug找到root cause。在debug的学习与实践中,我认为以下知识非常重要:

  1. Debugging tools: 微软提供了一套tools,而我们最常用的就是windbg了。windbg使用起来还不算麻烦,学习起来也不难,但是各项命令实在是太多了,需要时间和经验去慢慢积累。
  2. Code review:或者你做专门的code review,或者你在debug的时候做code review。总之,你对代码不熟悉是很难进行debug的。因此,code review也是debug中非常重要的一个方面,你应该熟悉你所测试产品的代码。很多时候,你甚至不用去debug,想想代码流程,或者简单地review一下就能定位bug。而对于code review方面,你需要了解Win32 API (User mode code),以及WDM,WDF (driver)。
  3. Assembly: 如果你没有源代码的访问权利,你就需要逆向的能力了,这个就对汇编的要求很高了。但是,一般来说我们都是测试自己的产品,理所当然具有源代码的访问权利。但是,即使这样,我们仍然在某些时候需要汇编的知识去debug,比如有时windbg的命令不能正确显示结果,或者调试optimized code的时候。不过这些要求不会太高,一般来讲你学习几个小时的汇编就应该够用了。
  4. Windows internals:其实Windows internals是里边最难学的,但又是比较基础的东西。比如,windbg的很多命令的使用需要你了解内核的工作原理及数据结构。而你在调试driver的时候当然需要内核的很多知识。你如果把内核学通了,其他知识都不成什么问题了,所以对内核的掌握程度也直接决定了你的debug水平。这本书我从开始看断断续续的也快三年了,最近才有了立体的感觉,一想能知道这本书都说了些什么,虽然我不确定我到底看懂了多少,但是基本上在debug需要的时候我能够直接找到相应的章节去看,也应该可以短时间内看懂。由于先看了这本书,所以在看WDM的时候就感觉很简单了,虽然作者说话很罗嗦,但是不用太多的推敲都能很快理解。有种感觉,好象是精通了C/C++以后再去学习其他语言的时候的那种感觉。

image

28 mai

你是不是要找病(Bing) ?

在Google和Yahoo中搜索Bing, 出现提示"你是不是要找病"。

image

 

 

 

 

 

 

 

 

image

微软与Google的战争已败

这是Kumo发布的时候我写的文章,现在Bing发布了,我已经无语了。微软真是病(bing)的不轻呀。

昨天听到不少微软的内部人士说喜欢Live search,不喜欢Google, 我也赞同。这两年Live Search还是有了明显的进步,和Google的差距也越来越小,虽说市场份额没啥变化,可是搜索质量跟Google相差并不大,而界面感觉更胜一筹。一般来说,英文搜索Live Search基本还是够用了。很多次我发现Live Search搜不到,去了Google也照样搜不到。我一直对微软还是抱很大期望的,有的时候也批评一下Google,而有些人就问我是否真正使用过Google。前一段时间认真研究了一下Google的各项服务,结果发现微软基本不可能打败Google了。

首先,微软对Google的战争应该是全方位的,search并不是全部,只能是重点。由于Google是靠Search起家,而直到现在的盈利也基本是靠Search,给人一种印象就是微软只要打败Search就打败Google了。我一直是这样认为,相信到现在微软的领导层也是这样认为,因此在Search上投入大量的资金与期望。可是我在使用了Google的各项服务之后,发现微软是全方位的落后,只是把Search作为突破口击败Google在现实上是很难行的通的。目前微软的IM虽然占有绝对的优势,但是由于IM是客户端,对于Search的份额几乎起不到任何的影响,并且IM本身也不赚钱,看看Skype都成了Ebay的鸡肋了,所以这个优势对微软和Google的战争没太大影响力。另一方面,Hotmail对比Gmail目前还具有一定的优势,可是Gmail发展迅速,Hotmail客户流失严重,很可能在短期就被超过。我就想不明白,微软Search肯花那么多钱,干嘛非得在Hotmail上放那么大一个烦人的广告呢?这能挣几个钱呢?本来用户跑的就厉害,现在开放了POP3,使得用户可以把Hotmail导入到Gmail中去,跑得会更厉害。反正我用了Gmail以后发觉确实比Hotmail好用多了。Skydrive虽说Google还没有推出Gdrive,因此是微软的一个特有产品,可是发展也太慢了,跟桌面的整合没有,跟其他服务的整合没有,并且还跟很多类似的产品共存,搞得用户晕头转向不知道该用哪个。难道非得Gdrive推出来以后微软才知道进步?其他的产品就完全是Google占有绝对优势了。Blog上blogger比Live Space要强多了,连微软自己的minimsft就在blogger上。Photo上,picasaweb比Live Photos也强多了,很多msn的用户都是通过它来共享照片,视频上Youtube绝对统治地位,微软的soapbox还有人记得吗?Google reader微软没有,iGoogle比live个性化主页也强很多吧?后者已经很久没有更新过了。Google的AdSense, Webmaster tools, Analytics 都非常好用,而微软则刚刚关闭了自己的Analytics。Google的blog search微软没有,Google Docs微软也只是有个浏览的功能,Google groups, Google calendar, 微软也是最近才开发好,已经太晚了。还不只这些,Google还有很多小服务微软没有,而且Google还在不断推出或购买各种创新的服务,比如最近announce的Google Voice,又引起来一片关注。想想看,大家一个个用着Gmail, Google Docs,Picasweb,Youtube,Blogger,Google reader等等,你微软Live search做的再好,我为什么要去用你呢?这也解释了我一直想不明白的问题,为什么Live Search越做越好可是份额却没有提高,即使白给用户钱。这就好比大家用着Windows上一些列的应用程序,Linux没法跟微软竞争一样,同样的道理,大家都在用着Google的服务,Live Search怎么跟Google竞争呢?

其次,微软的Live战略处在了非常迷惘的状态。 最新的Messenger我就不想提来,总之一片反对之声,我也早习惯了逆来顺受了。Live的Wave3到底做了点什么东西呢?搞了半天无非就是模仿Facebook,可是连Facebook自己都要模仿Twitter。这下可好,Twitter牵着Facebook的鼻子走,而Facebook牵着微软的鼻子走。微软搞得都不是二手货了,而是三手货了。这次之后,我对微软的Live创新能力彻底地失望了,我相信微软的Live根本不可能满足我个人的需求。再说Live Search,经过了这两年的折腾也有点不知道该往哪里走了,搞来搞去就搞出个Kumo出来。我个人对这个改名非常的反感,虽然这也没有最后定。首先,本来就是换汤不换药,除了名字和界面改动之外,我没有觉得有什么太大不同。虽然加了一点新的东西,这些我现在也不想讨论,毕竟没有公开。其次,Kumo是什么?说是日文的蜘蛛和网的意思。我就不明白你搞个日文名干嘛?太让我莫名其妙。总之,我觉得Kumo没什么戏。

再次,Live Search非常地保守。本来保守也不一定是坏事,但是要想击败Google,不具备大胆创新的精神怎么成呢?下面就是Live Search对最新的实时搜索技术的态度:

类似于search.twitter.com“实时搜索”(Real Time Search)服务可能会开始流行起来,但是有一个产品不会部署该服务:微软即将发布的搜索引擎Kumo。微软搜索引擎部门主管Stefan Weitz称,Kumo团队正在考虑进行小部分调整,而类似于实时搜索功能不会出现在Kumo中,它还需要一个进化的过程。

Stefan还称:“微软不想因为作太大的改变而吓跑用户,而搜索引擎的界面在12年里也没有太大改变。”那么Kumo还带来什么新的特性呢?微软计划使搜索结果更加人性化,简化搜索过程,专注于用户的“关键任务”比如旅行,地方化信息等。

综上所述,我认为微软与Google的战争已败。(我个人很喜欢韩信,韩信在鸿门宴上就料定项羽没戏,我这次也大胆断言一下)

24 mai

《Windows Internals》学习心得(2)- Windows Architecture

Windows

  • kernel32.dll, advapi32.dll: to provide Windows APIs
  • ntdll.dll: to switch from user mode to kernel mode
  • ntoskrnl.exe and drivers: major part of Windows OS
  • hal.dll: hardware abstraction layer

Ntoskrnl.exe and drivers

  • executive
  • kernel: KeXXX

Executive

  • system services: NTXXX, ZWXXX
  • executive support routines: ExXXX
  • executive components and relevant services

Executive components and relevant services

  • Object manager: ObXXX
  • Configuration manager: CmXXX
  • Process and thread manager: PsXXX
  • Memory manager: MmXXX
  • IO manager: IoXXX
  • P&P manager: PpXXX
  • Power manager: PoXXX
  • Cache manager: CcXXX
  • Security reference monitor: SeXXX

Drivers

  • ntfs.sys
  • volmgr.sys
  • ndis.sys

xikug谈黑盒,灰盒,白盒,逆向


早就想写点什么,自己都不知道一天在瞎忙什么,一直到最近才开始动手。。。我想通过这个乱谈系列跟大家分享一些心得。我打算在这个系列文章中讲点方法与思路,当然,很多方法并不是我的原创,只是我用这些方法和思路解决了我的实际问题。由于本人水平有限,很多说法只是我个人的理解,然后用我自己的语言表达出来,可能并不专业,所以在这里不负责任的乱谈一下,欢迎大家拍砖。
什么是代码逆向
代码逆向即是在没有源代码的情况下,对目标程序的行为、数据流、及编译器生成的代码进行分析,通过分析我们可以了解、发现程序的功能、流程、规则、及技术实现细节等,通过分析我们能对其进行优化、功能增强、漏洞填补、甚至还原成源代码等。这个分析过程我们可以称作逆向分析或逆向工程,简称逆向。
对我们个人而言或许我们能够从逆向分析的过程得到的最大好处就是学习到优秀程序的设计思想、及技术实现细节。
当今,逆向分析技术在很多地方都得到了应用,典型应用包括恶意软件分析、漏洞挖掘、BUG定位、技术探秘等。
有人可能会说逆向太无耻了,自己不会写就偷别人的代码。。。我就不相信说这话的人什么都会,我就不信他没有分析过别人的东西,学习过别人的东西,我只能说他是无知的。。。殊不知逆向是一个探索未知的方法,是一种学习态度,是代表不屈服于困难的精神。如果没有逆向当前的很多科学进步不了这么快,也可能不能取得进步,科学研究就是探索未知,把我们未知的东西进行分析研究变成已知,不光是软件领域有逆向工程的应用,其他领域如:基因重组、化工、制药、电子、建筑、航空、军事等领域也存在着他们各自的逆向工程应用,逆向工程帮助科研人员把未知的东西进行分解、研究、组合、改进等,甚至创造新的东西出来等,科学就是这样一点点进步的。
通过逆向得到的好处是显而易见的,然而任何技术都是把双刃剑,逆向分析技术也不例外。可能被人用于学习、解决技术问题或做有益于软件安全的事,也可能被人用于搞破坏。
逆向方法
白盒分析
白盒分析就是从代码级别上(可能是反汇编代码、反编译的伪代码或源代码),通过动态调试或静态反汇编分析和理解程序的功能、逻辑,找到程序的安全问题等。
黑盒分析
黑盒分析是指从程序的外部,通过观察程序运行时候的行为,规则等来猜测和断定程序可能的实现方法,是否有存在脆弱点等。
灰盒分析
灰盒分析通常需要借助一些专有工具(可能需要自己编写),如api监视工具,陷阱工具,内存比较工具,文件监视工具等对目标程序进行监控,看它发生了什么操作,调用了哪些api,产生了哪些结果,在系统哪些地方安插了HOOK或过滤等,以此来猜测和断定程序可能的实现细节。
目前越来越多的程序加了VM或进行了代码扭曲,用白盒分析此类程序可能会花很大力气也找不到突破口,而黑盒和灰盒分析往往对这类程序可能有意想不到的效果。
逆向手段
动态调试
通过调试器对目标程序进行追踪分析,能够清楚的了解到程序运行起来后内部的状态,运算结果等信息。
静态反汇编/反编译分析
使用反汇编器或反编译器把目标程序变为可读的汇编代码或伪代码,然后分析程序的结构,流程,逻辑等。
如何学习
逆向并不是想像中那么难,但也不是想像中的那么简单,真正困难的是如何有效的运行这些方法和手段来更快、更好的达到我们的目的,这需要累积大量的程序设计经验和逆向经验。
通常我们进行逆向的时候希望达到的目的大致可分为以下几种:
技术探秘/代码还原
软件漏洞挖掘
软件Bug定位
软件行为/规则分析
解除软件的使用限制
进行辅助程序的开发
我们要达到的目的不同,逆向时采用的方法和手段的“细腻”程度也不会相同,譬如我们对一个win32平台下的内核驱动进行“技术探秘/代码还原”的时候可能会把白盒、黑盒和灰盒所有的方法和手段都用上,每段汇编代码我们都必须看懂,代码实现了什么功能,跟另一段代码有什么关系,理解整个代码的架构和思想等;而我们在进行“软件行为/规则分析”的时候可能只需用上黑盒或灰盒分析法就够了,知道按下这个按钮后读写了哪些文件,哪些注册表项,调用了哪些api等等。分析过程中有时候我们只需静态反汇编看一下就可以了,有时候我们可能还需要动态调试一下,总之没有固定的套路,一切视情况而定。
扎实的编程基础是学好逆向的关键,基础打好了学什么都快。程序的基础就是算法和数据结构,语言只是一个实现的工具,绝大多数语言都是相通的,我们只要掌握一门,以后如果需要学习其他语言的话上手就会很快了,基础知识我们重点需要掌握以下内容:
1.至少一门高级程序设计语言,推荐C语言或Pascal
2.x86汇编语言
3.常用算法和数据结构
软件一般都是在特定平台下运行的,如Windows平台,Linux平台,WinCE平台,Java平台,Symbian平台,Plam平台等等。。。针对特定平台下的软件逆向,需要掌握特定平台下程序设计的相关知识,包括其SDK,进程管理,内存管理,文件系统等。这些东西不必全部精通,但要有个大致的了解,常用Api要知道,有特定平台下的程序设计经验最佳,遇到问题知道在哪里能找到自己想要的资料就够了。逆向的过程本身就是一个学习的过程,因此我们可以在逆向的过程中补充自己相关的知识,这样学习的效果是最佳的。(由于本人所接触的面比较窄,接触得最多的就是x86 Windows平台下的原生程序逆向,因此本系列文章中的内容除非特别说明都是指x86的Windows平台下原生程序和代码)
学习逆向的最好方式就是动手实践,在实践中有针对性的学习。通常来说我们逆向时所面临的东西对我们来说是未知的或者是可能知道但不确定的,如果是已知的就没必要再去逆向了。针对性的学习就是在自己逆向的时候缺什么知识就补什么知识,日积月累过后我们的收获是相当可观的,不光是经验值的增长,还有知识面的增长和知识深度的增长。
编程的经验对于我们实践逆向时也很重要,例如进行“漏洞挖掘”的时候我们可能会以程序设计者的角色进行思考,程序在哪些地方需要进行防范,哪些地方可能会出现漏洞等等,如果我们有足够的经验的话,可以很快定位到相关的代码部分对其进行分析,看是否存在可能的漏洞。又如在进行“技术探秘/代码还原”的时候,由于现在的程序规模越来越大,我们不可能每条指令,每段代码都去看,都去逆向,假如一个1M的程序需要这样做的话,光时间成本上来说成本都是相当高的,因此我们需要快速定位关键代码段,而丰富的编程经验有助于我们做到这一点。拓宽自己的编程知识面、积累编程经验跟积累逆向经验同样重要。丰富的编程经验能让我们事半功倍。
另外在进行代码还原时我们最好能用原始程序的实现语言进行还原,这是为了避免麻烦,因为现代的编程语言通常都有自己的Framework,提供各种各样的类库,他们功能各异,互不兼容,如一个VCL的程序我们硬要用MFC对其还原,VCL的某一非常复杂的机制或功能在MFC中可能没有,而自己如果在MFC中实现的话工作量是相当庞大的,这时的结果可能就会是事倍功半了。因此我建议在代码还原时最好使用原语言进行,原来是C的就用C,原来是Delphi的就用Delphi,原来是Python的就用Python。。。
逆向工程时常具有“四两拔千斤”的功效,我也不太会表述,等你有足够的实践之后大概才能体会到,这个就只能意会不能言传了
学习资源
上面说了那么多,是时候介绍一些学习资源的时候了,这些资源都是比较基本的,可说是学习阶段必备的,希望在大家学习和实践的过程中能帮到大家。

《Windows程序设计(第5版)》 – Windows平台下程序设计的经验教程。URL - http://www.china-pub.com/2382
《Windows核心编程》 – 又是一本经验的书,可以帮助你把Windows下的编程技术提升一个层次。 URL - http://www.china-pub.com/131
《深入解析Windows操作系统(第4版)》 – 这本书是关于Windows内部机理核心的权威之作。这本书对提高你的逆向水平也是大大有帮助的,当然,前提是在你看懂之后。 URL - http://www.china-pub.com/32775
《加密与解密》 – 不错的入门书籍,快出第三版了,http://www.china-pub.com/12210
网站
www.rootkit.com – 很多关于系统安全,系统内核方面的资料和代码
www.codeproject.com – 很多程序设计的代码和文章
msdn.microsoft.com – 包含最新的微软平台下的开发资料
论坛
bbs.pediy.com - 看雪论坛,国内最大的加解密论坛,已经向软件安全转型,上面汇集了国内大批高手。
www.unpack.cn - 一蓑烟雨,国内最专业的脱壳论坛,关注面也很广,除了脱壳外还有汉化、软件安全、木马病毒、编程、游戏、文学、音乐、艺术等,上面的高手也不少。
bbs.driverdevelop.com - 驱网论坛,驱动开发的论坛,高手不少,但是发言的比较少,可以去逛逛。
forum.sysinternals.com – Sysinternals,很多系统方面的资料,不少高手在上面发言。
www.debugman.com - 第8个男人,在下创建的论坛,旨在为志趣相投的朋友提供一个交流平台,目前关注方向为程序设计、逆向、代码安全和系统底层等。
工具
这里列出的工具只是很少一部分,对工具的选用,我的观点是哪个随手就用哪个。
OllyDbg – 调试器,ring3下的调试器,上手快,功能强大,有很多插件。
SoftIce – 调试器,ring0级调试器,当然ring3程序也是可以调的,功能强大,但已经不更新了,不支持vista等较新的操作系统。
WinDbg – 调试器,MS自家的调试器,就不多介绍了,两个字 - 推荐。
IDA – 反汇编器,最强大的静态反汇编分析工具。
LordPE – PE工具,可编辑PE文件等。
PEiD – PE工具,可识别PE文件的格式信息,如用什么编译器编译的,是不是被什么壳处理过了等。
FileMon – 文件监视工具,可监视系统或程序对哪些文件做了什么操作。
RegMon – 注册表监视工具,可监视系统或程序对哪些注册表项做了什么操作。
SSM – HIPS,这个工具有时候可以给逆向带来很多方便,如抓取某个文件,禁止访问某个注册表项,盒灰分析等。

23 mai

微软的混混们

大公司总是会有这样那样的问题。这其中一个问题就是时间长了积攒了一些混日子的人,由于通常大公司都很稳定,不裁员,所以很多大公司被人们称为了养老院,比如微软。本人见过以下几类混混。

  1. A在微软已经工作了10年,典型的特点是神龙见首不见尾,长期Office的门紧闭,使人不知人是否在内。经常遇到他老板在门口敲门等待10分钟左右,最后确定人确实不在的场面。
  2. B在微软已经工作了9年,典型的特点是任何工作到了他那里就石沉大海。当你问他进展情况的时候,他的回答总是“I’m working on it”。本来几天就能搞定的事情,你总是会发现在他那里几个月以后还是active的状态。
  3. C在微软已经工作了5年,典型的特点是不回email,不参加discussion。一直奇怪分给他的任务他到底做了什么,做得如何。由于对他没有信心,老板只能叮嘱其他人尽量也要去cover他那一块。结果一年之后,他跟大家一讨论,发现他做的东西非常少,别人做的非常多,他还就顺势把这块任务推给了别人。
  4. D在微软是个新兵,工作刚满两年。可是不知为何从刚参加工作开始就混。第一年正赶上和以上某君交接工作,正好应了中国一句老话“一个和尚有水喝,两个和尚没水喝”的道理。任何事情到了他们那里总没人去care,两人互相推给对方。光工作交接就用了一年的时候。第二年终于算是全部负责了,可从来都是maintain 现有的工作,从没想过如何优化,扩展。Test failures从来不会主动去triage,一定要老板push几次才行。Test spec上明明有的test case就是发现不了bug。
  5. E在微软是个contractor,更是一个老油条。contract的工作一般一年。一年之后工作交接,你发现他几乎什么都没有做。Test spec, test code, automation job 等等几乎全部都是copy别人的。自己加上的test case自己都不明白为什么要有这个case和怎么去test。典型的回答是“This was written by XXX, I don’t know”, “I never run this test”, “This has been covered by XXX” (but they haven’t, if you ask XXX"), “Let me check and get back to you”, “All tests on this spec are manual”。从他口中能得到的信息量几乎为零,因此别人只能推到重来。

以上几人已经有人由于长期坚持不得不离开公司了,剩下的在team里的比例还是达到了1/3, 也就是33%。这也是我为什么说微软裁人太少的原因,可惜的是微软裁人大多并不是按照Performance进行的,混得人还是在混,很多Performance好的却被裁。唉,这个世界总是不公平的。

高级测试人才应该掌握的六类知识

经常遇到测试人员不知道学什么,或者学一个东西不知道有没有用。其实我也经常会遇到类似的问题,因此我自己也想把我学到的知识归归类。我想只要是这几类的知识,你学习都没什么错,总是会有用的。

  1. 产品知识:对于你所测试的产品,你一定要非常熟悉。小到你所测试的模块,大到整个产品的架构,内部实现,代码,等等。
  2. 测试知识:黑盒测试,白盒测试,手工测试,自动化测试,性能测试,安全测试等等。
  3. 开发知识:编程,数据结构,算法,调试等等。
  4. 专业知识:以上2,3是基本的知识,你还应该精通一些你从事的更专的技术知识。比如,如果你的产品是基于.net的,你应该精通.net, 或者类似的J2ee等。(例如这方面我应该掌握的Win32系统编程,Windows内核,WDM等等)
  5. 领域知识:你应该精通你所工作的领域的知识,比如手机领域,数据库领域等等。
  6. 行业知识:你要对计算机行业的整体状态,新技术,动态,发展趋势有一个明确认识。(比如我除了自己从事的领域还关注Web2.0,云计算等等)

要记住,你首先是一个计算机人才,其次是一个软件人才,再次是一个测试人才,最后你才是一个SQAA, SQAE, STE, SDET等等。要想做一个高级测试人才,这一条线的知识都需要掌握。