| 关键词: 程序 文件 nbsp 代码 加壳 恶意 字符串 函数 脱壳 分析 |
0×00 概述 静态分析技术通常是研究恶意代码的第一步,是分析程序指令与结构来确定功能的过程,此时程序不是在运行状态的。 1. 反病毒软件确认程序样本恶意性
2. 使用hash识别恶意代码
3. 文件的字符串列表,使用函数还有文件头信息分析
尽可能多的搜集信息,对目标就更加了解。 0×01 反病毒扫描 反病毒软件显然不完美,主要依靠恶意代码特征片段的匹配(病毒文件特征库),还有基于行为模式的匹配分析(启发式检测) 图1 扫描结果 传说还有相当多的黑客利用网站帮助其修改恶意代码,然而谷歌官方也能通过分析提交的恶意代码跟踪黑客修改软件的过程,甚至反向定位黑客。 0×02 恶意代码的指纹 hash是唯一标识恶意代码的常用方法,SHA-1算法,MD5算法是最常用的两种hash函数。 图2 Kali中的md5deep 0×03 查找字符串 程序中的字符串就是一段可打印的字符序列,从其中会包含很多信息,比如弹出的消息,读取的位置,链接的URL等等。 两种类型格式都以NULL结束符,表示字符串是完整的 ASCII字符串每个字符使用一个字节,Unicode使用两个字节。 0×04 加壳与混淆恶意代码 加壳后的恶意程序会被压缩,混淆技术则隐藏了执行的过程。 0×05 PEID检测加壳 PEID来检测加壳的类型和所用编译器的类型,简化加壳分析的过程, 加入一个简单的恶意代码 PEID识别了加壳的类型 图3 UPX加壳工具非常流行 但是UPX也非常容易脱壳http://upx.sourceforge.net/ 下载工具就好 许多PEID插件会在不知情的情况下运行恶意代码可执行文件,注意在安全的环境下运行。 0×06 链接库与函数 对于分析恶意代码,收集它的导入表至关重要,导入表是一个程序使用的存储于另一个程序的那些函数。 1. 不要把库包含在程序中需要时调用即可
2. 内存映射技术使加载后的DLL代码,资源在多个进程之间实现共享
3. 更新库时只要替换DLL即可方便快捷
0×07 Dependency Walker工具查看动态链接函数 图4 常见的DLL程序: Kernal.dll 包含系统的核心功能,访问和操作内存,文件,硬件
WININET.dll 联网操作 包含了FTP HTTP NTP等协议
User.dll 包含了用户界面组件,控制响应用户操作的组件
Ntdll.dll 是Windows内核的接口 通常由Kernal间接导入,一些隐藏功能和操作进程会使用这个接口。
Advapi32.dll 提供了对核心Windows组件的访问 ,比如服务管理器和注册表
Gdi32.dll 提供图形显示和操作的函数
0×08 PE文件头与分节 PE文件是Windows系统下使用的可执行文件格式,它是微软在UNIX平台的COFF(Common Object File Format 通用对象文件格式)基础上制作而成。最初设计用来提高在不同系统上的移植性,其实只能用在Windows操作系统上。 PE是指32位可执行文件,64位的可执行文件称为PE+ 或者PE32+,并非PE64。 PE文件以一个文件头开始,其中包括代码信息,应用程序类型,所需的库函数与空间要求。 .text 包含了CPU的执行指令,正常是唯一包含代码的节。
.rdata 通常包含导入导出的函数信息,还可以存储程序中的其他只读数据
.data 包含了程序的全局数据 (本地数据并不存储在这里)
.rsrc 包含可执行文件使用的资源,内容并不执行,例如 图标,菜单项,字符串等
.reloc 包含用于重定位文件库的信息
0×09 一个小实验 接着我们用PEview打开文件,没有看到常用的PE节却看到了.UPX0/1/2 明显是UPX加密的痕迹 其中UPX0 虚拟大小为0×400 却没有原始数据 很可能包含了恶意代码。 PEID扫描结果看出是UPX加壳: 利用命令行工具UPX脱壳: 脱壳后重新PEview 这时就可以看到正常的PE节了,PE节的名称都很固定任何特殊的PE节都是可疑的,同时还观察到 NT头IMAGE_OPTIONAL_HEADER 中的Subsystem CUI表示是命令行程序: 参考 Practical Malware Analysis 示例程序 链接: http://pan.baidu.com/s/1bnlYFT1 密码: d8jw |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|