从苏宁电器到卡巴斯基第23篇:难忘的三年硕士时光 I

初次接触逆向工程

       不知不觉就来到了2013年的9月份,学校开学了,我开始正式体验研究生的生活了。按道理来说,硕士研究生是需要围绕在导师身边,每天朝九晚五地去实验室做项目的。不过我们老师没有项目,也不要求我去实验室,这也就使得我可以有更多的时间来学习自己喜欢的东西。不过尽管没有项目,老师还是给了我翻译的任务,整个研一阶段,他找了两本英文书籍,是与计算机图形图像相关的,让我们翻译。虽说翻译的工作到最后也都不了了之了,但是多多少少对我的英语水平,有了一定的提升作用,于是也就在研一的两个学期,一口气把四六级过了。记得当时我还发了一个状态来调侃自己,孩子都这么大了,还在拼命考四六级,我也算是前无古人后无来者了。

       其实到毕业的时候,我们班算上我在内一共有三个结婚的,当然我是在读研究生之前(2011年)就已经结婚了,2012年有的小孩。而我们班还有一个,大概是研二的时候结的婚,研三有的小孩。还有一对,男生女生都是我们班的,也是在毕业之前结的婚。当然我们班在毕业前结婚的还有,传说还有两三人吧,但是这三对是我比较确定的。可见,现在研究生,结婚生子也不是什么稀奇的事情了。

       另外,尽管我最初下决心要好好学习游戏引擎的相关知识,但也仅仅是三分钟的热度,最后也不了了之了。学了一点之后,觉得自己不是这块料,对这方面实在是不感兴趣,也就放弃了。

       其实在这个时候,我对于自己的未来是非常迷茫的,不知道自己究竟应该研究什么方向,至少数媒是没戏了,毕竟不喜欢,觉得自己未来毕业也许会找一份C++开发的工作。也就是在我最为迷茫的时候,我在网上无意间接触到了“小甲鱼”的逆向分析的课程,突然感觉眼前一亮,原来计算机领域还有这样的一片天地啊。我跟着视频中的内容做了几遍,然后又学了小甲鱼的PE结构解析的课程。其实当时我只是觉得PE结构学起来比较有意思,但是看了两遍之后,也没记住多少。于是我研一的第一学期也就这样过去了。

       寒假的时候,为了打好基础,我把小甲鱼的16位汇编以及Win32汇编也学完了。其实这对我的帮助是很大的,毕竟汇编是逆向分析的基础。不过这里面最重要的还是16位汇编,学完这个,那么在逆向的过程中,基本不会有看不懂的代码了。而Win32汇编课程更多的是讲解系统底层以及开发的知识,因此对我的帮助并不显著,但也是需要掌握的。

       现在回想起来,那个时候打基础的阶段真的是非常重要,尽管当时我所学到的知识并不多,但至少是开了一个好头。以我现在的眼光来看,小甲鱼的课程依旧是很棒的,我也相信除了我以外,很多安全圈内的人士或者不是安全界人士(甚至是今天的大牛),都是看着小甲鱼的视频成长起来的。他的课程直到今天也还是免费的,只是如果大家有意向,可以购买鱼C论坛的会员,或者购买小甲鱼的U盘,里面有他的课程。在此我也希望大家能够尊重知识,为了学习知识,你今天的付出绝对是值得的,不要吝啬你的钱袋子。只有支持这些辛苦的讲师,他们才会有动力不断地更新更加优秀的课程。你今天付出的金钱,未来一定会成百上千倍地挣回来。对于讲师而言,他们真的不容易,有些真的就是要靠大家来过生活的。

牛刀小试

       转眼就来到了研一的第二学期。但是我的学习在这个时候却遇到了瓶颈,那就是我感兴趣的小甲鱼的课程全都已经学完了,因此我的技术水平也就在原地踏步。当时为了报答小甲鱼的辛勤劳动,我还买了会员,毕竟不能让他白讲,都挺不容易的。

       那个时候我几乎每天都会玩FIFA07(劳逸结合嘛),自我感觉水平还不错,但是即便是最高难度的电脑(世界级)也不是我的对手,我知道其实这里面还有一个隐藏难度——传奇模式,但是为了解锁这个难度,实在是一件很麻烦的事情,需要完成许多变态的成就。于是在一个周六的上午,我突然心血来潮,不如研究一下怎么把传奇难度调出来吧,然后在午饭前,我就完成了这个case。这也促成了我在CSDN的第一篇博文——《逆向工程第001篇:解锁FIFA07传奇模式》。那个时候写技术博客完全是一时兴起,并没想过未来CSDN会给我带来极大的帮助(以后会详细讲到)。而作为事后诸葛亮,我觉得像我们这种计算机出身的,坚持写技术文章确实是好处多多的,特别是在推广自己方面,应聘时是会在无形中为自己加分的。

       然后我觉得应该一鼓作气,于是分析了仙剑一的存档文件,前后大概花了一天的时间吧。最大的成就是实现了“无限次”(其实也就是99次)使用“酒神咒”的问题,当时真的是满满的自豪感啊。

酒神咒

       于是这也就促成了我的第二篇文章——《逆向工程第002篇:打造自己的仙剑奇侠》。其实这两篇文章的写作,仅仅间隔了一周多的时间,当时还以为自己很厉害,于是打算把自己玩过的游戏都研究研究。然后就打算分析一下PSP的《战神》游戏存档,结果就阴沟里翻船了,直到现在也没研究明白(其实不是延续到现在,而是当时没研究明白,直接就放弃了)。其实我所研究的这些,并没有用上我之前在小甲鱼的课程中所学习过的知识,而都是在进行二进制数据的分析,说白了,就是比对数据变更前后的存档文件在二进制层面的不同。直到我的第三篇博文——《逆向工程第003篇:跨越CM4验证机制的鸿沟(上)》才使用了爆破的手段实现破解。但是爆破手段毕竟是低级的,并没有多大的技术含量。逆向分析出验证算法并编写出注册码生成器才是最终目的。无奈当时我水平不够,也是拖了好久才完成(此是后话)。

       我的CSDN博客里面,逆向工程系列的每一篇文章,用我今天的眼光来看,都会对我当时的成就而感到无比骄傲。那是我走上安全道路的一个极好的开端,如果可以,我还会把逆向工程系列不断地写下去,打造一个精品栏目,即便没人赏识,但只要我自己认可,那也就可以了。我现在也在考虑,要不要把这个系列的文章也录制成视频,从而将相关技术更加广泛地传播出去。

差点变成游戏攻略视频制作人

       之前也说了,研一的时候,我除了学习之外,还很喜欢玩游戏,主要是足球类的比较多。另外,PSP也是我的最爱。而我最喜欢的莫过于《战神:奥林匹斯之链》了。

《战神:奥林匹斯之链》游戏封面

       当时由于我玩的是最高难度,很多地方过不去,于是我就上网找攻略视频来看。那个时候看的最多的就是黑桐谷歌的视频攻略,对我帮助很大,利用他的方法还真的在最高难度下通关了。要知道我以前打最低难度都费劲。

       也正是由于不忙,我后来也看了黑桐谷歌的其他视频,尽管那些游戏我压根就不玩,但是看攻略也还是挺有意思的。这个时候我就突发奇想,要不我也试试做一套视频攻略吧。而我最熟悉的莫过于战神,那就做一套这个游戏的最高难度通关视频。

       说干就干,我配置好了最简单的软硬件环境。但是这样就有个问题,录制的时候非常的卡,极其影响我的发挥。很多时候不是我的水平不行,而是实在是太卡了,很多招数根本就发不出来,只能眼睁睁地看着奎爷被小怪围殴。即便如此,我也不会去买视频采集卡这样的专业设备,而是一点一点的硬打。每两个存储点之间,我就录一集视频传到网上,并且还配有我的攻略解说,显得也还算是专业。

我的视频攻略

       直到最后一关,刚进皇宫的时候,由于实在是太卡,实在是很难打,我就想歇几天。没想到一歇就歇到了现在也还没录完,加上我的PSP还坏了,这就更录不了了。本来我还打算要把《战神:斯巴达之魂》以及《但丁地狱》也录完,可惜也没啥机会了。不过以后如果有空,我还是想把当初的想法都实现的,配置专业的设备,把这几个优秀的作品都录完。

       现在想想,假设我当时一鼓作气把这几款作品都录完了,那我现在有没有可能成为专业的游戏攻略视频制作人呢?这一切还真是不得而知。大家如果有兴趣的话,现在在网上还能够搜到我当时录制的视频,可以去看一看,还是挺有意思的。

       就这样,我的研一生活也就在平稳之中度过了。事后觉得,这真是平和的一年。

我与猎豹移动的初次接触

       尽管刚入学的时候我对自己未来的发展方向迷茫过,但是对于毕业后我去哪里工作这件事,是没有任何疑问的,就是回家,留在珠海。之前说过,最开始读研的时候是想学习游戏引擎做游戏的,那个时候我最想去的其实是珠海金山的西山居游戏。后来学了逆向,那么其实我还是想去珠海的金山,只不过变成了猎豹移动(原金山网络)。而猎豹移动也是我这种学习逆向的人留在珠海的唯一选择了。而我家就在金山旁边,记得九十年代初我们全家刚迁到珠海的时候,金山还是栋旧楼,后来盖了崭新的大厦,还是挺壮观的,所以我或多或少地见识到了金山一步步的变迁。而且我也觉得,既然金山离家这么近,那么即便是总加班或者工资不高那也无所谓了,当时就是一心向往着能够去金山的。

       我们北工大专业硕士的培养模式是,研一用来上课,利用一年的时间把所有的课程结束掉。然后的研二研三要么跟着导师做项目,要么自己出去找实习(毕业答辩以前需要实习满一年)。我属于后者,找实习只能靠自己了。研一结束后的那个暑假,我记得很清楚,回到珠海家的当天晚上,我就给猎豹移动发了求职简历,那时我的简历非常简单,内容如下:

姓名:姜晔    性别:男  

学校:北京工业大学

专业:软件工程

学历:硕士研究生

个人技术博客:http://blog.csdn.net/ioio_jy

所获证书:
1、外语类:大学英语四级(534分)、大学英语六级、英语托业考试(710分)、实用日本语鉴定考试(F级)      
2、计算机类   :计算机技术与软件专业技术资格考试(程序员、软件设计师)、全国计算机等级考试(二级C语言、四级网络工程师)

专业技能:
1、能熟练阅读x86汇编语言代码。                  
2、能够熟练使用OllyDBG以及IDA进行动态与静态分析。                
3、有底层与逆向分析功底,分析并修改过几款知名游戏的存档文件。                 
4、有C/C++基础,编写过逆向分析与安全类的小工具。                  
5、能无障碍阅读诸如英文MSDN等技术文档。

自我评价:工作认真、积极、负责,有耐心,喜欢底层研究与逆向分析的工作。自学能力强,善于钻研,愿与他人沟通交流并分享。

       结果第二天上午就接到了他们人事的电话,约在下午进行电话面试。

       其实我在之前学习小甲鱼的课程的时候,是记录了很多笔记的,按道理在电话面试之前应当好好看看这些笔记,但是当时不知怎的,信心爆棚,觉得自己一定没问题,就没看。事后想想,这确实是一个败笔(尽管就算看了也不见得有用,但至少能够回答出很多问题,这就说明小甲鱼的课程确实很实用)。

       对于下午的面试,我还是挺紧张的,紧张得中午都没睡好觉。其实,就算中午睡好了,结果也还是那样。接到面试电话,首先是简单地说一下自己的情况,然后就是各种各样的技术问题,我是一问三不知。当时我的内心是相当崩溃的。万万没想到他会问这么多这么有深度的问题,比如内核、漏洞、软件调试等等。当然,即便是普通的问题,很多也没回答出来。几十分钟的煎熬过后,我胆怯地问了一句:你觉得我能够胜任反病毒工程师这个职位吗?面试官回答道,其实我觉得你的基础还是比较薄弱的。我又说,你看这样行不行,不论这次面试的结果如何,你都通知我一下,可不可以?他首先迟疑了一下(后来才知道他们对于面试不过的人,是不会通知的,可能是这件事造成的迟疑。或者说是因为我表现得太糟糕了,不好当面拒绝,才迟疑的。估计他没有遇到过像我基础这么差,还有脸面应聘金山的人吧),不过最后也答应我了。

       尽管面试回答得并不好,但是我当时竟然依旧有信心进入到下一轮的面试,甚至还在畅想着每天应该几点起来上班。但是不管怎样,等待中的我,内心还是非常忐忑的。那种心情很难形容,总之每天过得并不舒坦。大概过了四天,我在吃午饭,无意中看了一眼手机,发现昨天收到了一条短信(竟然晚了一天才注意到这件事)。是一个陌生号码发来的,他说他是金山面试我的,说很遗憾,我没能通过面试。看完了这条短信,我怎么形容当时的心情呢,应该说是跌入了无底深渊吧,内心比那次没有导师要我还要拔凉。毕竟唯一的出路被堵死了,我根本就不知道自己以后要怎么做了。

       这里我给出我和金山面试官通过短信的完整交流内容,希望大家能够从中有所收获:

面试官:你好,我是金山网络面试你的,很抱歉通知你面试没通过!继续努力!谢谢~

我:多谢您的通知,可以的话我想再请教两个问题,第一个是毒霸招聘两类人,一个是病毒分析,一个是毒霸编写,后者要求较高,而您当时面试的时候问了我很多关于后者所涉及的问题,是不是说其实这两个职位要求是一样的呢?第二个是,请问据您所知珠海是否还有其它安全类的公司?期待您的解答。

面试官:病毒分析跟毒霸客户端开发要求不一样,病毒分析偏重汇编底层,逆向,病毒原理,同时要求一定的开发能力,和对系统底层的了解。而客户端开发主要要求开发能力,偏重与开发方面!

珠海据我所知,再没有了!

我:谢谢,我会努力

面试官:另外,毕竟新人,我们问的并不是要求全会的,而是如果这些里面某一方面比较好,比较出色,其它东西不懂也没影响。

我:多谢您的意见,我会继续努力提升水平,过几个月还会再投金山简历,希望能够成为同事

面试官:嗯,加油!

    

       估计我也是奇葩了,面试没过,还缠着面试官聊了这么多,不过其实从这里也能够看到金山招聘的一些隐性要求,大家如果也想面试类似职位的话,可以参考一下。尽管面试没通过,但是我与这位面试官的故事,未来还会有所涉及。

     《从苏宁电器到卡巴斯基》终稿完整版,请访问

       https://user.qzone.qq.com/3149487460/blog/1494822165

发布了122 篇原创文章 · 获赞 672 · 访问量 65万+

猜你喜欢

转载自blog.csdn.net/ioio_jy/article/details/52061072