生涯第一次面试

    3.27我早上起来接到HR微信消息,通知我下午去面试,以前上周说的不要实习生原本已经让我放弃了的,但是这突如其来的消息又让我跃跃欲试。我想了一想,我须要一个早上温习一下,就回复HR将面试时间改成3.28的下午。面试

    时间似箭,一去如梭,我越复习脑子里的浆糊就越多越稠,事实证实妄图短期内掌握大量繁杂的知识是个愚蠢的决定,索性挑出少许重点温习了一下。微信

    两点恰好达到公司前台,前台联系了一下就让一个工程师过来面试我了。进入房间前,工程师想让我作一下技能笔试,我内心当时是懵逼的,心想难道我就要GG在这里了吗。我一直不认为我以后学的知识会像中小学生涯那样闹闹记住来考试,因此我根本就不擅长闭卷笔试这种考核,互联网的存在让我以为本身根本不须要储备那些固定的知识,只须要记住原理框架就好了,到如今我也不知道本身的想法是否正确,但我以为脑海里的知识得成体系成网状是必须的。言归正传,还好HR已经和前台交代过我不须要技能笔试,因此我直接进行面试了。数据结构

  1. 一开场,就任位的兴趣入题,问我从何时开始关注逆向;“我回答本身高中就关注了,可是正是学习是从去年5月开始的”。紧接着是一个开放性问题,他问我怎么看待逆向工程,听到这个问题我感受很玄学,我逆向经验其实不算多,可是好在日常有一些本身思考。“逆向它是一个体力活,可是是一个须要经验以及基础内功的体力活,首先得有很好的基础知识,它们会让你对程序的大体运行了然于心,而且不会调入某些细节的坑(好比SEH触发时有个压栈Next SEH Handler的操做)里。虽然你有了基础内功,可是你也不是已经天下无敌,这个时候有须要不少逆向的经验(好比看到QueryPerformanceCounter就要有时间计数反调试的Idea,还有各类语言编译事后的样式)来帮助你分析程序。最后你内功和经验都有了,但是若是遇到一个比较生疏的程序,你仍是得花时间去不断地分析程序熟悉程序,这是必有的通过。综上,逆向是一个须要基础内功与经验的体力活
  2. 接下来他仔细看了个人简历,对个人mini-kernel比较感兴趣,面试官可能也比较熟悉Kernel,他问我是否是独立(不借助参考资料)作出来的,我心想怎么可能,Linus还差很少,我只能如实回答我借助了好些参考资料才写出来了。同时他也问了是否实现了多线程以及用到TSS,恰好我在开学一周把多线程部分给实现出来了,经过时钟中断来调度,用一个push target_address;ret的操做来实现的多线程,并无用到TSS。以后他又问了关于内存管理的过程以及寻址的流程,“内存管理就是须要先将有限的物理内存先用数据结构进行统计管理,以后在线程中须要malloc的时候给定程序一个规定好的虚拟地址(每一个线程都拥有完整的虚拟地址空间,因此每一个线程都能霸占这个堆),以后再在内核中经过物理内存数据结构的管理分配处可用的物理内存,并将它映射到相应进程的虚拟内存中(经过设置相应进程的页目录);至于寻址的话则是使用高10位来做为页目录索引,中间10位做为页表索引,找到具体的页表项,最后12位做为页中偏移定位具体地址(一页4KB恰好12位)。"
  3. 以上的都是基础知识的考察和概览,面试官恰好问到我记得比较熟的点,运气不可谓很差。以后他看到我写了掌握基础漏洞原理,就让我说一下漏洞概况。说实话,这部分其实个人practice不算多,因此很不扎实,惟一调试得最多的属栈溢出漏洞而且辅以一些bypass技巧。“栈溢出就是经过ret指令(约等于pop eip)的机制来形成的,而还有一种是堆漏洞,好比UAF就可能发生堆漏洞,当咱们第二次申请与上次释放内存块大小相同时候,系统可能会直接给咱们上次释放的内存块,然而上面若是有咱们input的污染数据,那么可能致使漏洞的发生。”以后他问了我什么状况下咱们能input进去污染数据,这时候因为我漏洞知识的不扎实,致使我彻底答不上来,“@#¥%%@#...”我本身都不知道在说什么。到了这里以后,还好面试官没有再难为我,估计也是看出来我就这点斤两,开始问我时间以及将来规划的问题,同时也和我提及我进去会作的工做(安卓端漏洞+Win端漏洞)。
  4. 通过此次面试,我知道本身的亮点是Kernel部分基础掌握得还不错,没有浑水摸鱼作出这个Kernel,其中仍是掌握了好些东西的,这样说明咱们的基础课程课设(Computer Arch/OS/Compiler/Network)真的得偏实际一点,不去coding一下,理论模型彻底就很空泛,学了不久就会忘。其次,若是是作漏洞挖掘,我目前建议在熟悉调试+OS原理以后尽快跟上CVE来进入真正的漏洞环境,感觉真实的触发条件,以及利用技巧,真正的Hacker不是活在lab中的

    以上纯属我的思考和经历,若有错误,但愿不吝赐教多线程

相关文章
相关标签/搜索