0xD009
3293 字
16 分钟
写在大三暑假——实习篇
2024-08-08

本文尚在更新中…

0x1 写在前面#

今年年初,笔者突然收到腾讯 HR 的消息,他们邀请战队参与今年的腾讯游戏安全竞赛,一来二去就把我拐进了校招群,看到校招广告上写着的“面向 25 届实习生”,我忽然一怔:倘若不读研,我现在须得准备找工作事宜了!

我当即失眠了几晚,感到自己上大学一坤年(两年半)来一事无成,万幸能获得保研机会,再避几年风头,但,一者,我在学校的温床中待的实在过久,终有一天要离开,去闯荡社会,若无准备,到时候恐怕无所适从;二者,研究生导师未必允许我在读研期间实习的,我毕业之时若仍无什么实习经历,想必在求职市场中无甚竞争力;三者,世界那么大,我也想去看看!

于是,笔者开始准备简历和材料,陆续投递了几家大厂的安全相关岗位。

0x2 面试经历#

笔者先投了腾讯的安全技术,大概一周后有人打电话来问有没有兴趣做游戏安全,笔者实在不太了解游戏安全,遂推辞了,没想到电话那头称,“你平时做的也应该是 Windows 平台的一些软件逆向,其实都差不多,明天来面试一下试试吧。”笔者实在年轻,最后同意了。

当晚把《加密与解密》大致浏览了一遍,就上了。

面试官是一个人,上来没有按照预想的那样问基础、问比赛,第一个问题是“游戏外挂有什么实现手段”,笔者当时答的是“修改数据、修改代码”,然后他顺着问“怎么针对这两种外挂实现游戏保护”,笔者比较学院派地回答了签名,面试官又问,实际场景下,代码在内存中是不变的吗,为什么签名是可行的,笔者因为面的是腾讯的游戏部门,当即想到了腾讯的 FPS 游戏(反外挂做的比较出色),这类游戏一般比较注重性能,在运行中如果涉及到代码自修改似乎不太现实,所以回答的是不变,然后他就开始纠正我,称存在地址随机化这种手段,可以改变代码加载的地址。笔者听了之后非常疑惑,随机化的地址和代码是否改变有什么直接联系吗?不过面试官好像是默认我是连地址随机化都不知道的小白了,技术这一 part 就结束了。

接下来面试官又拷打了我的两个项目,结果上称学术界做的研究和工业界的需求很不相符,意思就是也不满意了。

面试十多分钟就草草结束了,最后面试官开始提出建议,认为笔者作为学生很优秀,要申请一个好的研究生导师是没问题的,但作为一个从业者还不够,我参加的这些比赛成绩很不错,但是比赛只是一个入门的手段,应该多多了解工业界的需求,然后说他本来也不想招我们这种顶尖高校的本科生去做实习,深造率太高,还是希望能招到一些实习之后能直接转正的,减少不必要的培养成本,把我从池子里捞起来是希望我在深造完之后再想找工作时,能够对该部门有些印象,相当于“提前布局”。

我想他的提前布局至少在我这里是失败了。

这次面试让我萎靡了一段时间,感觉自己找不到班上了,还好有人安慰鼓励我,也感谢替我操心的小学同学。事后笔者也确实去调研学习了一些工业界的东西,不过工业界的东西最好还是亲自到工业界体会,但工业界实习的机会需要靠对工业界的了解来争取,这是经典的鸡生蛋、蛋生鸡问题。

过了大概两周,华为的终端软件部给我打来电话,希望我到他们部门去做安全,笔者并没有投递华为,去年参加学校的鸿蒙菁英班时填过一次简历,但性格测试没有通过。既然有机会自己找上门来,肯定是不能放过了,于是马上投递了简历,并且拉上了另一个正在找实习的 pwn 手队友一起。

后来还有人来跟我们介绍部门的业务,称主要是做安全开发的,但是也有适合我们的蓝军岗位。不过华为的流程是出了名的慢,这事结束之后就没啥音讯了。

又过了大概两周之后,腾讯的另一个部门邀请我参加他们的面试,这次面试很愉快,大致的流程和这篇博客很相似,笔者也是和博客作者一样,面完之后就很兴奋,因为感到自己答得不错,不过后来并没有通过面试,这位作者也没有更新他的二面,恐怕也是同样的际遇。复盘下来感觉面试官可能还是希望我能多了解一些漏洞相关的知识,而我在这方面确实比较薄弱。

到这里笔者有些心灰意冷了,在跟小老板聊过之后(见保研篇),决定不再投实习了,专心科研,磨练本领。

但华为又突然出现了,开始推进流程,笔试上,稍微努了点力把战队的 ctftime 排名打进了全球前 200 名,就获得了免试,第一面,主要问项目,面试官可能一直没有理解我的项目是做什么的,说他们部门里也有人在做类似的事情,开始经典问优势,他似乎无论如何都认为我的动态的工作相比静态是画蛇添足的,最后我通过一个使用场景说服了他。接下来是算法题,没有让实际动手写,是简单的滑动窗口+哈希表,我比较轻松地把思路说出来了。最后是闲聊环节,面试官又跟我聊了字符串混淆相关的一些问题,怎么攻?怎么防?防了再怎么攻?不停迭代,最后都落到了内核层,他听了之后很满意,结束后马上给我过了。

第二面就在第二天,是主管面,问了一些安全编码相关的东西,还关心了我的性格测试,问我印象最深的比赛,比较随意。工作地的选择上,我表示无所谓,最后去了面试官所在的杭州。

后来我重新做了性格测试,内推我的人还来和我分享了过性格测试的关键技巧,大概就跟网上流传的差不多。最后顺利拿下 offer,不过正式发 offer 已经是六月底的事了,流程长名不虚传。

后来正式开始实习之后,上面接触过的几位也在实际工作中线下见到了。

0x3 实习准备#

主要是租房问题,本来打算整租公寓,但是线下看了公司附近的两家公寓之后感觉环境实在是太差了,而且也不便宜,最后在亲姐的建议下选择了自如的一家合租转租,有独立阳台,私密性也相当好,大学生还只用交一半押金,但是只能租 52 天,我原本打算实习一个月,因为租了这间房而多实习了一阵。

0x4 实习经历#

进入公司之后先配了大概一周的环境,全量编译 OpenHarmony 并烧写,第一次成功编译花了我 7 个小时,一天工时才 8 小时,后面证实这个工作其实意义不大,而且感觉组内的实习生引导一般,离职前看到隔壁组的文档详细地介绍了编译的过程(毕竟是个巨型项目),提到了我当时踩的不少坑。

接下来笔者跟着一位前辈做鸿蒙的应用代码签名,这个特性是 iOS 有而 Android 没有的,Open Harmony 本是依赖 Linux 5.10 内核的,代码签名也成功在这个版本上库了,后来依赖版本要升级到 Linux 6.6 内核,由于内核的一些变动,需要做一些修改重新适配代码签名的特性,我实习期间主要是在做这个工作,大概花了 2-3 周。

代码签名的具体逻辑这里不便多提,不过这些代码也都是开源的,感兴趣的读者可以自行到码云阅读。

整个工作做下来就像在做一个操作系统大作业,让我更深刻地理解了操作系统的编译流程和文件系统,内核编程水平有所提升,git 的使用水平更是大大提高。

除了这两到三周的净工作量之外,其他时间可以说是一直在社交,华为,或者说可能是所有大厂,员工都要做好随时被连麦的准备,可能你和同事打字聊着聊着,他感到沟通成本太高,就会直接砸来电话,这常常让我无所适从,可能对所有 i 人都是如此,这时,性格测试的回旋镖终于打中了我。

在真实的工作场景中,除了埋头苦干码代码,还有一些宏观视野下的因素需要注意,比如责任田、模块耦合度等,笔者在工作时由于发现某模块影响了代码签名的特性,而还没有完成高版本适配,于是自作主张额外完成了它的适配,最后由于该模块不受组内管辖而被 mentor 打回。遇到这种情况,要做的是“解耦”,不过虽然力行解耦,笔者还是感到整个系统的耦合度相当不低。值得一提的是,提了代码之后,有负责该模块的同事找过来“对齐”,笔者把之前没解耦的版本发给他做参考,第二天他就几乎原封不动地提了该版本的代码,让笔者感到之前的解耦有些无用功。

另外,从提出 PR 到代码被正式合并,要做的测试也是非常多的,而且在测试的过程中,测试用例的开发也在同步进行,笔者作为适配者,经常需要两头跟开发和测试同步代码修改。

接下来侃侃华为加班这事,就我们部门来说,mentor 说正常时候大家是 21 点走,忙的时候大概 23 点,每年有两个月忙,月末周六加班,其他周六自愿,不过加班有双倍工资,大家加班的意愿普遍较高。

加班到 20:30 之后,公司会提供免费的夜宵,实际上是一些水果、饮料、面包之类的,据说杭研是有熟食的,不过笔者到离职也没有机会吃到;加班到 22:00 更是可以报销打车费用。

最后最喜闻乐见的就是聚餐环节了,华为的聚餐事给报销的,美美跟部门一起去爽吃了烧烤龙虾。离职前,mentor 还单独请我吃了一顿,以个人名义和我聊了很多职业规划相关的话题,也给了一些建议,感谢🙏。

然而返校后看到体重秤上的数字,笔者都一度怀疑秤坏了,想是夜宵里的饮料喝的太多了。哎~

0x5 实习总结#

总的来说是一次很好的经历,真正到工业界去体验了一把之后,不仅缓解了之前的焦虑,也更清楚努力的方向了。建议大家还是多实习一段时间,笔者到最后两周时,由于手上的工作已经做完,而开始新的工作又需要至少一周的起步期,所以几乎一直是无所事事,最后只能含泪在华为内网学了一点东西。

0x6 番外#

华为内部还有自己的 CTF 月赛,由于笔者的另外两个战队队友也恰好在华为实习,于是组队打了一把,喜提第二,获得 250 积分,可以以 10:7 比例换算成人民币,然后通过公司采购一些小物件,主要是那种自己买又觉得没必要,但确实能提高生活品质的东西,比如笔者选择的电动牙刷。

写在大三暑假——实习篇
https://0xd009.github.io/posts/写在大三暑假实习篇/
作者
0xD009
发布于
2024-08-08
许可协议
CC BY-NC-SA 4.0