文章目录

  • 前言
  • 1、数据集
  • 2、Windows可移植可执行文件格式
  • 3、使用pefile解析PE文件格式
  • 4、获取恶意软件的图像
  • 5、获取恶意软件的字符串
  • 6、反汇编技术
    • 6.1、使用pefile和capstone反汇编ircbot.exe
  • 7、限制静态分析的因素

前言

  静态分析可以帮助我们更好地理解恶意软件二进制文件在攻击目标后为攻击者提供的好处,以及攻击者可以隐藏并继续攻击受感染计算机的方式。


1、数据集

数据集下载地址

ircbot.exe : 互联网中继聊天(Internet Relay Chat)机器人。当连接到IRC服务器时,程序被设计常驻在目标计算机中,在ircbot.exe控制目标后,攻击者可以通过IRC控制目标计算机,执行控制指令,例如打开网络摄像头偷偷捕获视频、提取目标的地理位置和桌面的截图,以及从目标机器中提取相关文件等。

fakepdfmalware.exe:此样本使用Adobe Acrobat图标诱骗用户认为它是一个Adobe Acrobat文档,而实际上它是一个恶意的PE可执行文件。

2、Windows可移植可执行文件格式

  Windows PE文件格式描述了如.exe、.dll和.sys等当今Windows程序文件的结构,并定义了它们存储数据的方式。PE文件包含x86指令、图像和文本等数据,以及程序运行所需要的元数据。Windows使用这些安全数据来确保代码出自受信任的来源。下图为PE文件格式

  PE文件格式包括一系列的header,用来告诉操作系统如何将程序加载到内存中。它还包括一系列的节用来包含实际的程序数据。Windows将这些节加载到内存中,使其在内存中的偏移量与他们在磁盘上的显示位置向对应。

  1. PE头
    定义了程序的一般属性,如二进制代码、图像、压缩数据和其它程序属性。告诉我们程序是针对32位或64位系统而设计的。头里包括了时间戳字段,可以给出恶意软件作者编译文件的时间, 通常恶意软件作者会使用伪造的值替代这个字段。

  2. 可选头
    定义了PE文件中程序入口的位置,该位置指的是程序加载后运行的第一个指令,还定义了Windows在加载PE文件、Windows子系统、目标程序时加载到内存中的数据的大小,以及有关该程序其他的高级详细信息。

  3. 节头
    节头描述了PE文件中包含的数据节。PE文件中的一个节是一块数据,它们在操作系统加载程序时将被映射到内存中,或者包含有关如何将程序加载到内存中的指令。节头还告诉Windows应该授予哪些权限,例如x86代码的.text节通常是可读和可执行的,但不可写,防止程序代码在执行过程中意外修改自身。

  4. .text节
    每一个PE程序在其节头中包含了至少一个标记为可执行的x86代码节;这些节几乎总是命名为.text,在执行程序反汇编和逆向工程时,将反汇编.text节中的数据。

  5. .idata节
    被称为导入节,包含导入地址表(IAT), 它列出了动态链接库和它们的函数。IAT是最重要的PE结构之一,在对PE二进制文件进行最初的分析时需要查看它,因为它指出了程序所调用的库,这些调用反过来又可能会泄露恶意软件的高级功能。

  6. .rsrc节
    .rsrc节包含了程序用于将文本呈现为字符串的可打印字符串。

  7. .reloc节
    PE二进制文件的代码并非是与位置独立的,这意味着如果将它从预期的内存位置移动到新的内存位置,它将无法正确执行。.reloc节在不破坏代码的情况下通过允许移动代码来解决这个问题。

3、使用pefile解析PE文件格式

代码如下:

import pefile#实例化pefile.PE,通过调用PE构造函数,加载并解析指定的PE文件
pe = pefile.PE("ircbot.exe")#遍历PE文件的各个节点并打印有关它们的信息
for section in pe.sections:print (section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)'''
输出b'.text\x00\x00\x00' 0x1000(加载节的虚拟内存地址基址,也可以视为节的内存地址基址) 0x32830(指定了节被加载后所需的内存大小) 207360(该节将在该内存块中所占用的数据量)
b'.rdata\x00\x00' 0x34000 0x427a 17408
b'.data\x00\x00\x00' 0x39000 0x5cff8 10752
b'.idata\x00\x00' 0x96000 0xbb0 3072
b'.reloc\x00\x00' 0x97000 0x211d 8704
'''#使用pefile列出二进制文件将加载的DLL文件, 以及它将在这些DLL文件中所请求的函数调用。#从ircbot.exe中提取导入信息
for entry in pe.DIRECTORY_ENTRY_IMPORT:print (entry.dll)for function in entry.imports:print ('\t', function.name)#输出 列出了恶意软件声明和将引用的丰富的函数数组
'''
b'KERNEL32.DLL'b'GetLocalTime'b'ExitThread'b'CloseHandle'b'WriteFile' b'CreateFileA'b'ExitProcess'b'CreateProcessA'b'GetTickCount'b'GetModuleFileNameA'b'GetSystemDirectoryA'b'Sleep'b'GetTimeFormatA'b'GetDateFormatA'b'GetLastError'b'CreateThread'b'GetFileSize'b'GetFileAttributesA'b'FindClose'b'FileTimeToSystemTime'b'FileTimeToLocalFileTime'b'FindNextFileA'b'FindFirstFileA'b'ReadFile'b'SetFilePointer'b'WriteConsoleA'b'GetStdHandle'b'LoadLibraryA'b'GetProcAddress'b'GetModuleHandleA'b'FormatMessageA'b'GlobalUnlock'b'GlobalLock'b'UnmapViewOfFile'b'MapViewOfFile'b'CreateFileMappingA'b'SetFileTime'b'GetFileTime'b'ExpandEnvironmentStringsA'b'SetFileAttributesA'b'GetTempPathA'b'GetCurrentProcess'b'TerminateProcess'b'OpenProcess'b'GetComputerNameA'b'GetLocaleInfoA'b'GetVersionExA'b'TerminateThread'b'FlushFileBuffers'b'SetStdHandle'b'IsBadWritePtr'b'IsBadReadPtr'b'HeapValidate'b'GetStartupInfoA'b'GetCommandLineA'b'GetVersion'b'DebugBreak'b'InterlockedDecrement'b'OutputDebugStringA'b'InterlockedIncrement'b'HeapAlloc'b'HeapReAlloc'b'HeapFree'b'HeapDestroy'b'HeapCreate'b'VirtualFree'b'VirtualAlloc'b'WideCharToMultiByte'b'MultiByteToWideChar'b'LCMapStringA'b'LCMapStringW'b'GetCPInfo'b'GetACP'b'GetOEMCP'b'UnhandledExceptionFilter'b'FreeEnvironmentStringsA'b'FreeEnvironmentStringsW'b'GetEnvironmentStrings'b'GetEnvironmentStringsW'b'SetHandleCount'b'GetFileType'b'RtlUnwind'b'SetConsoleCtrlHandler'b'GetStringTypeA'b'GetStringTypeW'b'SetEndOfFile'
b'USER32.dll'b'MessageBoxA'
'''# 3、使用pefile解析PE文件格式## 2.读入数据<font color=#999AAA >代码如下(示例):```c
data = pd.read_csv('https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

4、获取恶意软件的图像

  要了解恶意软件如何设计来捉弄攻击目标,就可以查看它的.rsrc节中所包含的图标。使用wrestool(0.32.3)从fakepdfmalware.exe中提取图像资源保存为.icon格式,并使用icotool转换为png图像。

5、获取恶意软件的字符串

  字符串是程序二进制文件中可打印字符的序列。这些字符串通常包含下载网页和文件的HTTP和FTP命令,用来告诉你恶意软件连接到的地址的IP地址和主机名等类似信息。有时,即使用来编写字符串的语言也有可能暗示恶意软件二进制文件的来源国,尽管可能是伪造的。甚至可以在一个字符串中找到一些文本,它们用网络用语解析了恶意二进制文件的用途。
  字符串还可以显示有关二进制文件的更多技术信息。例如,创建二进制文件的编译器、编写二进制文件所使用的编程语言、嵌入式脚本或HTML等信息。虽然恶意软件作者可以对所有这些痕迹进行混淆、加密和压缩等处理,但是即便是高水平的恶意软件作者也经常会暴露并留下一些痕迹。
将ircbot.exe中的字符串镜像到ircbotstring.txt文件中。

6、反汇编技术

  反汇编是将恶意软件的二进制代码转换为有效的x86汇编语言的过程。恶意软件作者通常使用C/C++等高级语言编写恶意软件程序,然后使用编译器将源代码进行编译成x86二进制代码。但是,反汇编并非易事,因为恶意软件作者经常使用一些技巧来阻挠逆向工程。由于目前要达到完美的反汇编是不可能的,我们必须使用不完善的方法来完成这项任务,使用的方法是线性反汇编,这涉及到PE文件中识别哪些与其x86程序代码相对应的连续字节序列,然后解码这些字节。这种方法主要的局限性是它忽略了CPU在程序执行过程中如何解码指令的细微差别。此外,它也无法解析恶意软件作者有时使用的使程序更难分析的各种混淆。

6.1、使用pefile和capstone反汇编ircbot.exe

使用开源python库pefile和capstone,这是一个可以反汇编32位x86二进制代码的开源反汇编库。反汇编ircbot.exe汇编代码的前100个字节。

#!usr/bin/python3
#-*- coding:utf-8 -*-
import pefile
from capstone import *#反汇编ircbot.exe#加载目标PE文件
pe = pefile.PE("ircbot.exe")#从程序头中获取程序入口点的地址
entrypoint = pe.OPTIONAL_HEADER.AddressOfEntryPoint#计算入口代码被加载到内存中的内存地址
entrypoint_address = entrypoint + pe.OPTIONAL_HEADER.ImageBase#从PE文件对象获取二进制代码
binary_code = pe.get_memory_mapped_image()[entrypoint:entrypoint+100]#初始化反汇编程序以反汇编32位x86二进制代码
disassembler = Cs(CS_ARCH_X86, CS_MODE_32)#反汇编代码
for instruction in disassembler.disasm(binary_code, entrypoint_address):print ("%s\t%s"%(instruction.mnemonic, instruction.op_str))#结果
'''
dec ecx
add byte ptr [ebx + 0x494634], ah
mov eax, dword ptr [0x494634]
shr eax, 8
and eax, 0xff
mov dword ptr [0x494640], eax
mov ecx, dword ptr [0x494634]
and ecx, 0xff
mov dword ptr [0x49463c], ecx
mov edx, dword ptr [0x49463c]
shl edx, 8
add edx, dword ptr [0x494640]
mov dword ptr [0x494638], edx
mov eax, dword ptr [0x494634]
shr eax, 0x10
and eax, 0xffff
mov dword ptr [0x494634], eax
push    0
call    0x414190
add esp, 4
test    eax, eax
jne 0x412224
push    0x1c
'''

7、限制静态分析的因素

加壳、资源混淆、反汇编技术、动态下载数据。

第一章:恶意软件静态分析基础相关推荐

  1. 第一章恶意软件静态分析基础

    第一章恶意软件静态分析基础 <基于数据科学的恶意软件分析> 代码清单1-1 加载pefile模块并解析PE文件(ircbot.exe) 代码清单1-2 遍历PE文件的各个节并打印有关它们的 ...

  2. 北大青鸟c语言课后答案,北大青鸟C语言教程--第一章 C语言基础.ppt

    <北大青鸟C语言教程--第一章 C语言基础.ppt>由会员分享,可在线阅读,更多相关<北大青鸟C语言教程--第一章 C语言基础.ppt(20页珍藏版)>请在人人文库网上搜索. ...

  3. Deep learning with python notebooks 笔记 第一章 深度学习基础

    第一章 深度学习基础 好的图表比文字传达的信息量多 图1-1帮助理清了人工智能.机器学习和深度学习之间的关系. 图1-2 清晰的阐述了经典程序设计范式和机器学习一种新的编程范式的不同.两种范式引出了两 ...

  4. 交换与路由第一章 网络技术基础

    交换与路由第一章 网络技术基础 1.OSI参考模型(OSI/RM) 1.1 OSI参开模型分为5层,从下至上,每一层完成目标明确的不同的功能. 物理层: 规定了激活.维持和关闭通信端点之间的机械特性. ...

  5. 第一章 ContextCapture 19 基础操作

    第一章 ContextCapture 19 基础操作 文章目录 第一章 ContextCapture 19 基础操作 前言 一.ContextCapture是什么? 二.使用步骤 1.ContextC ...

  6. javascript百炼成仙 第一章 掌握JavaScript基础1.6 叶老

    这一日,叶小凡来到青山院附近的小山上修炼,忽然,被一块石头绊了一跤.正在他自认倒霉打算爬起来的时候,在石头缝里边发现了一枚古怪的戒指.戒指通体呈现一种枯黄色,似有一些年代悠久之感. "摔了一 ...

  7. javascript百炼成仙 第一章 掌握JavaScript基础01 初入宗门

    前些天发现了一个巨牛的人工智能学习博客,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转 乐阳村,处于脚本大陆东部的边缘地带,民风淳朴,村民日出而作,日落而息.这一日清晨,所有村民来到村庄的门口,正 ...

  8. javascript百炼成仙 第一章 掌握JavaScript基础1.8 对象的取值

    "小娃娃,我现在问你,如果我事先不知道对象的某个属性叫什么,那又该怎么访问对象中对应这个属性的值呢?"叶老笑呵呵地问到. "什么什么,事先都不知道对象的属性名称,那怎么可 ...

  9. javascript百炼成仙 第一章 掌握JavaScript基础1.4数据类型

    修行还在继续,随着对要诀的深入,叶小凡明白,在编程世界,刚才的直接量都属于一种数据.和人有男女一样,数据也是有类型的. 在JavaScript中,数据可分为两类,分别为原生数据类型(primitive ...

  10. javascript百炼成仙 第一章 掌握JavaScript基础1.7 对象数据类型

    听到这句话,叶小凡一顿,动作停止了下来. 对象数据类型,这在JavaScript基础修炼要诀中只是提了一下,但是并没有细讲,这个对象数据类型一直以来都深深地勾起了叶小凡的好奇心. "小娃娃, ...

最新文章

  1. 20172324 2018-2019-1《程序设计与数据结构》实验2报告
  2. 看大众点评如何通过实时监控系统CAT打造7*24服务
  3. 关于学习Python的一点学习总结(51)
  4. csdn自带的在线编辑器如何让图片并排显示
  5. C#对Excel的样式操作
  6. 高速缓存的数据结构:拉链散列表
  7. Python计算机视觉:第九章 图像分割
  8. SolrJ添加删除文档
  9. easyui select 下拉框的取值和赋值
  10. C语言 | 结构体数组
  11. 华为鸿蒙游戏引擎,打破技术封锁!鸿蒙OS后,国产顶级游戏引擎也已问世!
  12. 模拟银行转账(java+mysql+tomcat +JDBC+ druid连接池 + Servlet + Ajax)
  13. 【SSD目标检测】1:图片、视频内的物体检测与定位
  14. 语音用户如何计算机,笔记本电脑语音聊天对方听不清声音该怎么处理
  15. prisma orm_使用Prisma和React构建RECIPE应用
  16. 给照片怎么拍板好看?
  17. 入手一年,再谈HiFi耳机的“白月光”——飞利浦Fidelio X3
  18. java数组重置_Java:如何重置数组列表,使其为空
  19. APP - 支付宝怎么延时转账?能否撤回转账?
  20. switch新机注意事项

热门文章

  1. 系泊系统的设计界_如何回馈设计界
  2. java restlet 教程_Restlet 2.0 边学边写(五)Restlet的POST、PUT和DELETE
  3. arcmap创建空间索引_ArcGIS ArcMap编辑教程-创建新的点要素
  4. 基于python管理系统论文_基于Python的学生信息管理系统
  5. 金蝶k3服务端显示服务器不是有效的,金蝶k3远程服务器设置
  6. C++ 基本学习 C99基本语法(1)
  7. 笨方法学python 习题31
  8. 全志 Allwinner V3S 开发环境搭建 (二)安装必要工具
  9. uniapp 调用阿里云OCR身份证识别
  10. 纪念一下挖到CSDN官网漏洞