样本分析(运营)工程师--面试准备

这是面试前的准备,去网上收集了一些逆向、病毒样本分析的问题。

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学过吗?

Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。
  要实现钩子函数,有两个步骤:
  1. 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)
  2.动态代理(使用所有场景)

Hook 技术(一) - 简书 (jianshu.com)   (hook技术学习)

12.简单描述一下取证?

这个问题,我没有找到,问到就说我不会。

13.如何修改DLL文件,使其加载时是固定基址?

加载的基址:EXE文件通常是400000h.DLL通常是10000000h

有源码的话,直接改编译器选项

1.直接修改dll PE头中的ImageBase为一个不大可能被占用的地址。(有些情况下会拒绝加载)

2.无源码情况下,改dll的话,可以通过stud_pe去定位到imagebase 修改为要固定的基址,不常用的 60000000

固定dll的加载基址的方法 (shuzhiduo.com)

这个实验我好像也做了,我发现我做的实验还挺多,后面一定会把博客写出来。

14.漏洞挖掘讲一下。

参考一下这个。

漏洞挖掘的思路----摘自农夫安全的分享 - 时光不改 - 博客园 (cnblogs.com)

15.内网横向渗透?

横向渗透,就是在已经攻占部分内网主机的前提下,利用既有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个内网、拥有最高权限、发动 APT (高级持续性威胁攻击)的目的。

在横向渗透中,最先得到的主机,以及之后新得到的主机,会成为突破口、跳板。如同一个不断扩大的圆形,获得的主机越多,圆能触及之处越大,让其周遭的「横向」部分由未知成为已知。

内网横向渗透的部分思路 - ctrl_TT豆 - 博客园 (cnblogs.com)

16.讲一下memcpy栈溢出?

我的另一篇博客有。

17.对一个加壳的程序如何进行分析与破解?

应该是先查壳,看一下有没有壳。然后找一下有没有对于的脱壳的办法。然后脱壳实现以后可以通过od去运行调试,有一些软件会有反调试机制,会识别出是否是调试,网上有插件hideod可以隐藏od进程?然后还可以用IDA对软件进行静态分析,分析软件的调用的API等。

 

posted @ 2022-05-27 21:37  一点也不咸  阅读(436)  评论(0)    收藏  举报