第007篇:腾讯管家反病毒工程师-电话二面
最后更新于:2022-04-01 07:39:42
我在1月8号的下午三点,接到了腾讯电脑管家反病毒工程师的电话二面。腾讯这次又是突然袭击,我丝毫没有准备。不过我上网看到有人竟然在晚上七点多还会接到腾讯的面试电话,这也就说明大家以后如果向腾讯投递了简历,那么就一定要时刻准备着。
这次的面试问题要比上一次更加的深入且全面,整个电话面试持续了22分钟。如果拿腾讯的面试问题与金山相比,最显著的区别在于,腾讯的这次面试是完全围绕着我的简历进行的,也就是说,我的简历上有什么,面试官就问什么。所以我们一定要把自己的优势完全体现在简历上,并且要对简历内容非常熟悉才可以。而金山主要是针对于基础知识的考察,几乎涵盖了安全领域的所有可问的问题。当然也有可能是因为我在投金山时,简历内容实在是乏善可陈,面试官觉得从我的简历中实在是找不出什么可问的。这里我贴出我向腾讯投的简历(部分),大家可以结合我的简历,看看面试官是如何提问题的。
**![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-17_56c428a955cf9.jpg)**
图1 我的简历(部分)
由于我的简历基本是依据我的博客内容创建的,所以面试官向我提的问题,当时我都会回忆出博文内容,然后再做解答。只有个别的问题我的博文才没有涉及。接下来我会给出面试官提出的问题,之后我会加上我当时的解答,如果我的博文有涉及,我还会贴出博客地址,供想要完整答案的朋友方便进行查询。
**1、你的简历中提到你曾经逆向分析过游戏存档文件,请说说你是如何分析的。并讲讲你的注册码生成器的算法是如何得出的**。
其实这个问题与上一位面试我的面试官的第一个问题很是类似。我就回答说首先需要找到切入点,查找游戏中的金钱或者游戏点数,利用十六进制代码查看工具对存档文件进行搜索比对,包括人物属性也可以这样查找并修改。某些复杂的部分,比如法术,我还需要使用十六进制对比软件才可以。而注册机的编写,我需要利用IDA Pro来静态分析游戏的验证流程,同时也需要使用OD进行动态跟踪,查看数据的变化。
有兴趣的读者可参考:
《[逆向工程第001篇:解锁FIFA07传奇模式](http://blog.csdn.net/ioio_jy/article/details/26754257)》
《[逆向工程第002篇:打造自己的仙剑奇侠](http://blog.csdn.net/ioio_jy/article/details/28142093)》
《[逆向工程第005篇:跨越CM4验证机制的鸿沟(上)](http://blog.csdn.net/ioio_jy/article/details/40021179)》
《[逆向工程第006篇:跨越CM4验证机制的鸿沟(中)](http://blog.csdn.net/ioio_jy/article/details/41991005)》
《[逆向工程第007篇:跨越CM4验证机制的鸿沟(下)](http://blog.csdn.net/ioio_jy/article/details/41994047)》
**那么你所分析的存档文件是否经过加密?你分析过加密的存档文件吗?**
我答,我所分析的《FIFA》游戏和《仙剑奇侠传》游戏的存档文件都是没有加密的,我也没分析过加密的存档文件,不过我正打算分析一个。(我其实最开始分析的是PSP的战神游戏的存档,但是由于它可能是进行了加密处理,我水平有限,使得我的分析就搁浅了,以后应该会重启分析,并将分析过程写入“[逆向工程研究](http://blog.csdn.net/column/details/reversing.html)”系列中)。
**2、你学习这些知识有多长时间了?最初为什么学习这些?**
我答道,从我对这个领域什么都不知道到现在为止,大概是学了一年,而真正接触反病毒的知识,也就是这半年的时间。我最初念研究生的时候,对自己未来的方向并没有一个明确的认识,直到一个偶然的机会,看了“小甲鱼”的利用OD进行破解与PE文件结构的课程,觉得这个领域很有趣,就开始认真学习这方面的知识。
**3、请你说说免杀都有几种方式。**
面试官向我提这个问题,我心里一惊。虽说关于免杀的知识,我或多或少懂一些,但是毕竟久未接触,很多东西已经记不清了。而且我的博文中还未涉及到关于免杀的知识。于是我说,首先,加壳可以算是一种免杀,然后比如在代码中加入花指令也可以免杀,或者我们可以提取出特征码,进行修改并隐藏,也能够达到免杀效果。
**花指令都有哪些?**
我答,比如pushad与popad就算一种花指令,其它的一时想不起来。
(后来查书,其实我还是把要点都答出来了。对免杀有兴趣的朋友,我强烈推荐任晓辉的《黑客免杀攻防》,这本书可以说是免杀类书籍的独苗。由于免杀这个领域的知识很多,在此我不再列出标准答案。)
**4、你对漏洞了解多少?**
我答,对于漏洞,我目前仅仅懂一些基本的原理,比如缓冲区溢出漏洞。我还没达到独立发现漏洞的水平。
**那你说说什么是缓冲区溢出漏洞。**
我说,比如有一条CALL语句,那么系统在执行这个CALL语句之前,会将下一条语句的地址压栈。那么如果我们能够找到栈中该地址的位置,就能够利用溢出的办法,将该地址修改为我们想要执行的语句的地址,别有用心的人就可以根据这个,让程序去执行恶意代码了。
有兴趣的读者可参考:
《[反病毒攻防研究第003篇:简单程序漏洞的利用](http://blog.csdn.net/ioio_jy/article/details/39012563)》
**5、你对内核了解多少?**
我说,关于内核,我目前仅仅是初学阶段,包括WinDbg,也是刚刚开始学习使用,目前只会利用WinDbg进行结构的解析。
**既然你是初学,那么我问你一个简单的内核问题,请你解释一下什么是“进程环境块”,也就是PEB。**
我答道,我曾经学过如何隐藏DLL,它就是利用了PEB的知识。我们首先需要根据PEB找到TEB,里面有三条链表,想要隐藏DLL,只需把DLL在这三条链表中脱链即可。
**那么这三条链表叫什么名字?**
我答,记不清了。DLL脱链后,就能够躲过一些安全类工具的监测,但是“冰刃”依旧可以检测到。
**“冰刃”采用的是什么原理来检测的?**
我答,这个我曾经看过一篇关于这个的文章,但是没看懂,也就不清楚。(通过查资料得知,“冰刃”在枚举进程模块时使用的是ZwQueryVirtualMemory,有兴趣的读者可参考看雪论坛jokersky的文章《[【原创】【屠夫科普】R3枚举目标进程加载模块【C++标准版】【Part.1】【Part.2】](http://bbs.pediy.com/showthread.php?t=125080)》)
有兴趣的读者可参考:
《[反病毒攻防研究第013篇:恶意程序隐藏初探——DLL隐藏](http://blog.csdn.net/ioio_jy/article/details/40264291)》
《[Windows内核学习笔记第002篇:本地调试TEB](http://blog.csdn.net/ioio_jy/article/details/41879149)》
**6、你的U盘防火墙是什么原理?**
我说,当我们的U盘插入计算机后,我们的系统就能够检测到U盘的存在,它就会发送一个消息,这样我们就可以检测中U盘中是否存在autorun.inf这个文件,如果存在,那么就对其内容进行解析。比如其中有open命令,那么就查看open后面的文件名是什么,之后删除U盘中以该文件名命名的文件。因为这个文件很可能就是病毒。这也就实现了防火墙的功能。
有兴趣的读者可参考:
《[安全类工具制作第002篇:U盘防火墙的制作](http://blog.csdn.net/ioio_jy/article/details/39509995)》
**7、你的系统行为监控是什么原理?**
我回答说,这个可以从两个方面来实现监控,一个是通过对敏感API函数的钩取进行监控,另外一个是有些API函数自身就是能够达到监控的效果,比如有一个函数(名字一时没想起来)就能够检测文件及文件夹的变动,可以通过创建线程来实现这个功能。
有兴趣的读者可参考:
《[安全类工具制作第007篇:行为监控工具的开发](http://blog.csdn.net/ioio_jy/article/details/40428785)》
《[反病毒攻防研究第014篇:监视恶意程序的复制与自删除](http://blog.csdn.net/ioio_jy/article/details/40376487)》
**8、你都分析过那些病毒?**
我说我分析过熊猫烧香、QQ盗号木马以及敲竹杠病毒,大概是三四个的样子。
**你说说熊猫烧香是怎么实现感染的。**
我说病毒的感染一般是有两种方式,一是将自身代码植入文件的缝隙,一是新建节区来添加恶意代码。熊猫烧香一方面是将代码复制到PE文件中,并修改资源实现图标的更改,一方面是将一段网址植入网页文件中,使得当我们执行那个网页文件,就能够跳到病毒作者想让我们访问的网站中。从而也就实现了感染。
**你说说你所分析过的“敲竹杠”病毒**
“敲竹杠”病毒的原理其实就是通过篡改系统的密码,让受害用户去联系病毒作者,并花钱去买密码。像我最近分析了一个基于.NET的“敲竹杠”病毒,虽说很少见地采用了.NET框架,但是其实也是这个原理。这种.NET的程序,只要使用Reflector软件,就能够直接看到它的源代码,分析起来很简单。其实“敲竹杠”病毒分析起来基本都很简单。
有兴趣的读者可参考:
《[病毒木马查杀实战](http://blog.csdn.net/column/details/killvirus.html)》
面试官围绕我的简历的提问基本上就是这些,令我没有想到的是,他还向我提问了几个关于算法和数据结构的问题。尽管我也看过一些网友面试腾讯的经历,他们都说会提问这方面的知识,但是他们所面试的是软件开发类的职位,我没想到反病毒工程师的职位也要问这些。加上我这方面的基础很一般,尽管研究生入学考试,我们的专业课考的就是数据结构,但是毕竟许久未接触,很多都忘了,所以回答得不好,因此不再给出我当时的解答。这里我只列出问题,大家可以自行查找答案:
**1、什么是链表?**
**2、什么是二叉树?它是怎么实现的?**
**3、查找都有哪几种方式?**
**4、什么是二分法查找?**
**5、什么是冒泡排序?**
**6、各种排序算法的效率是怎样的?**
由于第一个关于链表的问题我就没回答好,所以面试官问我,不是考过了程序员和软件设计师吗,为什么不清楚链表呢?(又是依据我的简历来提问的)你编程不需要用链表吗?我说我主要编这几种程序,一是序列号生成器这样的程序,二是针对于病毒的某一特定行为来编程实现应对,三是某一特定病毒木马的专杀程序,这些程序基本是不需要使用链表的。
我的腾讯二面基本就是这样的一个流程,希望大家能够从中汲取自己所需的部分,多多讨论,多多交流。平时就多注重知识的积累,以及动手能力的培养。