《恶意代码分析实战》读书笔记入门与基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《恶意代码分析实战》读书笔记⼊门与基础本书前三章是对简单的恶意代码静态分析基础技术的概述,是分析恶意代码学习的⼊门。

第零章恶意代码分析技术⼊门
第⼀章静态分析基础技术
1. 字符串Strings
存储形式:ASCII或Unicode
- ASCII 每个字符1字节
- Unicode 每个字符2字节
Strings搜索程序:忽略上下⽂和格式,从整个⽂件中检测可打印字符串。

⽤户:过滤⽆效字符串,通过有意义的字符串获得⼀些简单代码的信息。

2. ⽂件加壳与PEiD
混淆程序:恶意代码编写者尝试隐藏其执⾏过程的代码。

加壳程序:混淆程序的⼀类。

被压缩或加密,显露的字符串很少,直接分析困难。

加壳或混淆代码通常⾄少会包含LoadLibrary和GetProAddress函数,⽤于加载和使⽤其它函数功能。

3. PE⽂件格式
PE⽂件格式是Windows可执⾏⽂件、对象代码和DLL所使⽤的标准格式。

PE ⽂件结构DOS ⽂件头PE ⽂件头区块表
区块
调试信息
PE⽂件格式实际上是⼀种数据结构,包含为Windows操作系统加载器管理可执⾏代码所必要的信息。

PE是指Windows系统下32位可执⾏⽂件,以⼀个⽂件头开始,其中包括代码信息,应⽤程序类型,所需的库函数与空间要求。

PE⽂件中常见的分节:
.text:包含了CPU的执⾏指令,正常是唯⼀包含代码的节。

.rdata:通常包含导⼊导出的函数信息,还可以存储程序中的其他只读数据。

.data:包含了程序的全局数据(本地数据并不存储在这⾥)。

.rsrc:包含可执⾏⽂件使⽤的资源,内容并不执⾏,例如图标、菜单项、字符串等
.reloc:包含⽤于重定位⽂件库的信息
.pdata:只在64位可执⾏⽂件中存在,存储异常处理信息
PE⽂件格式详解⽰意图
图⽚来源:
4. 链接库与函数
对⼀个可执⾏程序,可以搜集到的最有⽤的信息之⼀就是:导⼊表。

程序员将⼀些导⼊函数和代码库链接到编写的主程序中。

(1)静态链接
Windows平台上不常⽤,Unix和Linux程序中⽐较常见。

库被静态链接时,所有这个库中的代码都会被复制到可执⾏程序中。

PE⽂件头中没有迹象——难以区分静态链接的代码和可执⾏程序⾃⾝代码。

⼀些Windows API允许程序员导⼊没有在程序的⽂件头中列出的连接函数。

最为常见的就是:LoadLibrary和GetProcAddress
允许⼀个程序访问系统上任何库中的任何函数。

(2)动态链接
最常见、最应该关注。

库被动态链接时,宿主操作系统会在程序被装载时搜索所需的代码库,如果程序调⽤了被链接的库函数,这个函数会在代码库中执⾏。

PE⽂件头中存储了每个将被装载的库⽂件,以及每个会被程序使⽤的函数信息。

(3)常见的dll程序
DLL描述
Kernel32.dll常见,包含核⼼系统功能,如访问和操作内存、⽂件和硬件
Advapi32.dll提供对核⼼Windows组件的访问,如服务管理器和注册表
User32.dll包含所有⽤户界⾯组件,如按钮、滚动条以及控制和响应⽤户操作的组件
Gdi32.dll包含图形显⽰和操作的函数
Ntdll.dll Windows内核接⼝,可执⾏⽂件⼀般通过Kernel32.dll间接导⼊。

说明作者企图使⽤⾮正常Windows函数,如隐藏功能和操作进程等任务
Wsock32.dll
联⽹DLL,执⾏访问⽹络操作或相关任务
Ws2_32.dll
Wininet.dll包含更⾼层次的⽹络函数,实现了如、FTP、HTTP和NTP协议
函数命名约定(前缀或后缀)
Ex:管理层,Ex是Executive的开头两个字母。

Ke:核⼼层,Ke是Kernel的开头两个字母。

Hal:硬件抽象层,Hal是Hardware Abstraction Layer的缩写。

Ob:对象管理,Ob是Object的开头两个字母。

Mm:内存管理,Mm是Memory Manager的缩写。

Ps:进程(线程)管理,Ps表⽰Process。

Se:安全管理,Se是Security的开头两个字母。

Io:I/O管理。

Fs:⽂件系统,Fs是File System的缩写。

Cc:⽂件缓存管理,Cc表⽰Cache。

Cm:系统配置管理,Cm是Configuration Manager的缩写。

Pp:"即插即⽤"管理,Pp表⽰PnP。

Rtl:运⾏时程序库,Rtl是Runtime Library的缩写。

(4)导⼊导出函数
导⼊函数:⼀个程序所使⽤的但存储在另⼀个程序中的那些函数。

导出函数:⽤来与其他程序交互时使⽤的函数
DLL⽂件本⾝就是实现⼀些导出函数然后被exe可执⾏⽂件使⽤的,故其中导出函数多⽽常见。

EXE⽂件中鲜有导出函数,若有,则应特别关注。

5. ⼯具及实践
参见
第⼆章在虚拟机中分析恶意代码
参考资料
参考资料1:
参考资料2:。

相关文档
最新文档