2005年,初识《加密与解密》,注册论坛会员,抱着softice 一步一步地 f8。
  2006年,爆破了第一个“内存明文比较”的算法,发了第一个精华帖。
  2007年,  摘了论坛的几行代码joke了一个邮件,竟“惊动了ceo” 。
  2008年,腾讯杯挑战赛,那个十一,苦苦地趴在电脑上解决 float 问题。那一年,能够逆向一个注册算法,写出了第一个注册机。
  2009年,第一次见到了看雪老大。参加了论坛的十岁庆典。

  初识《加密与解密》纯属偶然。大二的第一学期,完全不懂编程的我,为了写一个pop3 客户端程序,每天都坐在图书馆里查找可复制的代码。当时已经照猫画虎地用vb写好了一个 基本可用的 程序,但解码附件的时候,达到1M 就会死机。于是满书架地翻base64 解码的改进算法,就这样翻到了《加密与解密》第一版。
  书中对base64编码的知识只是一笔带过,但这本书的其它地方却吸引了我。这本书花了一章的内容来讲VB程序的原理。这是我在其它任何一本书上都没有见到过的知识,这些讲解让我从照猫画虎或者说是语法学习的层面跳了出来,完整地理解了一行代码从书写、编译、执行的完整流程。我觉得豁然开朗。书中的另一节内容 “Windows的消息机制”也深深地吸引了我。一本书能让我这样没有任何编程基础的人把专业知识讲得如此清晰明白,让人不得不佩服作者的专业水平。

  用“一发而不可收拾”来描述我和《加密与解密》以及看雪学院的关系最是恰当不过。那个学期剩下的一个月里,每天早上九点,我就准时地抱着《加密与解密》坐在图书馆机房,到看雪学院“工具下载”栏目,下载好softice,到 “解密教学”栏目,下载好加了upx 壳的 notepad。(因为电脑上有还原卡,所以我不得不每天重复地做同样的准备工作)然后就一下一下地 f8 ,寻找神奇的 popa,401000。
  事实上,花了一个月的时间,我也没找到这两个东东。一来基础太差,我那时除了会用vb 的几个函数,其它的编程知识几乎一片空白。二来环境不一样。书上用 trw2000来做介绍,那需要 windows2000的环境,而我只有 windows98 的环境。我不知道为什么要找popa,也不知道softice 中那么多列的花花绿绿应该在哪一列去找,更分不清哪一个 401000 是书上说的那个 401000。但我依然不知疲倦地摁f8,日复一日,周而复始。正是由于书中的种种困惑,我在论坛注册了会员。
  记得当时最得意的事情就是学会了bpx messagebox. 这个命令可以让softice 鬼魅般地从右下角的托盘里跳出来。随便下载一个小软件,载入到 softice 中运行起来后,填写好注册码,bpx messagebox,F5呼出程序界面,点“确定”,softice就鬼魅般跳了出来,花花绿绿的煞是好看。我盯着屏幕的右上角,一下一下地按f8。等着EAX 后面出现那个 87654321。出来了就鸡冻一番,然后再找新的程序玩。如是再三,乐此不疲。

第一个后门

  大三的时候,已经基本学会了C语言,对编程和程序设计也有了一定的了解。知道了为什么要盯着 call 之前的 push,为什么两样是跳转却只看 jz 而不看 jmp。为什么八个寄存器只看eax 和 ecx。softice 也用得有些像模像样了,能够对付“内存明文比较”这样的程序了。爆破成为一个业余爱好。玩着玩着就盯上了学校图书馆的系统还原软件。
  操作系统是 windows98,还原软件是 pro magic。pro magic 原理和实现都和还原精灵差不多--也是在windows下提供了管理软件,也使用了内存明文比较的算法。
  记得那个软件可真够简单使用经典的 f12 就可以搞定。直到现在,仍然对 pro magic 的跟踪方法记忆犹新:
  载入程序,10次  f12 ,弹出“密码错误!”提示框。重新开始,9次f12,8 次 f8,在 eax寄存器上看到了亲爱的 87654321
。f7跟进,找到一个 je, 改成 jne。搞定。随便输入一个密码,都能进入还原模式了。
  我还不满足,上网要收费。我想把电脑设置为我量身打造:我用的时候不收费,不还原。别人用的时候,收费,还原。
  经过认真的思考设计,一个完美的思路终于浮出水面。
  1)将收费管理软件的注册表启动项从 local-machine 移到 curr_user 下。
  2)为 windows98 新建一个用户,并设置用户名和密码。
  3)启动时判断某个键是否被按下,按下则提示输入用户名和密码。没有按下则按正常的流程启动。
  为实现这个方案。我仔细研究了 windows 98 的多用户原理、启动过程,经过两个多星期的努力探索,终于证实了此方案的可行性。又花了近一个星期,终于通过修改 AUTOEXEC.BAT 和 CONFIG.SYS 成功地实现了此方案。
  这个解决方案到现在我都觉得是一个完美的杰作。这也是我的第一次“软件设计”。编程的语言: dos 命令和批处理。说得正式一点,这也算是一个后门。

一封邮件惊动了CEO

  刚参加工作时,编程水平很差。天天要用的 c++ 和 socket ,几乎没有任何基础。认识了一哥们,是这方面的专家。和我一个公司,但不是一个部门。我每天都要发几个邮件地向他请教技术问题。哥们发邮件的时候,必须抄送给直属领导,否则无法发送成功。让领导看见工作时间大多在支援外人是件不太愉快的事情,所以我一直在思索解决的办法。在上海出差的一天,在论坛里翻到 lemony 的帖子 《MX发信 核心源码》, 觉得很好用。一顿复制粘贴,一个邮件匿名发送工具做好了。
  为给这哥们一个惊喜,我撰写了一封精美的 “总裁寄语”。

引用:
xxx:
   
  很高兴地告诉你,你以自己的努力获得了领导和同事的认可,并被评为年度优秀新员工。
  为表彰优秀,鼓励员工,公司将在总部举行颁奖仪式。诚挚地邀请你来公司总部参加“与ceo面对面”活动。届时,我将亲自将“优秀新员工”的奖品颁发到你手上。相关事项,请与你的部门秘书联系。
   Best wishes!
  这哥们看到邮件,恭恭敬敬地给CEO 回了邮件,表达由衷谢意。
  我们的CEO是一个品德非常高尚的人,作为一个数万员工的公司的CEO,他竟然习惯于回复每一位员工的邮件(这是我后来经过实践才知道的):
引用:
我没有给你发这个邮件。请xxx 协助解决此问题。
  xxx 是地区总裁。
  CEO的指令响应速度真快。五分钟,地区总裁马上将邮件转发给行政平台、网络安全中心、部门经理。不到半个小时,网络安全中心便查到了IP包来自上海某网络接入商,随即到部门召集朋友的部门主管、秘书、及这哥们的直接领导了解情况。问这哥们是否在上海有同学或朋友,然后在部门内发全体邮件,询问有没有人收到类似的邮件。
  经过紧张的调查工作,网络安全部工作人员得出结论:这个邮件来自上海xx网络服务提供商。没有发现其它人接收到类似邮件,这应该是一个针对个人的joke。
  网络安全部把调查结果汇报给了CEO,提出,可以和此网络服务提供商联系,查找发邮件人的具体位置。并请示是否需要进一步调查。
  第二天,网络安全中心向全体员工发出通知,警告员工不得冒用他人账号发送电子邮件。一经发现,立即开除。
  这一切是我出差回来后朋友跟我讲的。他讲得绘声绘色,我听得汗如雨下。
  第二年,公司将“未经同意,不得使用他人的邮件账号”写入了员工手册。只有我知道这个条款的诞生的缘由。


  回过头来看这五年的学习历程,有很大的收获,比如,在大学三年级的时候,不经任何复习考过了计算机三级和软考中级,比如,如愿以偿地改行当了程序员。在这五年中,最要感谢的就是看雪论坛。在学习的过程中,论坛是我最好的老师。
  学习过程中,也走过不少弯路,比如,花一年的时间去学vb的语法而不知道钻研算法;比如,大量的时间都花在了没有技术含量的软件爆破上,而没有踏踏实实地学习汇编。回过头来看,如果能在学习时有人指点,可能进展能更快一些,境界能更高一些。

  五年了,尽管从事的工作一直是linux 方面的开发。但最喜欢的论坛还是以 windows 为主的看雪论坛。翻得最多的是 windows编程版块(现在的安全编程版块)。喜欢安静地潜水;喜欢看雪、小虾、笨笨熊等热心的版主;喜欢 xfish妹妹的“Anti Virus专题” 的简洁明快,failwest 兄弟的 “软件漏洞分析入门”的轻松活泼, CCDebuger版主的 "OllyDBG入门教程"的娓娓道来;喜欢在夜深人静时顶帖后竟然还有人往上顶的那份欣喜。

  作为一个个人网站,看雪学院发展到今天,着实不易。一年一年的,老一代 cracker 的离开,服务器托管和论坛的程序不时地出现问题,恶意攻击事件和马甲事件层出不穷,论坛在老大的努力和大伙儿的帮助下一步步地走过来。论坛会员数量逐渐增加,名气越大越大,书籍出版渐成气候,论坛自己的壳、虚拟机等技术走向成熟……这一切,离不开看雪老大十年来所付出的心血,离不开的我们每个人的潜水、原创、沙发、板凳、灌水……
  老大做的不仅是一个论坛,他在引导着一个产业--软件安全。而我们,正是这一产业起步、发展、繁荣的见证者。衷心地祝,雪如暖被,蕴育出“千树万树梨花开”的安全业的繁荣盛景。