样本分析(运营)工程师--面试准备
这是面试前的准备,去网上收集了一些逆向、病毒样本分析的问题。
1.知道什么是函数调用约定吗?
2.讲一讲ctf中遇到的比较有趣的逆向题目?
3.有没有手动脱壳的经历?
4.PE文件结构熟悉吗?
5.给你一个病毒的样本如何对它进行分析呢?
6.看你学过应用密码学,讲一下一些密码算法?这里准备一个非对称加密(RSA),一个对称加密(DES)。
7.对断点的了解,软件、硬件、内存?
8.加壳的流程?
9.讲一下DLL注入,什么是DLL劫持?
10.了解哪些Windows安全机制?
11.hook学过吗?
12.简单描述一下取证?
13.如何修改DLL文件,使其加载时是固定基址?
14.漏洞挖掘讲一下。
15.内网横向渗透?
16.讲一下memcpy栈溢出?
17.对一个加壳的程序如何进行分析与破解?
本次想的问题就这么多,会问多少个再说吧。。。
1.知道什么是函数调用约定吗?
简单来说就是约定了参数传递的方式,和堆栈平衡由谁完成。如果一个函数被A调用,则函数可以收到A传递的参数(栈传递);且函数的返回值要给到A那里,在函数调用的过程由调用者清除栈,实现调用函数前后的栈平衡。参数入栈的顺序为从右到左依次入栈。
2.2.讲一讲ctf中遇到的比较有趣的逆向题目?
3.有没有手动脱壳的经历?
(81条消息) 手动脱壳方法及原理_经典的误导的博客-CSDN博客_手动脱壳 (理论)
(81条消息) 破解入门(五)-----实战"ESP定律法"脱壳_lelexin的博客-CSDN博客 (实践)
4.PE文件结构?
这里需要我自己总结一下。
PE文件包含的结构有DOS头,PE标识、文件头、可选头、目录结构、节表等。
判断文件是PE文件是,文件开头是MZ,从MZ(文档开始处) 跳转3C后取四个字节(000000B0),跳转到四个字节(000000B0)的地址后数据是PE00。从PE00跳转到80H偏移,取四字节是导入表地址。可以根据PEeditor打开节表来进行RVA和FOA转换计算。从PE头跳转78H是导入表,80H是导出表。
(81条消息) PE文件详解------PE文件结构剖析_bobopeng的博客-CSDN博客_rdata文件怎么打开 (这是结构详解)
5.给你一个病毒的样本如何对它进行分析呢?
大致步骤如下:
把病毒样本丢到虚拟机下运行,检测病毒的行为;然后用IDA对病毒进行反编译,查看病毒调用了哪些API,可以通过调用的API去分析病毒的行为和目的,分析病毒的汇编代码。
病毒(以感染Windows的病毒为例)的行为大致有这几种,不同的行为对应的会调用一些DLL和函数:
1.对文件的操作2.对注册表的操作3.对进程的操作4.联网行为
计算机病毒分析流程 - 百度文库 (baidu.com) (简单的分析流程)
6.看你学过应用密码学,讲一下一些密码算法?这里准备一个非对称加密(RSA),一个对称加密(DES)。
RSA是非对称加密算法。同为非对称加密的算法还有,MD5加密,ECC(椭圆曲线),Diffie-Hellman密钥交换算法
用于加密的密钥不同,一个是公钥可以公开,另一个是私钥,自己持有。
RSA加密破解难在大素数的分解困难(对于加密方案确定的加密算法,只要密钥被破解了那就没有用了)。
RSA加密多用于数字加密和数字签名。非对称加密算法在破解时更安全但是加解密需要花的时间比较多,因此在加密大量数据时更多的会选择对称加密算法。
RSA算法原理(简单易懂) - insistYuan - 博客园 (cnblogs.com) (RSA详解)
(81条消息) RSA(非对称加密)与ECC(椭圆曲线加密)的区别_cqu_jiangzhou的博客-CSDN博客_椭圆曲线和rsa (RSA和ECC)
DES是对称加密算法,对数据是分组加密。原理在下面自己看,我就不总结了,对于这个算法我真的学不明白。
(81条消息) 加密算法------DES加密算法详解_m0_37962600的博客-CSDN博客_des加密算法 (DES加密算法详解)
7.对断点的了解,软件、硬件?
软件断点:
软件断点在X86系统中就是指令INT 3,它的二进制代码opcode是0xCC。当程序执行到INT 3指令时,会引发软件中断。实际上,一般情况下,调试器维护了一大组调试断点,在并把他们都换成了INT 3。在被调度回来后,会都填回去,并通过现在的地址判断是到了那个断点。软件断点没有数目限制。
硬件断点:
X86系统提供8个调试寄存器(DR0~DR7)和2个MSR用于硬件调试。其中前四个DR0~DR3是硬件断点寄存器,可以放入内存地址或者IO地址,还可以设置为执行、修改等条件。CPU在执行的到这里并满足条件会自动停下来。
硬件断点十分强大,但缺点是只有四个,这也是为什么所有调试器的硬件断点只能设置4个原因。我们在调试不能修改的ROM时,只能选择这个,所以要省着点用,在一般情况下还是尽量选择软件断点。
参考博客:(81条消息) 程序调试断点的原理_lsfreeing的博客-CSDN博客_程序断点
8.加壳的流程?
常见的三种壳:压缩壳、保护壳、捆绑壳
这里我了解到可以用一些加壳的的工具。
太多的壳,会导致你的程序启动很慢,甚至启动不了,而且还有一种可能性就是失去兼容性。
我实现过手动实现加密壳。(有空再写一个博客记录一下)
主要步骤如下:
对可执行文件代码节(.text)进行加密,加密算法为异或,密钥为0XCC;增加一个.pack节,修改属性为E0000020(可读可写可执行包含可执行代码);修改代码节的属性为E0000020(可读可写可执行包含可执行代码),text节默认的属性为60000020H(可执行可读);为了加壳后能运行,修改可执行程序入口点为pack节的地址;在增加的节中写入解密代码并保存(解密就是再异或一次密钥)。
标志(属性块)常用特征值对照如下所示:
[00000020h] :包含可执行代码;a
[00000040h]:该块包含已初始化的数据;b
[00000080h]:该块包含未初始化的数据;c
[20000000h]:该块可执行;d
[40000000h]:该块可读;e
[80000000h]:该块可写;f
9.讲一下DLL注入,什么是DLL劫持?
DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的形式存在。DLL文件在运行时将按需加载。
dll注入我写了一个实验,后面会写一篇博客。
DLL劫持指的是,病毒通过一些手段来劫持或者替换正常的DLL,欺骗正常程序加载预先准备好的恶意DLL。
dll劫持好像我也做了实验,一定会记录的。
(81条消息) DLL劫持原理&防御方法_G4rb3n的博客-CSDN博客_dll劫持原理 (劫持)
10.了解哪些Windows安全机制?
简单记一下栈保护:GS
在编译时可以选择是否开启GS安全编译选项。这个操作会给每个函数增加一些额外的数据和操作,用于检测栈溢出。
在函数调用时,会在返回地址和EBP之前压入一个额外的Security Cookie。系统会比较栈中的这个值和原先存放在.data中的值做一个比较。如果两者不吻合,说法栈中发生了溢出。
(81条消息) Windows安全机制---栈保护:GS机制_每昔的博客-CSDN博客_gs保护机制
11.hook学过吗?
要实现钩子函数,有两个步骤:
1. 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)
2.动态代理(使用所有场景)
Hook 技术(一) - 简书 (jianshu.com) (hook技术学习)
12.简单描述一下取证?
这个问题,我没有找到,问到就说我不会。
13.如何修改DLL文件,使其加载时是固定基址?
加载的基址:EXE文件通常是400000h.DLL通常是10000000h
有源码的话,直接改编译器选项
1.直接修改dll PE头中的ImageBase为一个不大可能被占用的地址。(有些情况下会拒绝加载)
2.无源码情况下,改dll的话,可以通过stud_pe去定位到imagebase 修改为要固定的基址,不常用的 60000000
这个实验我好像也做了,我发现我做的实验还挺多,后面一定会把博客写出来。
14.漏洞挖掘讲一下。
参考一下这个。
漏洞挖掘的思路----摘自农夫安全的分享 - 时光不改 - 博客园 (cnblogs.com)
15.内网横向渗透?
横向渗透,就是在已经攻占部分内网主机的前提下,利用既有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个内网、拥有最高权限、发动 APT (高级持续性威胁攻击)的目的。
在横向渗透中,最先得到的主机,以及之后新得到的主机,会成为突破口、跳板。如同一个不断扩大的圆形,获得的主机越多,圆能触及之处越大,让其周遭的「横向」部分由未知成为已知。
内网横向渗透的部分思路 - ctrl_TT豆 - 博客园 (cnblogs.com)
16.讲一下memcpy栈溢出?
我的另一篇博客有。
17.对一个加壳的程序如何进行分析与破解?
应该是先查壳,看一下有没有壳。然后找一下有没有对于的脱壳的办法。然后脱壳实现以后可以通过od去运行调试,有一些软件会有反调试机制,会识别出是否是调试,网上有插件hideod可以隐藏od进程?然后还可以用IDA对软件进行静态分析,分析软件的调用的API等。