Python恶意软件分析应用-PEfile

0x1、前言

要想对恶意代码快速分析,Python是一门必须要掌握的编程技能。因为它是跨平台的,而且容易阅读和编写。许多开源安全工具也是用Python写的。这篇博客文章介绍利用Python对(PE)文件分析的编程思路,快速解析单个文件并提取关键特征 。

如果想要学习Python的安全编程,下面有一套课程可以了解一下。

https://www.sans.org/course/automating-information-security-with-python

恶意代码分析Linux系统

https://remnux.org/

0x2、工具介绍

使用许多基于Python的恶意软件分析工具。这些工具可以有助于理解Python,产生有用的输出。通过简单地查看源代码并根据需要进行研究,可以了解作者编写的内容并修改代码以满足自己的目的。遇到现有工具无法满足需求的情况,可以依赖现有的Python库来提取数据并以特定于需求的方式操作输出。

pyew
AnalyzePE
pescanner
peframe
pecheck

一个PE文件分析库 [pefile](https://github.com/erocarrera/pefile)。写好了代码,可以轻松地遍历出可执行文件的结构。pefile是第三方模块,而不是内置标准Python安装的模块。必须先安装pip install pefile

0x3、Pefile基础

查看帮助信息 help(pefile)。 以下是输出的内容。

除了模块的概述之外,我们还看到了模块中包含的类的描述。向下滚动提供有关每个类的信息。目前只需要关注PE类:

这个类能够访问PE文件的结构。输出还说明了如何创建PE类的实例。

使用emotet样本

https://www.virustotal.com/en/file/9c6dcc1772b076f930b2bae4b9ddccec81660a4f9a633cb129eb27dd19d5d81a/analysis/

可以返回帮助菜单来阅读有关PE类的方法和属性的更多信息,或者通过键入dir(pefile.PE)来查看此信息的摘要 下面是该输出的摘录。

以“get_”开头的多个方法的引用,这些方法有助于收集有关文件的一些基本静态信息。例如 get_impash() 返回导入地址表(IAT)的MD5 hash。文件示例:

get_imphash()方法提供文件的导入表哈希。

有价值的另一个“get_” 函数是 get_warnings()。 当pefile解析Windows可执行文件时可能会遇到错误。get_warnings()函数返回在处理PE文件时生成的警告列表。安全性分析是检查异常的,所以这个输出可以展现有用的起点以供进一步检测。

使用Pefile还可以查看可执行文件导入哪些DLL和函数。输出help(pefile.PE)查看相关属性。

“DIRECTORY_ENTRY_”属性指向文件关键构成要素。要查看导入哪些DLL和函数就需要关注导入表,我们可以看到DIRECTORY_ENTRY_IMPORT,它的描述是ImportDescData实例的列表。

遍历此列表以查看它提供的信息:

输入 help(pefile.ImportDescData)查看帮助说明:

如上所示,此结构包含DLL的名称和导入的符号列表。写个循环确认下:

图中有一个新的结构ImportData。输入help(pefile.ImportData)查看帮助:

目前只关注导入表的符号名称,因此name属性包含了符号名称的信息。合并到代码中使输出更具可读性。

代码输出可执行文件导入的DLL名称及其对应的导入函数名称。也可以使这个输出更优雅,但目前所需的信息已经输出了。

0x3、多个样本使用场景

使用脚本自动执行工作可以扩展处理更大量的数据分析任务。上面代码执行的是单个文件分析。如果日常工作涉及恶意软件分析可能需要筛选数百或数千个文件,然后再选择一个文件进行仔细分析。从所有文件中提取关键信息可以对样本进行分组和优先级排序,以便进行更有效的分析。

在大量样本中,通过imphash进行分组可以更容易地识别类似的功能或用于生成二进制文件的通用打包器/打包工具。可以通过编写一个小脚本来从文件目录中提取imphash:

1、创建目录中所有文件的列表(完整路径)。
2、打开一个XLSX/CSV文件进行写入
3、计算并写入每个文件的sha256哈希并插入到XLSX/CSV文件中。
4、自动过滤数据。

pe_stats.py代码示例:

#~/usr/bin/env python
import sys,os
import pefile
import hashlib
import xlsxwriter if __name__ == "__main__": #Identify specified folder with suspect files
dir_path = sys.argv[1] #Create a list of files with full path
file_list = []
for folder, subfolder, files in os.walk(dir_path):
for f in files:
full_path = os.path.join(folder, f)
file_list.append(full_path) #Open XLSX file for writing
file_name = "pefull_output.xlsx"
workbook = xlsxwriter.Workbook(file_name)
#bold:加粗,num_format:数字格式
bold = workbook.add_format({'bold':True})
worksheet = workbook.add_worksheet() #Write column headings
row = 0
worksheet.write('A1', 'SHA256', bold)
worksheet.write('B1', 'Imphash', bold)
row += 1 #Iterate through file_list to calculate imphash and sha256 file hash
for item in file_list: #Get sha256
fh = open(item, "rb")
data = fh.read()
fh.close()
sha256 = hashlib.sha256(data).hexdigest() #Get import table hash
pe = pefile.PE(item)
ihash = pe.get_imphash() #Write hashes to doc
worksheet.write(row, 0, sha256)
worksheet.write(row, 1, ihash)
row += 1 #Autofilter the xlsx file for easy viewing/sorting
worksheet.autofilter(0, 0, row, 2)
workbook.close()

使用命令python pe_stats.py suspect_files在名为“suspect_files”的目录中运行它 。为了填充目标目录,从VT下载了100个高危风险的文件(使用基本的VTI查询“type:peexe positives:50+”) 在Microsoft Excel中打开时,数据结果如下所示。

快速浏览前几行会立即显示imphash值中的模式。下一步研究最大的导入表HASH集群,了解为什么这些文件组具有相同的导入HASH。

0x4、参考

https://malwology.com/2018/08/24/python-for-malware-analysis-getting-started/

Python-Analysis-Malware的更多相关文章

  1. python学习笔记(1):python基础

    python基础回顾 1.Ipython魔术命令 %timeit //多次执行一条语句,并返回平均时间,%%time->多条语句,用于测试一条语句用了多少时间 %time //返回执行一条语句的 ...

  2. Lab 11-2

    Analyze the malware found in Lab11-02.dll. Assume that a suspicious file named Lab11-02.ini was also ...

  3. Ubuntu 14.04 下使用微软的跨平台轻量级开发神器 Visual Studio Code

    因为 Visual Studio Code 不断更新,官方最新 v1.32 的 .deb 包已经不能用于 Ubuntu 14.04 直接安装了. 下载 v1.31 的 deb 包安装即可:https: ...

  4. Lab 11-3

    Analyze the malware found in Lab11-03.exe and Lab11-03.dll. Make sure that both files are in the sam ...

  5. Lab 11-1

    Analyze the malware found in Lab11-01.exe. Questions and Short Answers What does the malware drop to ...

  6. How do I learn machine learning?

    https://www.quora.com/How-do-I-learn-machine-learning-1?redirected_qid=6578644   How Can I Learn X? ...

  7. 【ARTS】01_08_左耳听风-20181231~20190106

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. PyTorch环境配置

    PyTorch环境配置 本文档用于记录PyTorch环境配置过程中的要点. PyTorch环境配置 安装Miniconda 安装PyTorch 配置远程开发工具 基于CUDA的张量 导入警告问题 参考 ...

  9. Python Ethical Hacking - Malware Analysis(1)

    WRITING MALWARE Download file. Execute Code. Send Report. Download & Execute. Execute & Repo ...

  10. Python Ethical Hacking - Malware Analysis(4)

    DOWNLOAD_FILE Download files on a system. Once packaged properly will work on all operating systems. ...

随机推荐

  1. NetFPGA Demo ——reference_nic_nf1_cml

    NetFPGA Demo --reference_nic_nf1_cml 实验平台 OS:deepin 15.4 开发板:NetFPGA_1G_CML 实验过程 从NetFPGA-1G-CML从零开始 ...

  2. 蜗牛慢慢爬 LeetCode 25. Reverse Nodes in k-Group [Difficulty: Hard]

    题目 Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. ...

  3. leetcode Database4

    一.Department Top Three Salaries The Employee table holds all employees. Every employee has an Id, an ...

  4. PSP(3.16——3.22)以及周记录

    3.17 13:30 14:45 15 60 讨论班 A Y min 14:50 17:05 5 130 得到设备 Cordova 蓝牙连接 A Y min 23:15 23:45 5 25 英语百词 ...

  5. 下载tensorflow-gpu版本的源

    每次换了个地方就要重新配置自己的开发环境那是特别蛋疼的,尤其是要弄到服务器跑的时候,不小心把环境弄崩了是非常惨的. 下载tensorflow-gpu版本的源 docker pull daocloud. ...

  6. 【bzoj1088】扫雷

    见过水的,没见过这么水的 Description 相信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则 ...

  7. Django入门项目实践(下)

    5.设置应用程序的样式 安装django-bootstrap3. # untitled/untitled/settings.py # ··· INSTALLED_APPS = [ 'django.co ...

  8. java Integer.valueOf 和 Integer.parseInt 和 new Integer区别及注意事项

    先看一下下面的结果 1.System.out.println(127==127); //true , int type compare 2.System.out.println(128==128); ...

  9. IIS应用程序池相关问题及连接池已满的解决方法

            关于应用程序池 在 IIS 6.0 中,引入了应用程序池,应用程序池是将一个或多个应用程序链接到一个或多个工作进程集合的配置.因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔 ...

  10. Access与SQL Server 语法差异

    序号 简述 Access语法 SqlServer语法 Oracle语法 解决方案 01 系统时间 Now(),Date() GETDATE() SYSDATE GetSysTimeStr 02 连接字 ...