0


大厂安全工程师面试经验汇总与技术解析

在安全工程师的面试过程中,不同公司的面试内容各有特点。本文将汇总拼多多、QQ 部门、美团等公司的安全工程师一面面经,并对其中的问题进行详细解答。

一、拼多多安全工程师一面

(一)面试内容

  1. 自我介绍。
  2. 介绍项目。
  3. 手撕代码:实现一个二叉树的序列化和反序列化功能。需要实现两个方法:一个用于将二叉树序列化为一个字符串,另一个用于将该字符串反序列化回原来的二叉树结构。

(二)问题及答案

  1. 自我介绍:根据自己的实际情况,简要介绍自己的教育背景、专业技能、项目经验和对安全领域的兴趣。
  2. 介绍项目:详细介绍自己参与过的安全项目,包括项目的背景、目标、技术架构、实现过程和成果。
  3. 手撕代码:二叉树的序列化和反序列化- 序列化:可以采用深度优先遍历的方式对二叉树进行序列化。对于二叉树中的每个节点,如果节点不为空,则将节点的值转换为字符串并添加到结果字符串中;如果节点为空,则添加特殊字符(如 “#”)表示空节点。遍历过程中,用特定的分隔符(如逗号)将节点值分隔开。- 反序列化:根据序列化后的字符串,采用递归的方式进行反序列化。首先将字符串按照分隔符分割成节点值的列表。然后从列表中依次取出节点值,根据节点值创建二叉树节点。如果节点值为特殊字符(如 “#”),则创建空节点;否则,创建包含该值的节点,并递归地创建其左右子树。

以下是用 Python 实现的代码示例:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def serialize(root):
    if root is None:
        return "#"
    return str(root.val) + "," + serialize(root.left) + "," + serialize(root.right)

def deserialize(data):
    def helper(values):
        val = next(values)
        if val == "#":
            return None
        node = TreeNode(int(val))
        node.left = helper(values)
        node.right = helper(values)
        return node
    values = iter(data.split(","))
    return helper(values)

二、QQ 部门面试

(一)面试内容

  1. 25 道单选 + 5 道不定项选择,考计组、数据结构和安全。
  2. 一道问答:给一个目录跨越漏洞的 PoC 数据包,用 python 写 exp,但不让用编译器。
  3. 一道编程:长度为 n 的数组找重复,输出重复。

(二)问题及答案

  1. 选择题部分:根据计组、数据结构和安全的相关知识进行答题。
  2. 问答:目录跨越漏洞的 PoC 数据包写 exp- 目录跨越漏洞通常是由于应用程序在处理文件路径时没有进行充分的验证,导致攻击者可以通过构造特殊的文件路径来访问系统中的任意文件。- 以下是一个用 Python 实现的简单示例,假设已经获取到了包含目录跨越漏洞的 PoC 数据包,并且知道了目标文件的路径:
import requests

# 假设目标文件路径
target_file_path = "../../../etc/passwd"

# 发送请求获取目标文件内容
response = requests.get("http://vulnerable_server.com/read_file?file_path=" + target_file_path)

if response.status_code == 200:
    print(response.text)
else:
    print("Failed to access the file.")

请注意,这只是一个简单的示例,实际情况中可能需要根据具体的漏洞情况和环境进行调整。
3. 编程:长度为 n 的数组找重复,输出重复

  • 可以使用哈希表来解决这个问题。遍历数组中的每个元素,将元素作为键存入哈希表中,并记录出现的次数。如果某个元素已经在哈希表中存在,则说明该元素是重复的。
def find_duplicates(arr):
    duplicates = []
    seen = {}
    for num in arr:
        if num in seen:
            if seen[num] == 1:
                duplicates.append(num)
            seen[num] += 1
        else:
            seen[num] = 1
    return duplicates

三、美团安全工程师一面(逆向)

(一)面试内容

  1. 介绍项目。因为简历里没有写项目经验,面试官就问实际分析过哪些 apk,讲讲分析经历。
  2. 介绍壳类型和原理。
  3. 介绍 ollvm 和 dexVM 原理。
  4. 简单介绍怎么处理 ollvm。
  5. xposed 和 frida 原理。
  6. frida 检查手段。
  7. 在 so 中遇到魔改的加密算法怎么定位,细节。
  8. post 和 get 的区别。
  9. 为什么会学逆向。
  10. 反问环节。

(二)问题及答案

  1. 介绍项目(分析 apk 的经历):如果没有专门的项目经验,可以介绍自己在学习过程中分析 apk 的经历。包括分析的目的、使用的工具和方法、遇到的问题及解决方法等。
  2. 介绍壳类型和原理- 壳可以分为加密壳、压缩壳、虚拟机壳等类型。- 原理:壳的主要作用是对应用程序进行保护,防止被逆向分析。加密壳通过对应用程序的代码进行加密,使得在运行时需要先解密才能执行。压缩壳则是对应用程序的代码进行压缩,减少程序的体积。虚拟机壳则是通过构建一个虚拟机环境,将应用程序的代码在虚拟机中执行,增加逆向分析的难度。
  3. 介绍 ollvm 和 dexVM 原理- ollvm(Obfuscator-LLVM)是一种基于 LLVM 的代码混淆工具。它通过对代码进行控制流扁平化、虚假控制流插入、指令替换等操作,使得代码难以理解和分析。- dexVM 是一种针对 Android 应用的虚拟机保护技术。它将 Dalvik 字节码转换为自定义的虚拟机指令,在运行时通过自定义的虚拟机进行解释执行,增加逆向分析的难度。
  4. 简单介绍怎么处理 ollvm- 处理 ollvm 可以使用一些反混淆工具,如 IDA Pro 的反混淆插件等。也可以通过手动分析代码的控制流和数据流,逐步还原混淆后的代码。
  5. xposed 和 frida 原理- xposed 原理:通过替换 Android 系统的 zygote 进程,实现对系统和应用程序的 hook。在应用程序启动时,加载 xposed 框架的模块,这些模块可以对应用程序的方法进行拦截和修改。- frida 原理:frida 是一种动态插桩工具,它通过注入代码到目标进程中,实现对进程的监控和修改。frida 可以在运行时修改应用程序的内存、函数调用等,从而实现对应用程序的分析和调试。
  6. frida 检查手段- 可以通过检测系统进程、文件系统、网络连接等方式来发现 frida 的存在。例如,检查是否存在 frida-server 进程、是否有 frida 相关的文件等。
  7. 在 so 中遇到魔改的加密算法怎么定位,细节- 可以通过静态分析和动态调试相结合的方式来定位魔改的加密算法。静态分析可以使用 IDA Pro 等工具,查看 so 文件的反汇编代码,寻找可能的加密函数调用。动态调试可以使用 gdb 等工具,在运行时跟踪程序的执行流程,观察加密函数的输入和输出。细节方面,可以关注加密函数的参数、返回值、调用栈等信息,逐步分析加密算法的实现。
  8. post 和 get 的区别- get 方法是通过 URL 传递参数,参数会显示在地址栏中,数据长度有限制,安全性较低。post 方法是将参数放在请求体中传递,数据长度没有限制,安全性较高。
  9. 为什么会学逆向- 可以从对安全技术的兴趣、解决实际问题的需求、提升技术能力等方面回
标签: 网络安全

本文转载自: https://blog.csdn.net/m0_57836225/article/details/142229273
版权归原作者 阿贾克斯的黎明 所有, 如有侵权,请联系我们删除。

“大厂安全工程师面试经验汇总与技术解析”的评论:

还没有评论