朱皮特的博客 自由的飞翔

IT十年逐浪而行

2018-07-15
朱皮特
阅读量:

我的家乡是在皖西北一个偏僻的村庄,条件比较艰苦,交通也比较闭塞,因此人们的思想往往也比较落后。我对于故乡其实并无很多美好的回忆。

一直到高中都没有见过甚至没有听过计算机这种东西,待到上了高中才有的上机课。老师在解释“电脑”一词时,往往是拿人来进行类比的: 电脑就好比人的大脑…… 电脑会做人做的事情…… 电脑还会得病…… 电脑得的病毒还会传染,就跟人一样……

结果是老师越是这样类比就越听的糊涂,越无法理解电脑到底是个什么样的存在。而上机课呢,进机房是要戴鞋套的,说是怕电脑传染病毒了。以至于一直都以为电脑是个智能的生物体,会从人那里传染病毒……我甚至担心电脑的病毒会不会传染给我,这个想法困扰了我好一阵子。

我们那时用的系统已经是Windows98了,上机课上老师讲单击、双击、右键、菜单……把菜单跟现实生活中点菜的菜单进行类比,把电脑的Windows系统跟窗户类比,越是这样解释就越是听的云里雾里,虽然也知道Windows的中文解释就是窗户,但是我们学这个破窗户干啥呢?

而计算机课本上的教程也算是很详尽了,但是步骤太多太专业,很多名词无法理解,总之都是从来没见过的陌生的东西,学习起来也非常吃力,一点没有体验到新鲜和有趣。但是县城的孩子学起来非常的简单,基本上后面半堂课他们便玩起了游戏,印象中是关于潜水艇的游戏,看到好多人在玩我也很好奇,可是就是在电脑里找不到这个游戏。问起同学来,得到的回复是在哪哪哪拷过去,可是无论如何都找不到,现在想想可能是他们自己带的盘,然后把游戏复制到电脑里,创建的共享文件夹然后分享给大家的。但是那个时候对这些是完全理解不了的,倒也没有觉得自己有多笨,因为大部分人和我一样困惑,而县城里的孩子大概早有接触吧。

这就是一个从来没有接触过电脑的我的经历,所在的高中也是市重点高中,大部分人的起点可见一斑。

鉴于对电脑基本的常识和操作都无法理解,更别说是互联网了,现在想想其实正确使用浏览器了解互联网才算是启蒙。那时根本不知道可以在网上搜索东西,而机房的电脑也是无法连接网络的,我们操练的也就是鼠标、文件夹、画图–就是拖拽正方形和圆形画图,那时就觉得这真是无趣至极的教材。

不知道从哪里传来的消息,说是将来高考可能会要把计算机列为一项考察。心想自己的这种计算机水平肯定会拖后腿,于是想办法多操练操练。那时候网吧还是比较多的,上网费也不算贵,一小时大概一块五左右。不过网吧的氛围是,几乎是大部分的人都在聊QQ和打游戏,也就是在那个时候通过QQ这个小小的窗口了解到了外面的世界。

好在是,单击双击右键这些操作基本操练熟悉了,心里想这样大概该有个底了。你看,我们对计算机就是这样的认识。

高中平时听老师同学讲的最多的是,将来21世纪最热门的是生物和计算机。那个年代克隆羊多莉的热度还在,大概因为这,大家讲的更多的还是生物科技。另外一个跟计算机相关的热点是比尔盖茨,他因为搞计算机发了大财。但是总觉得自己的性格比较木讷内向,比较适合搞生物科技,也许将来做做科学研究还行。因此高考填报志愿我优先填的是生物,第二个才考虑计算机,后来选的是软件工程,听说是跟计算机相关的。但是说实话自己对软件是没有了解的,身边的人也没有能给你解释清楚的,只知道跟计算机有关。

我们那时填报志愿,就是这样稀里糊涂,身边没有人能帮你参考。而结果是,稀里糊涂的就走上了软件工程这条路。本来还打算抱着一腔热血将来为国做贡献研究生物呢,结果却是软件工程,但是这结果也是无法改变的事情,自己安慰自己,软件就软件吧,但是软件是个啥东西,回去怎么跟亲戚朋友解释呢?

后来也确实是这样,当家人邻里问起专业时,也是一脸尴尬。

待到上了大学,第一件要事就是弄清楚什么是软件,通过老师的讲解大概有了一个初步的认识。然后又跑到学校里的网吧上网了解(那时候知道了搜索),通过浏览器搜索了好多软件,也下载了好多软件,然后一个个安装到网吧的电脑上学着使用。

2005年的时候,整个互联网环境并不干净,各种插件和广告条,体验下来总体的感觉也并不愉快,心里有一种莫名的失落,而对软件的理解也仅仅是:QQ、迅雷、千千静听等网吧中常见的那些客户端工具。

专业课,C/C++是必修的,学起来倒是轻松,我至今不明白老师为什么总把指针和类解释的那么复杂,明明很简单的东西非得搞得难以理解。但是我主要关注的问题是,怎么把这些语言变成软件。跑到网吧去搜索各种软件,搜到了一个很小的工具,我在软件的使用帮助里发现作者居然是同一个学校的校友,于是我便咨询教授我们C++语言的老师,询问如何通过C++语言制作这种软件,因为平时在机房编译的都是命令行的黑窗口应用程序,彼时共享软件比较火,心里也是跃跃欲试。但是得到的答复是让我好好学习专业课,当然他的回复也并没有错。

心有不甘,一直惦记着这事。学期结束时,看到同学借阅的VB书籍,在书中看到了带界面的对话框窗口程序,这才明白,原来用VB可以编写软件。然后一个礼拜速成VB,尝试编写各种小工具,虽然说都是小打小闹,但毕竟有了更多一层的认识。

高中接触计算机较早的同学,已经有在外实习工作的了,在我看来已经是大牛大神级的人物了。尝试向他们请教关于VB更高级的东西,得到的答复是用VB倒不如用Delphi,号称是VB杀手。然后又抓紧学习Delphi,从图书馆借来了书去看,然后动手操练,实现出来的效果也确实比VB好一点,而且Delphi采用的Pascal语言跟C又很接近,上手倒是很快。然后就从网上下载各种小工具,对着这些小工具模仿,做一个比它们更好用的工具来。模仿后动手实现,这个方法进步还挺快。彼时熊猫烧香爆发,据说也是Delphi编写的,心里有了信心,就很踏实地学了一段时间。

后面的专业课是汇编,刚开始学的时候入门特别慢,完全听不懂老师在讲什么,但是也不知道怎么回事,一两个月后的某一天就突然开窍了,然后后面就自己飞起了,很快自学完。然后从网上了解到了还有一个win32汇编,还有相应的开发编译环境,尝试写了很多比较底层的汇编代码。

接下来,决定后面工作方向的事情是,因为汇编了解到了汇编可以编写病毒木马(对这个好奇是缘于高中时期对病毒错误的理解),由此又搜索到了看雪论坛,真是从此一入误终身啊,发现软件安全是个挺有意思的领域,后面大学的时光在这个上面花了不少时间。

2007年的寒假,我抱着罗云彬编著的《Windows环境下32位汇编语言程序设计》回家,整个寒假硬生生把这本厚达八百多页的技术书连看带背的啃下来,每天死磕里面的代码。现在看来,方法虽然笨了些,但是效果最好,而且最省时间。

看了不少关于汇编病毒木马的资料,也动手写了很多这样的demo,而且有一本《Delphi下深入Windows核心编程 》,又非常契合当时的学习状态,然后又是快速把这本书啃完。对底层也了解了一些,对汇编也了解,对Delphi以及Pascal也都熟悉了,整体上对Windows安全上也算是有了一定的认识和积累。

2008年,想找个实习单位,但是也没有什么好去处,其实最重要的是没有门路。于是想通过动手做一些案例让老师推荐下,当时就挑了还算比较火的网游传奇下手,逆向分析通信协议,逐行看汇编代码,借着从“Windows核心编程”中学习到的注入和HOOK技术,坐了一个礼拜的冷板凳,终于把流程全面理清,然后借着Delphi强大的界面编程快速实现了一个脱机挂,分享给了一起玩的同学们,可以实现很多功能,因为我们都是穷学生,打游戏烧不起钱,就拿这个脱机挂挂小号刷黑铁,摆摊……用赚到的元宝来养大号。

从这个客户端的分析和脱机挂的制作中,基本上刚好把学习到的技术全部应用落实,有了一次质的飞跃。后面就是挑选腾讯的游戏大厅、斗地主、升级等客户端进行逆向分析,包括另外一款不太知名的网游,相对来说有过一次艰辛的分析经历和成功的经验,后面的这些分析就会轻松很多。

这次的感悟是,经验的积累是非常重要的,比如如何逆向分析、如何找CALL、以及如何应对版本的升级、特征该怎么找、如何快速定位到上次分析的点,这些都是通用的。如何注入和HOOK、客户端该怎么写,有了上面的经验后就可以直接在现有代码基础上修改即可,因此可以快速实现。

值得一说的是,大学的停电以及网络设施实在是差劲,以至于浪费了很多时间,每次分析到关键地方,可能就马上要停电或者直接掉线了。其实我们可以看看,越是网络发达的国家或城市,它的互联网技术越能走到前列,因为“信息”流更加快了更加通畅了。

我把这些过程经验整理成文档,先发送给了老师–当然是没有什么结果。然后发送给了看雪的坛主段钢老师,坛主为人真的很热情,帮我推荐到了360实习,而且叮嘱我不要外泄这种文档,以免有不好的影响。360的反应还是挺快的,马上我就得到了一份实习岗位,远去北京,做恶意软件的逆向分析,然后整理出分析文档。

在360见到了诸多大牛,很多是看雪、第八个男人早期的会员,360后来上市,想必这些人也都成千万或百万富翁了吧。360的伙食待遇是真的不错,非常适合我的口味,关键是管饱管够还免费。只可惜,我不太想做这种重复性的逆向分析工作,时间久了就会乏味,而且他们让我转正后做的驱动开发也不是我的兴趣所在,虽然那个时候尚未有互联网思维,但是就隐隐感觉到驱动将来势必没落,我一直想做能跟用户连接的部分,可能跟软件情怀有关系。

实习二十多天后赶上春节放假,回家过完年后我就没有返回360了,现在想想有点对不住段钢老师,也是那时候年轻不懂事。

2008年金融危机,工作不太好找,很多招聘岗位数减少,而且很多单位不再去或很少去做我们学校做校园招聘,我们都是去其他学校参加招聘。腾讯倒是过了笔试和技术面,但在最后一轮HR面试被刷。

后来选择的上海一家网游公司,在上海干了一年半。

这一年半的工作强度太大,几乎每天晚上到23点,超强度的工作导致第二年的体检报告显示颈椎曲度变直,着实有点吃不消。但是在这个期间,也学到了很多东西,特别是VisualStudio的使用,而且把以前所学的东西更系统地整理到一起了。走到这一步,VB和Delphi便就被我彻底抛弃了,好在Pascal语言跟C很像,倒也没有浪费多少时间。有了之前的很多经验,借助于C++和VisualStudio,便可以快速实现一个小软件(工具)的开发了。

然后便走上了不断打怪升级的过程,仍然是下载工具模仿开发,MFC那本厚达一千多页的书也被啃了大半部分,虽然后来MFC确实被证实是“没饭吃”(拼音首字母缩写,寓意将来会没落),但是对于实现大部分的客户端工具和软件还是非常得心应手的,在学习的过程中也收获了很多,毕竟那还只是2009年的时候。

这中间值得一提的是,在学习的过程中写了很多博客,发表在百度HI空间上。其实早在05、06年左右的时候就开始在百度空间上撰写技术博客了,用来积累学习的知识。高峰期就是在09、10年写的最多,也就是工作强度最大的上海期间,因为学习接触的东西多了,输出自然也就多了。说这段的目的,除了说明撰写博客积累知识的重要性之外,还想说的是,百度在这点上做的不太厚道,大家都知道百度空间后来关闭了,很多博客连接都打不开了,是不是很没有节操呢?以后谁还敢在上面做UGC内容输出呢?不是自毁前程吗?

现在看来,如果零几年的时候多上网了解了解,多去社区逛逛,应该能选择主流的Java后台开发作为将来的方向。但是历史总有其必然,我选择C/C++和客户端开发也跟个人性格有关系: C/C++比Java学习成本要低(我的个人学习经历而言),业界都认为学习Java很简单,但是我觉得Java不够干净纯粹,就单单入门书籍就那么厚就足以说明,而C/C++的入门书籍都很薄。 软件情怀。也就是前面一直纠结的问题,我一直想做一款自己的软件产品,哪怕就是小小的工具也好。当然后面也确实实现了,赚到了一点点外快,虽然不多,但是这个属于副作用。对于软件产品的市场调研、需求、设计、开发、测试、上线、迭代等有了一个整体和深刻的认识。 Linux/Unix比Windows系统难用,难以上手。试想我当初学习Windows窗户系统时都那么吃力难以接受,更何况是纯命令行的系统呢。

再说到软件情怀,这个对我影响真的很大,不过好在移动互联网来临之前就早早了却了这桩心愿,并没有妨碍在移动方向的转型。而且有了过往PC端软件产品的认识,在移动上的产品也能很快适应,有了AndroidStudio这个强大的武器,开发迭代非常快速。而移动安全,之前的很多Windows安全的思想也一样通用,倒也没有什么追赶不上的说法。自此又跟随着移动互联网的浪潮前行。

前前后后说了这么多,其实很幸运自己在迷茫中选择了处在浪潮之巅的行业,无论是软件行业(虽然那时候已经是夕阳产业了)、互联网、移动互联网,也算是跟着喝到点汤。雷布斯说:站在风口上,猪都能飞起来,相较于我的资质平平起步之晚,大部分人要比我有优势的多,但是能见识到互联网的发展,随浪而行,也是一件幸事,这其实也是大环境影响人的一个典例。

而在今后的发展上,还是要多了解行业趋势,埋头苦干的同时也要偶尔抬头看看路,跟随一个好的环境或平台一同进步,逐浪而行。思维上可以多维度交叉,持续学习,stay hungry stay foolish!

感谢一路过来给予过我帮助的朋友们!愿你们一生安好!

2018-7-15


Comments

Content