静态分析基础技术
原文链接:https://hvnt3r.top/2019/01/静态分析基础技术/
知识点
我觉得安全圈的思路都是差不多的,跟渗透测试一样,对一个恶意软件的分析也需要前期的信息收集阶段来帮助我们对目标有一个大致的了解和认识,方便确定下一步工作的方向。
**Virus Total:**首先,拿到一个恶意软件如果不涉密的话可以直接上传到VT
上看一下,这样差不多能确定此恶意软件的最早爆发日期和各种关键的信息。
哈希值:hash
值就相当于恶意软件的指纹,是一个很重要的信息。
**关键字符串:**可以使用IDA Pro
或者Strings
软件来查看程序中关键的字符串。
**加壳与代码混淆:**一般来说,对软件加壳可以压缩软件代码占用的磁盘空间,使软件体积更小,另一方面,有的壳可以加密程序自身信息,是得程序难以通过逆向手段来对程序进行分析,是对程序本身的一种保护,大部分形况下加壳技术用来保护程序版权,但是恶意软件使用加壳方式来隐藏恶意代码,使得代码逻辑难以分析,这时候就需要我们使用已有的脱壳软件或者自己写脱壳脚本对软件进行脱壳还原。
使用PEview
查看IMAGE_SECTION_HEADER
的.text
节头部信息,如果虚拟大小比原始大小大得多,意味着这个程序在内存中占用的空间比在磁盘上多得多,那么这个程序很可能是加壳的程序,.data
节是例外。
**PE文件格式:**PE文件格式就不多说了,网上有很多资料,要熟悉PE格式,方便后面的学习。
**静态链接|动态链接|运行时链接|链接库与函数:**程序的导入表和导出表和一些用到的库对我们而言十分重要,静态链接由于重复占用内存因而不常见,运行时链接在正常的程序中一般见不到,但是在恶意软件中可能会出现,至于当需要用到函数的时候才会使用链接,增强了隐蔽性。另外一些Windows API允许调用者导入没有在程序头文件中导入的函数,最常见的两个是LoadLibrary
和GetProcAddress
,有时还可能会出现LdrGetProcAddress
和LdrLoadDll
,当程序中出现这些函数库时,安全人员无法通过静态分析的手法来分析程序链接的函数。
Dependency Walker: 一款可以查看可执行文件动态链接函数的程序,下载链接。
**Resource Hacker:**使用此工具来产看程序的资源节。
导入函数和导出函数是为了提高代码复用性的一种手段,导出函数通常出现在dll
文件中,而exe
文件中一般没有导出函数,如果发现一个exe
文件有很多导出函数的话我们就需要多多留意。
**编译时间:**使用Delphi
语言编写的程序有着统一的编译时间:1992年6月19日,所以说,如果有一个程序的编译时间为1992年6月19日,那么这个程序很可能是用Delphi
编写的
课后练习
Lab1-1
这个实验使用Lab01-01.exe和Lab01-01.dll文件,使用本章描述的工具和技术来获取关于这些文件的信息。
1.将文件上传至VT进行分析并产看报告,文件匹配到了已有的反病毒文件特征了吗?
按照题目要求上传至VT查看结果即可。
2.这些文件是什么时候编译的?
其实VT上已经显示了此程序的MetaData
即元信息:
CodeSize 4096
EntryPoint 0x1820
FileType Win32 EXE
FileTypeExtension exe
ImageFileCharacteristics No relocs, Executable, No line numbers, No symbols, 32-bit
ImageVersion 0.0
InitializedDataSize 8192
LinkerVersion 6.0
MIMEType application/octet-stream
MachineType Intel 386 or later, and compatibles
OSVersion 4.0
PEType PE32
Subsystem Windows command line
SubsystemVersion 4.0
TimeStamp 2010:12:19 17:16:19+01:00
UninitializedDataSize 0
这里已经显示了程序的编译时间为2010:12:19,另外可以通过软件PEexplore
来查看时间戳:
3.这两个文件中是否存在迹象说明他们是否被加壳或者混淆了?如果是,这些迹象在哪里。
VT上显示的结果为此程序加壳,壳是穿山甲(Armadillo)
Packers
PEiD Armadillo v1.71
但实际山此程序并没有加壳,可能是由于VT是采用机器学习来判断程序是否加壳存在一定的误判率。
.text
节表信息:
Name | Virtual Address | Virtual Size | Raw Size | Entropy |
---|---|---|---|---|
.text | 4096 | 2416 | 4096 | 4.45 |
用PEiD
查看查壳发现程序无壳。
4.是否有导入函数显示出这个恶意代码是做什么的?如果是,是哪些导入函数。
我个人习惯直接用IDA Pro查看导入函数:
Lab01-01.exe:
Address Ordinal Name Library
00402000 CloseHandle KERNEL32
00402004 UnmapViewOfFile KERNEL32
00402008 IsBadReadPtr KERNEL32
0040200C MapViewOfFile KERNEL32
00402010 CreateFileMappingA KERNEL32
00402014 CreateFileA KERNEL32
00402018 FindClose KERNEL32
0040201C FindNextFileA KERNEL32
00402020 FindFirstFileA KERNEL32
00402024 CopyFileA KERNEL32
0040202C malloc MSVCRT
00402030 exit MSVCRT
00402034 _exit MSVCRT
00402038 _XcptFilter MSVCRT
0040203C __p___initenv MSVCRT
00402040 __getmainargs MSVCRT
00402044 _initterm MSVCRT
00402048 __setusermatherr MSVCRT
0040204C _adjust_fdiv MSVCRT
00402050 __p__commode MSVCRT
00402054 __p__fmode MSVCRT
00402058 __set_app_type MSVCRT
0040205C _except_handler3 MSVCRT
00402060 _contr