2015-01-28

续写尘封的记忆

也许是昨天中午喝的two-shot cappuccino起了作用,晚上居然睡不着了。突然心血来潮翻阅起了过去的博客,更是感慨万分,心情不能平静。若不写下点什么,可能一夜都睡不着了吧。

距离最近一篇博文,一晃已经七八年了。这段时间发生了很多事情,如果不留下些什么,这些记忆就慢慢地模糊了。如今读当年的文章有了一种距离感——当初我怎么会这般这般。想到这些年来自己的变化,心中涌起了一股强烈的感动,几乎要哭。若不把记忆如当年那样续写下去,以后恐怕难有这样的感动了吧。

可能还要把这段空档期补全一下,但又有很多话想说。夜已深,先列个提纲,以后慢慢补上:
从实习到工作
从中国到美国
从恋爱到婚姻
从无神到有神

虽然博客不再像当年那样热门,甚至有些萧条。space和reader都死了。但我带着一点点怀旧情节的直觉说,这还是承载我记忆的最好平台。但愿blogger活得久些。

2008-05-02

无线生活,Nokia 6500c

买了新手机。一直都是用老土手机的我,第一次走在了时代的前沿,在商城还没有来得及撤下6500c的时候,忍不住将它收入囊中。再次申请了5元GPRS套餐,惊奇地发现现在已经不再区分cmwap和cmnet流量。现在终于可以享用发达的无限网络给我带来的便捷了(都是钱堆出来的)。

昨天花了些时间配置好了网络,图了省事,直接用了cmnet。随后下载了很多软件,如:

正当我在犹豫要不要下载GMail客户端的时候,却失望地发现客户端只支持普通的GMail,而不支持Hosted GMail。而对我来说,个人的GMail并没有什么特别重要的邮件,经常需要收发的是公司内部的GMail。

正当我一筹莫展的时候,突然想起了最近GMail推出的新特性,IMAP。不知我的手机是否支持收发IMAP。打开手机研究了一番,终于搞定。以下是配置的细节,同样的配置方法可能还能应用于其他同样使用S40系统的手机:
  1. 进入信息菜单,在信息设置里选择电子邮件设置
  2. 进入编辑信箱,添加一个新信箱,选择手工创建
    • 信箱名称:随意,会现实在菜单上
    • 我的名称:发件人的姓名,如“Sheng Yu”
    • 电子邮件:发件人的地址,如“username@gmail.com”,Google的同事填写username@google.com
    • 接收邮件服务器类型选择IMAP4
    • 登录信息,打开IMAP4鉴权,用户名填完整的邮件地址,如“username@gmail.com”,密码填写登录邮箱的密码
    • 下载设置,按需要设置
    • 接收邮件设置中,收件服务器填写 imap.gmail.com,安全选择安全端口(我想应该就是SSL),端口993,接入点按网络设置配置,我选择的是首选接入点
    • 发出邮件设置中,发邮件服务器填写 smtp.gmail.com,回复地址一般都是自己的邮件地址,打开SMTP鉴权,用户名和密码与登录信息中的设置一致,安全选择TLS,端口为默认的25
  3. 保存好信箱后,在信息菜单中会出现以信箱名称命名的一个选项,状态是离线。选择这个选项并选择连接即可收到最新的邮件了。

经过以上的设置,我就可以安心去无锡了。无论是和MM的联系还是处理工作上的事务,都可以轻松用手机完成。此时我更加犹豫,是不是需要带本本呢?XD

2008-02-19

猪年——我的感情,我的生活

我的鼠年就要到来了,终于盼来了又一个鼠年。在上一次轮回的时候我一直在想,这一个轮回需要等待多久啊——然而记忆中这一个轮回却似转瞬,不禁上下端详了一下自己,顿时觉得自己的变化是如此的巨大。即使是面对一年前的自己都觉得有些陌生。

那时的我形单影只,一个人骑车飞驰在校园中,一个人安安静静地往来于教室图书馆食堂宿舍楼,让我觉得有一种充实感。而如今这样的生活已不复存在,我也再也不能将安定地一个人的生活认为是一种自由了。

那时的我意气奋发,初初被肯定的自信,让我能够蔑视曾经自以为是待人傲慢的人,也让我更清楚地认识自己的知识和技术水平,让我看到了前进的方向。随着离开了校园,这样的自信也随之消失殆尽了。

那时的我感慨的是101.7的年度榜单一年不如一年,一年比一年陌生。而现在耳边的歌曲,我既不懂在唱什么,也不能名其名,只须感受这样的节奏,感受一种感情。

这一年我的变化,都归因于一个人出现在我的生活中。她的出现把我带入了另一个世界,让我沉浸于此,不愿再回到过去。

在她面前,我的表情总不能严肃起来;思念她的时候,我已不能保持着理性和冷静。憧憬未来,我只想与她了此一生;前途未卜,心中有她就有希望。

这是我人生的第一次恋爱。虽然始于6月,却让之前的几个月,写毕业设计的回忆变得特别美好。我们在思源湖畔追忆过去,在体育场前盟誓相守一生,在雨 中拥抱两心相溶;我们携手共同度过了浩劫,相对而泣消除了隔阂……与之相比,开始工作,外出旅游,签证准备赴美都变得没有那么重要。我的生活的每一分钟好 像都是两个人的身影,喜悦或伤感的回忆,都让这一年变得特别,让我能够忘记工作的压力,家庭的矛盾,沉浸于幸福中。

这一年是我的鼠年,最基本的愿望是希望我的感情美满。为此有了很多追求:

  1. 亲爱的要开开心心,健健康康每一天
  2. 妈妈顺利解决好家庭矛盾,搬了新家重归幸福
  3. 去美国出差,平平安安归来
  4. 努力学习工作,奠定事业基础

最后是这个值得纪念的最有标志性的笑脸:

XD

2007-06-06

毕业随感

我不想承认,也不能否认,我对学校没有太多的留恋。也许是前途过于明朗,也许是过去不堪回首。回忆中的失落、痛苦、迷茫,如今已不值一提。我想说,我一直是乐观主义者。

最近写论文很忙。开始磨磨蹭蹭浪费了很多时间,在意识到时间的紧迫性的事情,发现周遭的人都已作泰然自若状。在家每天熬夜到4点,没有一次能够在闹钟响起的时候起来的。当外公看我昏睡不起,问我是不是发烧的时候,我意识到我是太拼命了。不知道为何我要如此拼命,不知道为何当初我要挑战这个题目,也许是不想在大学生涯的最后时刻留下一点遗憾吧。

XSS、SQL Injection、破密码……最近做了无数“坏事”。在进入大学之前,在我的认识中,信息安全就是和这些事有着密不可分的联系,而现在我才意识到,我的毕业证上写着的是“信息安全学院”。

大段忽悠的文字、要求实干的实验都已经完成,剩下的只有一些边角料,若是这些都已完成,我又将陷入茫然不知所措中。经历了这大学四年,我想我不会再用“终于忙完了,可以休息一下了”之类的话为我的颓废找借口了。

2007-03-15

我的程序员道路

去高中讲课最终没有成型,写一些文章也好喔……
希望施老师的社团期刊快点办起来,把我的文章登出来!:-D
以下是第一篇


当我侥幸获得了在Google实习的机会,并因此来到北京的那一刻,我感到,高中的梦想又浮现在不远的前方。

我想成为一名程序员――是的,程序员,我一直自嘲为"IT民工"。在高中时,我一直以为程序员就是用计算机的思维去解决问题,用程序语言去实现自己的算法,并以此为工作的人。现在看来,这和所谓"IT民工"还是有一定差距的。

我向往充满挑战的工作。工作的每个时刻都是需要你付出努力,尤其是智力上的努力。工作应当是新鲜的,不会存在"熟练"的时候,而每个任务都能让我感受到新鲜感。

高中时,我就是处于这样的生活状态。每次遇到一个算法题目,我都会花很长时间去考虑,如何去解决它。产生思路以后,还要想办法去实现。在计算机前呆上几个小时,辛苦完成了一个程序,还要花更多的时间去调试,查错。我不是一个特别讲求效率的人,这样慢条斯理的学习花费很多时间,更影响了更多的上课时间和做作业、学习"主课"的时间,但我乐在其中。我觉得这样的学习比起奋战在题海中,反复做着相似的题目来的更有趣,花费这些时间更有价值。

高三那年,当我和陈浩开始着手设计我们自己的算法的时候,"做一个程序员"这样的愿望在我心中深深地扎下了根。每次陈浩有新的想法,提出一些方法以解决我们算法中的一些问题,而我经过思考把他的方法推翻。有的时候,我也会自己想一些算法去纠正陈浩的算法中的弱点,但大多数情况下,不一会又被我自己推翻了。我们第一次设计自己的算法,心中感到无比的新奇和兴奋。我想,我要做这样的工作。

从高二起,我开始接触web相关技术,在大学期间,进一步深入地自学各种服务器端web技术,这可以算是另一条道路。看起来,web是我的专长,似乎我会沿着这条道路继续走下去,做一个专业的web开发人员。但我不喜欢做web开发。我做过的项目都是大同小异,用同样的思路和技术即可解决各种需求。一旦熟练掌握了一种技术,剩下的就是依靠体力堆积起大量的代码――也许这就是所谓"IT民工"吧。我依然怀念高中时的那种快乐,原来的愿望成为了夙愿。

在Google实习生面试的时候,我再次体会到了久违的快乐。凭借高中时倾力学习所得的知识以及积累的经验,我侥幸获得了实习的机会。而当我拿到工作的offer的那一刻,我感到我再次回归到了我向往的道路。

我是幸运的,并不是因为我找到了一个不错的工作,而是因为我喜欢这样的工作,而这个工作看上去还不错(:-P)。我也是侥幸的,梦想似乎在不经意间实现了。如果高中时不遗余力地去努力,大学期间没有迷失方向,朝着梦想不断努力的话,现在我和某些"大牛"的差距也不会那么大。因此,我要撰写此文,记录下我走过的路程,告诫自己以后再也不要迷失自我,也留给后生以参考。

2007-02-13

Reminder: Keep Your Manner

最近有太多的诅咒,刚才又莫名地发起火来,不应该这样的。我敢打赌,我以后一定会对我今日的performance失望的。在此,忏悔一下,并告诫自己,要保持良好的心态。基因上已经稍逊于人了,我要在其他方面塑造完美自我!

  • 宽容值得宽容的事情;
  • 体谅别人;
  • 保持乐观;
  • 以平和的心态对待不公的待遇;
  • 保持感性认识和理性分析的平衡;
  • 不走极端路线;
  • 待人公平而不以等级区分;
  • 热爱家庭;
  • 关爱需要关爱的人;
  • 享受生活地去工作,而又不乏上进心
  • ……
穷则独善其身,达则兼济天下;要做一个谦谦君子,做一个绅士。

要时时提醒自己。看到这些文字的朋友们要监督我哦!

2007-01-27

Taking Care of Someone Special

并不是世界上每个人都过着正常生活,甚至不能过上正常的生活。也许有人会在洗手时放声大哭;看到热腾腾的洗澡水就担心被烫伤;就算轻轻碰了别人,也会担心划破皮肤;即使不要生命也要珍惜外貌,百般呵护……

也许你没法理解,我同样没法理解。不能按照正常的逻辑去设想他们的反应;说话时要百般小心;要在他们痛苦号哭的时候,还能压抑自己的情绪;设法去理解他们毫无逻辑的想法,去劝戒……

如果你还没有遇到他们,也请你不要完全沉浸于你正常的生活,将你的一点点爱分给他们。

如果你身边有这样的人,也许你还把他们视为麻烦制造者、无理取闹的家伙,但是还是请你好好关爱他们。也许你付出越多关爱,你会更加痛苦,但是还是请你相信关爱最终可以驱散魔鬼。

2007-01-26

Career as a bachelor is supposed to reach the end

不会因为点名没到而焦燥,不会因为考试而亢奋。典型的大学生活似乎已经结束,今后的将是向工作过度时期。

学生时期,为太多事情担心,也因此而分心,不能专注于自己所喜欢的事情,也受到了各种因素的诱惑,偏离了既定方向。

好在,随着周四密码学考试的结束,宣告着典型的大学生活告一段落。

这个寒假,做几件有意义的事情,写个好玩的程序,继续学小提琴……还有闲暇时间去混点零花钱。就酱紫。

2007-01-15

为洋洋送行,不一样的离别

前篇——写在送行之前

离别 不代表我们以前
谎言 有些时候也许是体贴
你用泪光
回应我的真诚谅解
阴天 我们都有艳阳天 ——《花园》


我们都为了自己的梦想,奔赴远方。区别在于,在为你送行的队伍里,有我。
我的思路已经混乱,要叮嘱的话太多了,不知道要从哪里说起。但愿一切顺利,平安归来。

链接:《花园》

后篇——写在离别之后

也许,只有孤独的人才会感受到离别的难过,所以,在我上火车奔赴北京的时候,我并没有现在难过。

我放下能够装下45个可乐瓶的大包,接过了她给我的“遗书”——一张用铅笔写满了蟹爬的字的A4纸。我当时要看,被她阻止了,催促我离开。“再见”和平常没什么两样,我已经习惯于用她常用的上下甩手的手势表示再见。

回家读了“遗书”,初读只是看了大意,字太蟹爬了,拿出放大镜仔细又读了一遍。虽然没有关于我的条款,可以那种带有调侃的语言,却读得我有点伤感了。我明白了为什么这不能给她父母看,虽然知道只是假设,也会不由自主地涌起了不详的预想。那是多么可怕啊!

--------

回家后,了结了毕业设计的麻烦。那时,我学会了去拒绝。并不是处于极端的自私,也不是无限地退让,而是在问心无愧的前提下,坚持原则,死守底线。关心一下应该关心的人,又投入了密码学的复习中,以平息之前的情绪起伏。将近1点,收到洋洋平安到昆明的消息,开始补全先前待续的半篇日志。

一个月,会发生什么?

想问天你在那里
我想问问我自己
一开始我聪明
结束我聪明
聪明的几乎的毁掉了我自己
想问天问大地
或著是迷信问问宿命
放弃所有 抛下所有
让我飘流在安静的夜夜空里 ——《夜夜夜夜》

连接:《夜夜夜夜》

2007-01-10

Hacking Intel - A free-installation live messenger

在Intel工作,无法安装Live Messenger。按照Intel的安全策略,除了Windows Messenger,其他IM都不能使用。只要一安装Live Messenger,IT那恶心的internal spyware(我对它的称呼)就会警告,如果不及时删除就要打小报告给老板,可恶!

于是,我开始研究免安装的Live Messenger,至少是通过非正常手段安装,在Add or Remove Programs里面看不到,spyware查不到。网上版本都比较久,有些还是8.0beta的,我的版本是8.0.0812.00,而且还附带对应版本的messpatch。COOL吧!

下载地址:
ftp://yusheng:saintfish@public.sjtu.edu.cn/public-files/MSN%20Messenger.7z

New! 8.1.0178.00
ftp://yusheng:saintfish@public.sjtu.edu.cn/public-files/MSN%20Messenger%208.1.7z

用WinRAR解压后,阅读ReadME.txt的安装说明。

同样可用于应对各公司的IT限制。

2007-01-07

凌晨两点,回忆范晓萱,回忆初中的懵懂

为了测试live space的连接状态,不经意见打开洋洋的space页面,那段范晓萱的背景音乐再次引导我进入回忆中。

我总是那么愚钝,就如我前文说的。听到范晓萱已经是初中即将毕业的时候。当时的我,只会从歌曲中抽去那些音符,以及一些钢琴的伴奏,这是在刚刚结束的长达十几年习琴生涯时养成的习惯。不会顾及歌曲所要表达的意思和心情。当时,我开始懵懂,开始意气奋发,如同现在的“愤青”一般,开始关心社会。

同样原引歌曲里的一段词:

走进随意门
如果真的可以
我要永远和你住在那段回忆里
纯真的心
没有约定的约定
你就是我一生的好朋友
青春的日记 处处都有你
曾经对你生气好想说到不起

我想再不会有人像你陪我欢笑陪我哭泣 ---《处处都有你》

虽然当时从来没有关心过以上这些的含义,但的确是这样的歌陪我离开了初中,走向高中。在那个时期我找到了自己,定下了直到大学的打算,并在不经意间为现在的工作铺平了道路。

前不久在bbs上看到有人回忆过去的“红白机”。说实话,我知道那时才将这个名字和那个机器的形象划上等号。在别人看来,这是不可思议的童年。同样也是与众不同的青春期,从那是我开始明白,我注定不会有幼稚的,如同能让洋洋感动的泣不成声的爱情故事里那样的甜美经历,我把这叫做懵懂。

虽然听着一首带着无限杂音的mp3,但更有当年卡带的感觉了。

参考:

2007-01-06

永远地落后于潮流

《鲁豫有约》正在采访童安格。在此之前,我只是知道有童安格这个名字,即使他站在我面前,我都认不出。对于很多明星,我也同样只是听说,名字和面孔无法建立对应关系。我就是这么落后于潮流。

记得上世纪90年代初的时候,表姐已经开始迷恋于“小虎队”了,而直到今天,我仍然没法道出那几个人的名字。世纪初,哥哥姐姐开始赚钱了,开始追求梦寐以求的名牌产品的时候,我又一次发现我还是愚钝的小孩。

似乎我总是落后于潮流,被凶猛的潮流冲击,而顽固不化,缺被早已消退的潮流推动,慢慢前进。可是,现在潮流变得越来越浮燥了。希望一夜暴富、一举成名、一劳永逸,又岂是我等生长在传统家庭,接受着传统式的价值观的84年乡下小孩可以跟上的?

于是,当别人拼命地做个人网页,企图一夜间成名,吹出一个巨大的网络泡泡的时候,我却在阅读HTML/CSS/Javascript的参考手册;凭着脸蛋、身材、三脚猫的“才艺”就可以风光无限的时候,我却将外貌因素放在我择偶标准的最后;在流行创业的现在,我却在频频质疑着身边的人的创业计划,宁可老老实实去上班。

我不是孤芳自赏的自恋狂,只是永远地落后于浮燥的现实。

2006-12-31

为了忘却的纪念

岁末将至,是时候总结一下这一年,我甚至于想要总结一下这22年,只是苦于找不到什么特别的理由,不是诸如20、30岁这样的整岁,也不是本命年。于是,只是总结一下对我来说尤其重要的2006年。

最值得纪念的是2006年发生的众多第一次。

我的第一份实习工作给了我如此多的惊喜:
第一次关注于Job板和Parttime板;
第一次为自己准备简历;第一次在自我表现和吹嘘之间徘徊;
第一次面试;第一次拒掉offer;第一次接受offer;
第一次来到北京――至今到过的最远的地方;
第一次离家长达两个月;
第一次通宵工作写程序;
第一次……

在那里结识的朋友,度过的美好时光多么令人难忘。这是一个转折点:从学生的稚气向上班族的成熟过度;这是一个里程碑,标志着长达16年的学生时代的结束。

从此走在校园中,总会有莫名的自信感。我可以大声告诉别人,搞技术不是没有前途,踏踏实实地搞技术,同样可以创造价值。

同时,从技术上说,我也学习到了很多知识,见识了更多未知的领域。多年来我一直保持着一年学习一样技术,并精通它的学习速率。可是在大学三年间,我的学习路程逐渐向应用方向发展。而今年,由于实习的缘故,我开始接触模式分类,并之后的一些学习机会中,进一步熟悉了聚类。我仿佛又一次回到了高中时沉静在对算法的研究中。

每当学习工作没有压力,生活变得富足,就会开始考虑感情问题。

我第一次,也许也是唯一一次挂牌是在6月13日,收到实习offer后不久。现在想来,选择这个时候似乎并不合适。我所希望的另一半,是能够共患难,不离不弃地度过一生的。即使在很普通的日子挂牌也似乎比在收到offer这样的喜事的时候更为合适。而选择那时,也许更是一种情绪化的表现吧。

我一直不明白为什么一些人挂牌之后几周就能够对外宣称自己告别单身了。也许他们的恋爱和我的定义不一样吧。难道我已经old,没有感觉到这是个流行快餐式爱情的时代吗?我相信充足的时间让彼此充分地互相了解,抛开一时的冲动,形成更为稳固的感情,才会有可能共度一生。所以我依然过着名义上的"单身"生活,希望时间不会消磨爱情,而能见证忠贞。

在年底的时候,发表了一篇这个我名字的论文。论文不是特别高深的东西,却也不是纯属忽悠的东西。虽然我是第三作者,但我才是全程参与了算法的设计,独立完成了算法实现和实验数据采集。这样的经历对于日后可能会从事的研究工作无疑会有很大帮助。为此付出了一个月的努力,有一个令人满意的结果,我也深深地为我的成果感到自豪。

今天撰文,纪念2006年这几件大事,却是为了忘却。忘记过去这一年中的进步,而站在现在的基础上继续前进,才是2007年的目标。但愿2006不是我最为感到自豪的一年,愿2007、2008……一年比一年更好!

2006-12-24

后“七不”时代

不知道还有多少人记得当年的"七不"规范。我还记得我在小学的时候,班级还集体到徐闵线车站表演节目,宣传七不。我这一届人,在道德观念成型的时候,深受"七不"的影响,并且深化为做人准则,不吸烟,看红绿灯过马路……

不知何时,"七不"已经不再被提及,知道它的人,或者离开了上海,或者逐渐忘记,更多的人涌入这个城市。一度,道德尺度成了空白,每个人按照自己所乐意的方式生活,而在我们这些经过洗礼的人看来,那些违反我们道德观念的行为是"外地人"所为。

而如今的道德准则又一成为政府大力宣传的东西。"八荣八耻"似乎有些不拘小节,不再是关注于具体的文明行为,而是试图灌输一些观念。也许在十几年里,民众已经失去了太多的道德准则,甚至于在当年看来很理所当然的准则也需要举国上下来宣传。在这个"七不"已不再流行的时代,我们需要的是对具体行为的规范,还是对观念的纠正?

2006-12-08

[转载] 当我们不再年轻

原文链接




在这个时代,有很多很多的年轻人,揣着各种专业的毕业证,近不及待的丢掉根本没有读懂的课本,带着指点江山的伟大理想和对名利的憧憬挤进IT这个"高科技"产业。同样,好几年前,我的身边也充满着各种鼓动者:舆论的声音都在谈论年轻富有的IT名人,对于一个极度缺乏成就感,渴望被别人承认的年轻人来说,这是无可阻挡的诱惑,于是笃信IT业就像传说中那样,可以苦干几年coder,转后转行做管理,赚满荷包,就踢开这些辛苦的劳作,去做个享受人生的"成功人士"。

可笑吧,至少今天我回头看过去:我们这个所谓的高科技行业,到处充满了短期行为,太多的人都想吃青春饭,一夜暴富,想要捞一票就走。对于一个行业,这绝对是一场灾难。加上这个所谓的高科技行业本身,竟然也忽视老技术人员的价值,一味用人海战术来解决问题。于是产业陷入一个怪圈:因为缺少经验丰富的程序,我们只能做低级的体力劳动,这样就更依赖于个人的体力而不是智慧??本应是代表智慧与荣誉的开发产业,变成了劳动密集型的小作坊。这是多么荒唐的事!

还好,我这个老家伙还省得挺滋润,每当见到坐在我身边一个比一个"老"的几个家伙都会做出天真可爱的表情,以便从前辈们身上再"骗"些技术出来。当被问起以后的职业选择,我会认真地告诉他们,我想写程序,我希望可以想一直做一个写代码的程序员,不离开我心爱的键盘和开发工具。即使经济上的回报不能像我的同龄人那么诱人也没关系。因为也许没有管理天赋的我,如果专注于项目管理和市场业务,也许我能挣比现在多得多的钱,可是我还能这样开心的体验智慧吗?

岁月的流逝,带走了我的盲目的精力,但是我激情仍在,并没有感到力不从心。曾经在我看来充满痛苦和艰辛的技术转型,已经可以微笑着面对。从业的几年时间里,几乎每年我都要学习一门新的语言,每两年,自己对开发技术的理解就会有一次比较大的进步和转变。现在的我,已经明白各种语言不过是熟悉的算法和数据结构,换了件马甲而已。面对这些最多还有一点紧张而已??嗯,就像身边突然坐了一个陌生的美女,我还不知道该怎么和人家打招呼呢。当然,每一种编程技术,每一个开发领域,都有自己的思想,问题,方法和困惑。不过这些都是可以通过学习解决的。Pascal的严谨,C++的华丽,Java的务实,Python的灵活,SQL的绚美,付出熟悉的记忆的代价,就可以了解到这个世界另一个侧面的美丽,何乐而不为?当然,这需要时间,经验,磨砺,如果你没有为之付出更多岁月的准备,那么应该选择一条更适合自己的道路。

这世上总有些人,可以用自己的天才和灵感弥补经验的不足,广为流传的IT故事中,多的是这样的天才,他们的年龄和财富,是媒体津津乐道的话题。但是无论天才离我们多近,都不代表我们自己也是天才。理解这个道理,用于我太长的时间,无论读多少天才传记,也不能使我在第一次面对SQL脚本时不紧张和茫然。当我埋头编写SQL,成百上千遍的重复Select,Delete,Insert,Update,我也不会想到有一天可以写SQL的技术文章给别人读,还可以得到大家的肯定。

智慧这东西很不公平,有些人的成就我们这些普通人一辈子也达不到。可它也是最公平的,付出的努力越多,就有越多回报。虽然,可能你没有发现。发掘自己的智慧,也是一种智慧。程序开发,是一个依赖于智慧的职业,它需要我们用岁月,用枯燥的练习和辛勤的劳动来积累经验,换取面对问题时的从容不迫。

不要指望一夜之间就可以得到女神的青睐,我们应该坚持每天为她献上真诚的微笑。总有一天,她会回报你奉献出的时光,不要担心她嫌弃你青春不再,她更欣赏你的成熟。比之天赐的才华,辛勤努力中积累的感悟更为宝贵。昔日年轻光辉照耀整个计算机科学界的天才高德纳如今不还在辛勤的编写《The Art Of Computer Programming》么?

成熟不等于老去,年轻不等于灵活,在积累足够的知识之前,并不能看到足够的高度。当积累到一定程序,学习速度或者创造力并非一定较之年轻人有所不足。换一个思路,经验和技术就不会被遗弃,它们总能力为你带来惊喜。保持一颗年轻的心,就能不断体会到发现智慧的欣喜。

我相信,会有越来越多的人认识到经验对于程序员的价值,不仅是我们自己,还有我们这个需要智慧的产业。

2006-12-02

1st Week in Intel

虽然我还是第一次在Intel工作,但已经是"老油条"了。

这周去了四天,起床一天比一天晚,从开始8:30到9:00。每天做的工作很少,就是熟悉一下环境、看一些文档,剩下的时间我都用来复习周五考试的功课了。在我印象中,Intel始终就是一个养大爷的地方,现在更是有了亲身体会。

我的工作是软件测试。我终于明白,测试就是试用软件,或者是写一些程序自动"使用"软件,看看效果是否正常。可是,在我看来,一些bug应该是开发人员在开发的时候就应该想到的,而不应该留给测试人员去发现。如果这样弱智的bug都需要别人去发现,那么开发人员的工作岂不是太简单了?!可是,Intel就是这么一个地方。似乎开发人员的工作,只是保证按照设计写出能够编译的代码,而语义错误就交给测试人员了……

我还是很喜欢Google的20% rule的……我想在Intel也许会有比20%更多的时间和比寝室更好的环境,去做一些自己喜欢的事情。A RSS substribern for Yangyang, a search engine for SJTUBBS and a msn messenger on mobile device 正在队列中。

2006-11-26

Virus Infecting Portable Executable File (4)

【实践篇】
1. 添加自己的代码
用反汇编工具查看程序的汇编代码,在代码后面加入自己的代码。我所使用的程序就是一个显示对话框的程序,而我添加的代码也是显示一个对话框,而把原对话框的标题和正文交换。

原程序:
00401000   68 40100000      PUSH 1040
00401005   68 00304000      PUSH aaa.00403000             ; ASCII "Hello World"
0040100A   68 14304000      PUSH aaa.00403014
0040100F   6A 00            PUSH 0
00401011   E8 14000000      CALL <JMP.&user32.MessageBoxA>
00401016   6A 00            PUSH 0
00401018   E8 01000000      CALL <JMP.&kernel32.ExitProcess>
0040101D   CC               INT3
0040101E  -FF25 00204000    JMP DWORD PTR DS:[<&kernel32.ExitProcess>; kernel32.ExitProcess
00401024  -FF25 0C204000    JMP DWORD PTR DS:[<&user32.wsprintfA>]   ; user32.wsprintfA
0040102A  -FF25 08204000    JMP DWORD PTR DS:[<&user32.MessageBoxA>] ; user32.MessageBoxA


加入的代码
00401030 > $ 68 40100000    PUSH 1040                     ; /Style = MB_OK|MB_ICONASTERISK|MB_SYSTEMMODAL
00401035   . 68 14304000    PUSH aaa.00403014             ; |Title = "Hello Kitty"
0040103A   . 68 00304000    PUSH aaa.00403000             ; |Text = "Hello World"
0040103F   . 6A 00          PUSH 0                        ; |hOwner = NULL
00401041   . E8 E4FFFFFF    CALL <JMP.&user32.MessageBoxA>; \MessageBoxA


而注意在最后跳转到原程序入口:
00401046   .^EB B8          JMP SHORT aaa.00401000

记录下新的入口地址,即我们新添加代码的首地址;以及所有代码的总长度,以备后用。

2. 更改程序入口
用Stud PE打开程序,用Basic HEADERS tree view in hex editor查看头部信息。找到Optional Header结构里面的AddressOfEntryPoint和BaseOfCode,两个字段均为00 10 00 00,将其改为30 10 00 00,因为我们新加入的代码在地址00401030上。需要注意的是,这里的存储方式是小数端(?记不清了,应该这叫做小数端),所以数字的排列方式和阅读方式是相反的。这样,程序的入口以及代码基地址都已经改成我们新加入的代码的起始地址。

3. 更改代码段长度
用Stud PE打开程序,在Section标签下,找到.text段,这一般就是代码段了。双击.text行,将Virtual Size改为00000048,因为我们加入的代码和原代码总长度有0x48个byte。

4. 总结一下
用UltraEdit打开原程序和改过的程序,使用File->Compare Files比较两者差别,注意选择Binary方式比较。可以看到一共有4片被改动。
  • 入口地址
  • 代码基地址
  • 代码段长度
  • 原代码后一串0改为我们自己的代码

好了,双击我们的程序,就会看到效果了。

5. 下一步打算
写到这里,我们这个教程也差不多了。我们用全手工的方式分析了一个简单的EXE,并在不增长EXE的前提下加入了一段自己的代码,并让它率先执行,随后执行原代码。这也许是病毒感染可执行文件的一种方式。

下一步也许是写一个能够自动分析的程序,全自动地去感染文件。然后也许是尝试将自己复制给被感染的文件,加入潜伏性和破坏性的代码,也许就可以做出一个病毒的雏形了。

笔者才疏学浅,急功近利地做到这个程度,写下这些毫无技术含量的文字,仅仅希望能够帮助对病毒有兴趣的同学入门。如果有业余时间,我也想继续钻研下去,和大家共同进步。

2006-11-25

Virus Infecting Portable Executable File (3)

【原理篇】
病毒要感染EXE文件,也就是把自身插入EXE中,并在执行原先程序指令之前执行自身。这个教程并不能完成一个完整的病毒程序,而只是将自己的一段指令插入在EXE文件中,并优先于原先程序执行。

此篇讲解完成上述目标的原理,所需要的知识是"基础篇"中的一个子集。

由于PE文件会对Section进行对齐,因此一般会在程序段后面留下一些空白空间。这些空间可以用来插入我们自己的代码,也可以是病毒滋生的空间,这样,被"感染"的文件的大小不会改变,大部分结构也没有变化,直接跳转到适当位置覆盖写入即可进行感染。

在空白处插入你的代码并不会执行,更不可能在原程序之前执行。其原因有2:
1. 程序入口仍然是原入口,执行的流程依然是首先执行原程序
2. 每个Section都会有有效长度,超出部分Image Loader会直接忽略掉

因此我们加入的代码和填充的"0"没有什么区别。

为了达到抢先执行我们自己的代码的目的,我们需要:
1. 更改程序入口地址
2. 更改代码段的Section Length字段
3. 为了执行我们自己代码以后还能够回头去执行原程序,我们还需要在代码后面加上跳转指令,跳转到原先的程序入口

基于上述原理,在下篇中我们具体讲解实际的操作过程。

2006-11-24

Virus Infecting Portable Executable File (2)

【工具篇】
工欲善其事,必先利其器。我们先不着急动手,先看看有什么好工具,一方面帮助我们对知识有更好的认识,另一方面为我们动手实践铺平道路。

1.PE文件查看和编辑工具
我使用的是Stud PE,可以在看雪工具下载中找到更多相关工具。Stud PE列出了所有PE文件头字段和各个Section的描述字段,可以直接修改,十分方便。

2.反汇编工具
C32Asm是一个做的挺漂亮的反汇编工具。它的最大特点就是可以查看反汇编代码对应的十六进制数据。
另一个是OllyICE,功能强大,不仅能够查看PE的一些字段、反汇编、改十六进制数据,更可以直接写汇编语句,生成相应的Binary,十分方便修改代码。

3.汇编工具(可选)
用其他的exe太复杂了,自己写一个简单的做研究吧。用masm汇编一段简短的代码是很好的主意。我用masm汇编了一段:

.386
.model flat, stdcall

include \masm32\INCLUDE\windows.inc
include \masm32\INCLUDE\user32.inc
include \masm32\INCLUDE\kernel32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

.data
msgtitle db "Hello World",0
msgtext db "Hello Kitty",0

.code
start:
invoke MessageBox, NULL, addr msgtext, addr msgtitle, MB_OK
invoke ExitProcess, 0
invoke MessageBox, NULL, addr msgtext, addr msgtitle, MB_OK
end start