计算机病毒分析.docx
《计算机病毒分析.docx》由会员分享,可在线阅读,更多相关《计算机病毒分析.docx(18页珍藏版)》请在冰豆网上搜索。
![计算机病毒分析.docx](https://file1.bdocx.com/fileroot1/2023-1/23/e5d81ca1-3451-4c5b-805a-0b90143fc842/e5d81ca1-3451-4c5b-805a-0b90143fc8421.gif)
计算机病毒分析
《计算机病毒》课程
期末复习资料
第1章恶意代码分析入门
1.1计算机病毒的定义和类型
1.2计算机病毒分析的目标
1.3计算机病毒分析技术概述
第2章静态分析技术基础
2.1杀毒软件
2.2哈希值
2.3特征字符串
2.4加壳与混淆
2.5PE文件格式
2.6链接库与函数
第3章在虚拟机中分析恶意代码
3.1虚拟机的结构
3.2创建虚拟机
3.3使用虚拟机
第4章动态分析技术
4.1沙箱分析
4.2运行病毒和使用进程监视
4.3ProcessExplorer和Regshot
4.4网络模拟
第5章X86反汇编
5.1逆向工程
5.2X86体系结构
5.3CPU汇编指令
5.4汇编指令
5.5栈操作
第6章IDApro
6.1加载可执行文件
6.2IDApro的窗口
6.3IDApro导航
6.4交叉引用
6.5函数分析
6.6使用图形选项
6.7增强反汇编
第7章识别汇编语言中的C语言代码结构
7.1识别汇编中的C语言代码结构
7.2识别if分支结构
7.3识别循环
7.4识别函数调用
7.5识别switch结构美化
7.6识别数组、结构体、链表
第8章分析恶意Windows程序
8.1WindowsAPI
8.2Windows注册表
8.3网络API
8.4跟踪病毒运行
8.5互斥量
8.6异常处理、模式、NativeAPI
第9章动态调试
9.1调试器介绍
9.2使用调试器
9.3用断点暂停执行
9.4断点类型
9.5异常
9.6修改可执行程序
第10章OllyDbg
10.1Ollydbg加载恶意代码
10.2Ollydbg的窗口美化
10.3内存映射
10.4查看线程、栈、代码
10.5断点
10.6加载DLL、跟踪
10.7异常处理、修补
10.8分析shellcode、协助功能
10.9插件、脚本调试
第11章使用WinDbg调试内核
11.1驱动与内核代码
11.2使用WinDbg
11.3微软符号表
11.4Windows注册表
11.5Rootkit
第12章恶意代码行为
12.1下载器、启动器、后门
12.2远程控制和僵尸网络
12.3窃取登陆凭证
12.4存活机制
12.5特洛伊木马化二进制文件
12.6DLL加载顺序劫持
12.7权限提升与用户态Rootkit
第13章隐蔽的恶意代码启动
13.1启动器与进程注入
13.2进程替换
13.3Hook注入
13.4Detours与APC注入
第14章数据加密
14.1加密算法的目的和简单的加密算法
14.2简单的加密策略
14.3常见的加密算法
14.4自定义加密
14.5解密
一、客观部分:
★考核知识点:
计算机病毒的定义和类型
参见讲稿章节:
1.1
单选题:
恶意代码指的是()。
A.计算机病毒B.间谍软件C.内核嵌套
D.任何对用户、计算机或网络造成破坏的软件
单选题:
病毒、()和木马是可导致计算机和计算机上的信息损坏的恶意程序。
A.程序B.蠕虫C.代码D.数据
单选题:
病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组()。
A.计算机指令B.程序代码C.文件D.计算机指令或者程序代码
判断题:
病毒必须能自我执行和自我复制。
()
判断题:
蠕虫是利用文件寄生来通过网络传播的恶性病毒。
()
★考核知识点:
计算机病毒分析的目标
参见讲稿章节:
1.2
单选题:
以下不是恶意代码分析的目标的是()。
A.确定一个可疑的二进制程序到底可以做什么
B.如何在网络上检测它
C.恶意代码本身的特性
D.如何衡量并消除它所带来的损害
判断题:
病毒特征码关注是恶意代码对系统做什么,而主机特征码关注恶意代码本身的特性。
()
判断题:
网络特征码可以在没有进行恶意代码分析时创建,但在恶意代码分析帮助下提取的特征码往往更加有效的,可以提供更高的检测率和更少的误报。
()
★考核知识点:
计算机病毒分析技术概述
参见讲稿章节:
1.3
单选题:
下列属于静态高级分析技术的描述是()。
A.检查可执行文件但不查看具体指令的一些技术分析的目标
B.动态分析基础技术涉及运行恶意代码并观察系统上的行为,以移除感染,产生有效的检测特征码,或者两者
C.主要是对恶意代码内部机制的逆向工程,通过将可执行文件装载到反汇编器中,查看程序指令,来发现恶意代码到底做了什么
D.动态分析高级技术则使用调试器来检查一个恶意可执行程序运行时刻的内部状态
判断题:
静态分析基础技术是非常简单,同时也可以非常快速应用的,但它在针对复杂的恶意代码时很大程度上是无效的,而且它可能会错过一些重要的行为。
()
★考核知识点:
静态分析技术
参见讲稿章节:
2.1
单选题:
反病毒软件主要是依靠()来分析识别可疑文件。
A文件名B病毒文件特征库C文件类型D病毒文件种类
参见讲稿章节:
2.3
单选题:
Strings程序搜索()或以上连续的ASCII或Unicode字符,并以终结符结尾的可打印字符串。
A.2个B3个C1个D0个
判断题:
Strings程序检测到的一定是真正的字符串。
()
判断题:
当加壳的程序运行时,会首先运行一小段脱壳程序,来解压缩加壳的文件,然后再运行脱壳的文件。
()
判断题:
当一个程序被加壳后,你必须对它进行脱壳,才能够执行进一步分析。
()
★考核知识点:
虚拟机的结构
参见讲稿章节:
3.1
判断题:
虚拟机是运行在ring0级。
()
多选题:
以下哪些是常用的虚拟机软件()。
A.VMwarePlayerB.VMwareStationC.VMwareFusionD.VirtualBox
★考核知识点:
创建虚拟机
参见讲稿章节:
3.2
单选题:
以下那种互联网连接模式在宿主机和客户机之间创建了一个隔离的私有局域网()。
A.bridgedB.NETC.Host-onlyD.Custom
判断题:
未知的计算机病毒不存在不确定性。
()
★考核知识点:
X86反汇编
参见讲稿章节:
5.1
单选题:
计算机体系结构中,()层是由十六进制形式的操作码组成,用于告诉处理器你想它干什么。
A微指令B机器码C低级语言D高级语言
单选题:
在获取不到高级语言源码时,()是从机器码中能可信并保持一致地还原得到的最高一层语言。
A机器指令B微指令C汇编语言D机器码
参见讲稿章节:
5.2
判断题:
IP地址127.0.0.1在小端字节序下,表示为0x7F000001。
()
判断题:
操作数指向感兴趣的值所在的内存地址,一般由方括号内包含值、寄存器或方程式组成,如[eax]。
()
★考核知识点:
加载可执行文件
参见讲稿章节:
6.1
判断题:
在合法的PE文件中,可以带有可执行文件。
()
判断题:
在进程中加载的DLL的位置和在IDAPro中的地址不同,这可能是及地址重定向的结果。
()
判断题:
在默认情况下,IDAPro的反汇编代码中包含PE头或资源节。
()
★考核知识点:
识别汇编中的C语言代码结构
参见讲稿章节:
7.1
单选题:
下列表明是全局变量的汇编代码是()。
A.moveax,dword_40CF60
B.moveax,[ebp-4]
C.moveax,[ebp+var_4]
D.movdword_40CF60,eax
单选题:
对应a++的汇编代码是()。
A.moveeax,[ebp+var_4]
B.subeax,[ebp+var_8]
C.subeax,1
D.addeax,1
判断题:
全局变量可以被一个程序中的任意函数访问和使用,在栈中局部变量只能在它被定义的函数中访问,在内存上。
()
★考核知识点:
识别if分支结构
参见讲稿章节:
7.2
单选题:
对下面指令分析不正确的是()。
A.要跳转的决定是基于一个比较(cmp)语句来做的
B.调剂跳转(jnz),如果这两个值不相等,这个跳转就会发生
C.代码跳转(jump)保证了只有一条代码路径会被执行
D.对于一个if语句必定有一个条件跳转,所有条件跳转也都对应if语句
★考核知识点:
识别循环
参见讲稿章节:
7.3
判断题:
switch语句被程序员用来做一个基于字符或者整数的决策。
例如,后门通常使用单一的字节值从一系列动作中选择一个。
switch语句通常以两种方式被编译:
使用if方式或使用跳转表。
()
★考核知识点:
识别函数调用
参见讲稿章节:
7.4
单选题:
函数调用约定中,参数是从右到左按序被压入栈,当函数完成时由被调用函数清理栈,并且将返回值保存在EAX中的是()。
A.cdelB.stdcallC.fastcallD.压栈与移动
多选题:
微软fastcall约定备用的寄存器是()。
A.EAXB.ECXC.EDXD.EBX
多选题:
()是WindowsAPI的标准调用约定。
A.cdeclB.stdcallC.fastcallD.压栈与移动
判断题:
在stdcall中,前一些参数(典型的是前两个)被传到寄存器中,备用的寄存器是EDX和ECX(微软fastcall约定)。
如果需要的话,剩下的参数再以从右到左的次序被加载到栈上。
通常使用fastcall比其他约定更高效,因为代码不需要涉及过多的栈操作。
()
判断题:
微软VisualStudio和GNU编译集合(GCC)。
前者,adder函数和printf的函数在调用前被压到栈上。
而后者,参数在调用之前被移动到栈上。
()
★考核知识点:
识别switch结构美化
参见讲稿章节:
7.5
多选题:
下列说法正确的是()。
A.IDAPro有一个在识别结构方面很有用的图形化工具
B.从反汇编代码来看,很难知道原始代码是一个switch语句还是一个if语句序列
C.switch中各无条件跳转相互影响
D.使用了一个跳转表,来更加高效地运行switch结构汇编代码
判断题:
switch语句被程序员用来做一个基于字符或者整数的决策。
例如,后门通常使用单一的字节值从一系列动作中选择一个。
switch语句通常以两种方式被编译:
使用if方式或使用跳转表。
()
参见讲稿章节:
7.6
★考核知识点:
识别数组、结构体、链表
单选题:
下列论述错误的是。
()
A.数组是相似数据项的有序集合
B.结构体和数组相似,但是它们包括不同类型的元素
C.一个链表是包含一个数据记录序列的数据结构,并且每一个记录都包括一个对序列中下一个记录的引用(链接)域。
使用一个链表,被链接项的访问次序与数据项被保存在内存或磁盘上的次序必须一样
D.在汇编代码中,数组是通过使用一个基地址作为起始点来进行访问的。
每一个元素的大小通常并不总是明显的,但是它可以通过看这个数组是否被索引的来进行判断
单选题:
()被定义为一个相似数据项的有序集合。
A.数组B.结构体C.链表D.变量
判断题:
结构体通过一个作为起始指针的基地址来访问。
要判断附近的数据字节类型是同一结构的组成部分,还是只是凑巧相互挨着是比较困难的,这依赖于这个结构体的上下文。
()
判断题:
结构体通过一个作为起始指针的基地址来访问。
要判断附近的数据字节类型是同一结构的组成部分,还是只是凑巧相互挨着是比较困难的,这依赖于这个结构体的上下文。
()
判断题:
结构体通过一个作为起始指针的基地址来访问。
要判断附近的数据字节类型是同一结构的组成部分,还是只是凑巧相互挨着是比较困难的,这依赖于这个结构体的上下文。
()
★考核知识点:
分析恶意Windows程序
参见讲稿章节:
8.1
单选题:
以下WindowsAPI类型中()是描述一个双字节、32位的无符号数值。
AWORDBDWORDChandlesDCallback
单选题:
以下WindowsAPI类型中()是表示一个将会被WindowsAPI调用的函数。
AWORDBDWORDChandlesDCallback
判断题:
句柄在它们引用一个对象或其他某个位置这个点上和指针是完全一样的。
()
判断题:
在文件系统函数中CreateFile这个函数被用来创建和打开文件。
()
参见讲稿章节:
8.1
多选题:
恶意代码作者如何使用DLL()。
A保存恶意代码
B通过使用WindowsDLL
C控制内存使用DLL
D通过使用第三方DLL
★考核知识点:
调试器介绍
参见讲稿章节:
9.1
判断题:
只有软件调试器,没有硬件调试器。
()
判断题:
内核调试只需要在一个系统上进行。
()
选择题:
能调试内核的调试器是()。
A.OllyDbgB.IDAProC.WinDbgD.ProcessExplorer
★考核知识点:
使用调试器
参见讲稿章节:
9.2
判断题:
单步执行代码时,调试器每执行一条指令就会产生一次中断。
()
选择题:
单步调试是通过()实现的。
A.每条代码之前添加软件断点
B.每条代码之前添加硬件断点
C.标志寄存器中的陷阱标志(trapflag)
D.标志寄存器中的zf标志位
★考核知识点:
断点类型
参见讲稿章节:
9.4
选择题:
当调试可以修改自身的代码的代码时,应该设置什么类型的断点()。
A.软件执行断点B.硬件执行断点C.条件断点D.非条件断点
★考核知识点:
修改可执行程序
参见讲稿章节:
9.6
多选题:
调试器可以用来改变程序的执行方式。
可以通过修改()方式来改变程序执行的方式。
A.修改控制标志B.修改指令指针C.修改程序本身D.修改文件名
★考核知识点:
Ollydbg加载恶意代码
参见讲稿章节:
10.1
单选题:
下列关于OllyDbg运行恶意代码说法错误的是。
()
A.OllyDbg有几种调试恶意代码的方法。
可以用它直接加载可执行文件,甚至加载DLL程序
B.如果恶意代码已经在系统上运行,可以通过附加进程的方式调试它
C.OllyDbg是一个灵活的调试系统,可以用命令行选项运行恶意代码,甚至支持执行DLL中某个函数
D.可以在在加载恶意代码程序之前给OllyDbg传入命令行参数
判断题:
当你想要调试一个正在运行的恶意代码时,OllyDbg也支持附加到一个正在运行的进程,此刻OllyDbg会立即暂停这个程序以及它所有的线程。
()
★考核知识点:
内存映射
参见讲稿章节:
10.3
多选题:
下列概念说法正确的是()
A.OllyDbg内存映射窗口(View→Memory)显示了被调用程序分配的使用内存块
B.基地址重定位是指Windows中的一个模块没有被加载到其预定基地址时发生的情况
C.Windows中的所有PE文件都有一个预定的基地址,它在PE文件头中被称为映像基地址
D.使用相对地址,无论被加载到内存的哪个位置,所有指令都能正常工作
单选题:
数据访问指令将使用一个绝对地址来访问内存,这个文件被加载到预定基地址之外的另一个地址,访问这个地址就会错。
如果将这个文件载入到一个不同的地址,就需要改变这条指令。
因此,多数DLL会在PE头的()打包一个修订位置的列表
A..text节
B..date节
C..rsrc节
D..reloc节
判断题:
DLL在exe载入后以任意顺序加载。
这意味着如果DLL的基地址被重定位了,通常情况下不能预测DLL会被定位到内存的什么位置。
DLL的重定位节也可以被移除,一个缺乏重定位节的DLL不能被加载到它的预定基地址,因此它也就不能被加载。
()
★考核知识点:
查看线程、栈、代码
参见讲稿章节:
10.4
单选题:
下列说法错误的是()。
A.恶意代码经常使用多线程。
你可以通过选择View-Threads,调出线程面板窗口,查看一个程序的当前线程
B.单击主工具栏中的暂停按钮,可以暂停所有活动的线程
C.给定进程中的每个线程有自己的栈,通常情况下,线程的重要数据都保存在栈中。
可以使用OllyDbg的内存映射,来查看内存中栈的内容
D.由于OllyDbg是多线程的,可能需要你先暂停所有的线程,设置一个断点后,继续运行程序,这样可以确保在一个特定线程模式内调试
判断题:
RuntoSelection选项表示在到达选择的指令之前一直运行。
如果选择的指令不被执行,则被调试程序会一直运行下去。
()
★考核知识点:
断点
参见讲稿章节:
10.5
多选题:
以下对各断点说法正确的是()。
A.查看堆栈中混淆数据内容的唯一方法时:
待字符串解码函数执行完成后,查看字符串的内容。
在字符串解码函数的结束位置设置软件断点。
但是,这种方法只能在程序使用字符串时识别出他们
B.条件断点是软件断点中的一种,只有某些条件得到满足时这个断点才能中断执行程序。
OllyDbg调试器允许使用表达式,来设置断点,每当断点命中时,都会先计算表达式的值,如果其值不等于0,断点生效,程序运行中断
C.硬件断点非常强大,它可以在不改变你的代码、堆栈以及任何目标资源的前提下进行调试。
硬件断点的问题是调试进程时,它会降低代码的执行速度
D.OllyDbg只允许你一次设置一个内存断点,如果你设置了一个新的内存断点,那么之前设置的内存断点就会被移除
判断题:
对于调用频繁的API函数,仅当特定参数传给它时才中断程序执行,这种情况下内存断点特别有用。
()
判断题:
OllyDbg中内存断点一次只能设置一个,而硬件断点可以设置4个。
()
★考核知识点:
分析shellcode、协助功能
参见讲稿章节:
10.8
多选题:
OllyDbg提供了多种机制来帮助分析,包括下面几种()。
A.日志B.监视C.帮助D.标注
★考核知识点:
使用WinDbg调试内核
参见讲稿章节:
11.1
判断题:
用户调试比起内核调试模式来说更加复杂,因为进行用户调试时,操作系统将被冻。
()
判断题:
用户态应用程序到内核态驱动的调用由操作系统完成,这种调用难以被跟踪。
()
★考核知识点:
下载器、启动器、后门
参见讲稿章节:
12.1
判断题:
启动器通常包含一个它要加载的恶意代码()。
多选题:
以下的恶意代码行为中,属于后门的是()。
A.netcat反向shellB.windows反向shellC.远程控制工具D.僵尸网络
判断题:
下载器通常会与漏洞利用打包在一起。
()
★考核知识点:
远程控制和僵尸网络
参见讲稿章节:
12.2
判断题:
客户端运行在一个被植入恶意代码的受害主机上。
服务器端作为攻击者远程操纵运行命令和控制的单元。
()
★考核知识点:
存活机制
参见讲稿章节:
12.4
判断题:
所有服务都存在于注册表中,如果一个服务的注册表键被移除,则这个服务依旧能能启动。
()
多选题:
恶意代码的存活机制有()。
A.修改注册表B.特洛伊二进制文件C.DLL加载顺序劫持D.自我消灭
★考核知识点:
启动器与进程注入
参见讲稿章节:
13.1
单选题:
直接将恶意代码注入到远程进程中的是()。
A.进程注入B.DLL注入C.钩子注入D.直接注入
多选题:
下面说法正确的是()。
A.启动器通常在text节存储恶意代码,当启动器运行时,它在运行嵌入的可执行程序或者DLL程序之前,从该节将恶意代码提取出来
B.隐藏启动的最流行技术是进程注入。
顾名思义,这种技术是将代码注入到另外一个正在运行的进程中,而被注入的进程会不知不觉地运行注入的代码
C.DLL注入是进程注入的一种形式,它强迫一个远程进程加载恶意DLL程序,同时它也是最常使用的秘密加载技术
D.直接注入比DLL注入更加灵活,但是要想注入的代码在不对宿主进程产生副作用的前提下成功运行,直接注入需要大量的定制代码。
这种技术可以被用来注入编译过的代码,但更多的时候,它用来注入shellcode
判断题:
最常用的方法是使用WindowsAPI函数CreateToolhe1p32Snapshot、Process32First和Process32Next,来查找进程列表中的目标进程。
一旦发现目标进程,启动器会提取目标进程的进程标识(PID),然后用提取的PID调用createRemoteThread函数,以获取目标进程的句柄。
()
★考核知识点:
进程注入
参见讲稿章节:
13.2
单选题:
进程替换的关键是以()创建一个进程。
A.等待状态B.就绪状态C.运行状态D.挂起状态
判断题:
当恶意代码编写者想要将恶意代码伪装成一个合法进程,可以使用一种被称为进程注入的方法,将一个可执行文件重写到一个运行进程的内存空间。
()
判断题:
这种进程替换技术让恶意代码与被替换进程拥有相同的特权级。
()
★考核知识点:
Hook注入
参见讲稿章节:
13.3
单选题:
()常被一种叫做击键记录器的恶意程序所使用,被用来记录击键。
A.DLL注入B.直接注入C.APC注入D.钩子注入
判断题:
恶意的应用程序会挂钩一个经常使用的Windows消息。
()
★考核知识点:
Detours与APC注入
参见讲稿章节:
13.4
单选题:
线程创建需要系统开销,()能够调用一个现有的线程。
A.进程注入B.直接注入C.Hook注入D.APC注入
单选题:
APC可以让一个线程在它正常的执行路径运行之前执行一些其他的代码。
每一个线程都有一个附加的APC队列,它们在线程处于()时被处理。
A.阻塞状态
B.计时等待状态
C.可警告的等待状态
D.被终止状态
★考核知识点:
数据加密
参见讲稿章节:
14.1
多选题:
以下是分析加密算法的目的是()。
A隐藏配置文件信息。
例如,命令和控制服务器域名
B窃取信息的时候将它保存到一个永久文件
C存储需要使用的字符串,并在使用前对其解密
D将恶意代码伪装成一个合法的工具,隐藏恶意代码活动中使用的字符串
参见讲稿章节:
14.2
判断题:
由于单字节加密的弱点,许多恶意代码编写者采用稍微复杂的编码方案,从而使得暴力探测不那么容易且仍能比较简单的实现。
()
判断题:
原始数据转换成Base64的过程相当标准。
它使用12位的块。
()
参见讲稿章节:
14.3
多选题:
以下方法中是识别标准加密算法的方法是()。
A识别涉及加密算法使用的字符串
B识别引用导入的加密函数
C搜索常见加密常量的工具
D查找高熵值的内容
二、主观部分:
★考核知识点:
计算机病毒的定义和类型
参见讲稿章节:
1.1
填空题:
蠕虫病毒是一种常见的计算机病毒,它利用网络进行(),传染途径是通过()。
简答题:
简述病毒的概念。
★考核知识点:
计算机病毒分析技术概述
参见讲稿章节:
1.3
填空题:
恶意代码分析技术分析包括(),(),(),()。
简答题:
计算机病毒分析内容?
★考核知识点:
静态分析技术
参见讲稿章节:
2.1
填空题:
蠕虫病毒是一种常见的计算机病毒,它利用网络进行(),传染途径是通过()。
填空题:
木马与病毒的重大区别是(),它并不能像病毒那样(),也并不“刻意”地去感染其他文件,它主要通过将(),吸引用户下载执行。
填空题:
恶意代码分析技术分析包括()、()、动态分析基础技术、动态分析