起落落落起的春招找实习之旅

2.28——5.13,我的两个多月的找实习征程终于结束了,拿到了第一个也是最后一个offer,而我也终于有时间和精力记录一下这段痛并快乐着(?)的过程,不过结果最终还是好的。感谢Tencent Security。本着想离开北京去南方闯荡一下的我,今年北京的公司都没投(现在看来真的是孤注一掷),再加上今年互联网形势比较严峻,而且今年百度,京东,美团滴滴什么的都没有安全岗,所以最后也就只感受了腾讯和阿里的面试,这里记录一下。
面的第一家都是腾讯科恩实验室,因为过年的时候就发招聘了,一面3.5号,电面54分钟。

  • 自我介绍,一开始询问我简历上的web安全(一开始打CTF是从web安全开始的,不过已经好久不玩了,回来的时候我就把这行删掉了,所以简历这东西已经不再接触没准备的东西千万不要写)
  • 简单介绍一下项目,然后开始深挖简历,中间穿插着技术提问
  • 项目里静态分析和基于xposed动态工具介绍一下,如果不使用xposed,怎么实现动态分析工具
  • 做过脱壳没有,Android上的加固,脱壳技术介绍一下
  • 如何从海量的APP找出一个二次打包的应用呢,有几种思路(流量特征,代码相似度检测,UI节点遍历等,开放题)
  • xposed框架原理(zygote劫持,修改method结构体,将Java方法转成native方法hook。需要对xposed的源码有一定的了解)
  • APP的漏洞了解吗,应用克隆漏洞呢(支付宝那个),activity暴露攻击怎么利用,webview漏洞,还了解什么漏洞
  • 如何Hook动态加载的dex(我的第一次面试实在是太紧张了,连自己博客写的loadclass方法都忘了)
  • ARM和x86汇编有什么区别,函数调用约定,函数传参和返回
  • 栈溢出原理,格式化字符串漏洞,有哪几种保护手段,怎么绕过栈上canary保护,ROP攻击原理

第一次面试是在太紧张了,很多东西没准备好,自己简历上可能被问到的技术点也准备不足,只能给自己60分吧。二面3.15号,隔了10天,组长面的,49分钟。

  • 自我介绍,项目就没有一面问的那么详细了
  • 现在Android平台上的几种加固方式(动态加载,类抽取,混淆,vmp),怎么脱壳,及各种技术细节
  • xposed框架原理(面试官很爱问这个问题),Frida原理,Frida和xposed有什么区别
  • Got表hook和inline hook区别
  • selinux安全相关
  • Android系统从按下开机键,启动流程是怎么样的(设备初始化,init进程,zygote进程,dalvik实例)
  • webview漏洞原理和防护,支付宝的克隆漏洞技术复现细节(腾讯家很爱问…)
  • 做过APP自动测试工具没有,这些漏洞如果编写自动化测试框架有什么思路

因为有了一面的经历,二面发挥的我觉得自己是比较满意的,这次给自己打90分吧。完了之后x哥说面试官是不是说了个你这边问题不大,我说我也听到了。晚上的时候发现官网的简历被IEG锁定了,然后被我推到了下个周一。到了周一3.18号,戏剧性的事情来了,下午突然接到了腾讯北京分公司的电话,上来说他这边是云鼎实验室的(我一听怎么这么耳熟啊),看我的简历还行捞到了要面试,晚上和老宫老郭饭饭去北大看CUBA的时候又接到了约好的IEG面试,当然了这两场面试都被我婉拒了,因为我是奔着科恩去的很怕其他部门的流程会把我这边互锁,当时来看我的选择是没问题的,当然只是当时。然后噩梦来了,提前批快结束了时候科恩这边的师姐告诉我实习生名额有限,可能没法给你这个offer了,然后问二面的面试官也打电话说秋招还有机会,问我要不要再引荐之前拒掉的部门。就是4月1号那天,4月的第一天,那天真的是体验到了从高空重重摔入低谷的感觉,现在想起来依然很恐怖,这些文字是描述不了我当时的难受心情的。
中间穿插了阿里移动安全的面试,不得不说阿里的面试直接吓到我了, 一面两个面试官,46分钟。

  • IDA有个F5的功能,那么如何阻止破坏F5分析呢(破坏堆栈,滥用noreturn函数)
  • 列举几个花指令的代码片段
  • Windows常见的加壳,脱壳技术
  • windows原创注入和hook的几种实现(其实从他问出阻止F5反编译的问题开始我就觉得这场面试要难了)
  • Android的init_array和JNI_OnLoad的时机问题,如何绕过init_array段中的反调试
  • xposed hook原理,xposed究竟是如何实现一个dalvik模式的函数hook的,Frida是如何实现native函数hook(好像还有一个问题记不起来了,因为第一次听说..)
  • Android常见的加固和脱壳技术,vmp了解吗,如何让你设计一个虚拟机保护你怎么实现
  • Android反调试的几种手段
  • ollvm混淆的原理,手段,列举指令替换的例子,如何实现的控制流平坦化
  • iOS砸壳工具原理(DYLD_INSERT_LIBRARIES注入dylib动态库)
  • iOS如何在不越狱的情况下去hook一个c函数,了解fishhook吗,Method Swizzling呢
  • 编程方面:static函数的区别,局部变量和全局变量放在哪个段,局部变量一定都是放在栈上吗,特殊情况
  • int a(int b){ return a?100:10; }这个函数的作用是什么,用你最熟悉的一种汇编语言实现,这个函数的汇编指令大体上分成那几个模块

不得不说阿里的面试难度还是挺大的(我只能复现这些问题,因为有些问题真的是第一次听说),再加上我准备不足,于是一面就GG了,如果阿里能给我二面的话我觉得我还是能有希望的,听说阿里今年每一面只要评级A+的,没办法,很遗憾。我觉得阿里集团安全想招的是我建哥这种级别的人,而我连建哥的1/10都没有,当然我建哥这个层次的人是不屑于去996给人打工的,即使是阿里什么的。
于是四月上旬就在这种痛苦的生活中度过了。到了四月的正规批,被csig后台策略安全捞了但是面试隔了一周,所以最后的面试都已经是四月底了 一面深圳的电话,32分钟。

  • 看你比赛很多啊,你这些比赛收获最大的一个题目是什么
  • 现在这种爱加密和梆梆壳是如何函数级加密的,脱壳思路是什么
  • 有没有编译过Android源码,怎么编译内核修改traceid字段实现的反调试bypass
  • dalvik和ART虚拟机上函数hook区别是什么,ART虚拟机为什么执行速度加快(dex2oat,安装的时候编译成native机器码跑)
  • 混淆的so库有什么分析经验,最擅长一门的编程语言是什么,用过IDAptyhon吗
  • 给你一个商业保护题目分析一下,给你一周的时间,不会的话写一下大体的分析。

二面是总监面(加了微信之后Google搜了搜知道是二面是总监),因为本来一周的题目我两天分析完给他发过去了,可能他也比较满意,全程聊得都很轻松。三面就比较奇葩了,问我什么怎么设计一个类似于斗地主一样的棋牌游戏,怎么设计一个操作系统呢,从日志里取出现次数最多的QQ号代码思路,我寻思我面的不是安全岗吗,这都是什么问题啊,四月底是最后一天HR面试,这个其实也需要好好准备一下,小姐姐声音很好听,口头禅就是OK,了解

  • 介绍一下你的家庭状况,教育背景
  • 身体状况怎么样,平时运动吗,心理健康情况怎么样(?)
  • 你的做过最失败的一个项目是什么,遇到过最大的挫折是什么
  • 你怎么开始一个全新领域的学习
  • 为什么想来腾讯
  • 为什么要来南方发展,以后人生有什么规划

曾经两拒腾讯的我最终还是被腾讯收留了,感谢腾讯安全,感谢陪我面试走下来的x哥和小强,感谢大家对我的支持和帮助。这期间还有cert中心的老哥向我抛橄榄枝,不过我的初心还是想去互联网大厂的,经过这两个多月的历练,感觉自己还是太菜了,需要学习的东西还有很多,在这个过程中得到的收获还是挺大的,对我以前的学习深度和技术思维都有了新的思考,以后要走的路依然很长,后续想起来什么再补充吧。