Python-Analysis-Malware
Python恶意软件分析应用-PEfile
0x1、前言
要想对恶意代码快速分析,Python是一门必须要掌握的编程技能。因为它是跨平台的,而且容易阅读和编写。许多开源安全工具也是用Python写的。这篇博客文章介绍利用Python对(PE)文件分析的编程思路,快速解析单个文件并提取关键特征 。
如果想要学习Python的安全编程,下面有一套课程可以了解一下。
https://www.sans.org/course/automating-information-security-with-python
恶意代码分析Linux系统
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的更多相关文章
- python学习笔记(1):python基础
python基础回顾 1.Ipython魔术命令 %timeit //多次执行一条语句,并返回平均时间,%%time->多条语句,用于测试一条语句用了多少时间 %time //返回执行一条语句的 ...
- Lab 11-2
Analyze the malware found in Lab11-02.dll. Assume that a suspicious file named Lab11-02.ini was also ...
- Ubuntu 14.04 下使用微软的跨平台轻量级开发神器 Visual Studio Code
因为 Visual Studio Code 不断更新,官方最新 v1.32 的 .deb 包已经不能用于 Ubuntu 14.04 直接安装了. 下载 v1.31 的 deb 包安装即可:https: ...
- Lab 11-3
Analyze the malware found in Lab11-03.exe and Lab11-03.dll. Make sure that both files are in the sam ...
- Lab 11-1
Analyze the malware found in Lab11-01.exe. Questions and Short Answers What does the malware drop to ...
- 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? ...
- 【ARTS】01_08_左耳听风-20181231~20190106
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- PyTorch环境配置
PyTorch环境配置 本文档用于记录PyTorch环境配置过程中的要点. PyTorch环境配置 安装Miniconda 安装PyTorch 配置远程开发工具 基于CUDA的张量 导入警告问题 参考 ...
- Python Ethical Hacking - Malware Analysis(1)
WRITING MALWARE Download file. Execute Code. Send Report. Download & Execute. Execute & Repo ...
- Python Ethical Hacking - Malware Analysis(4)
DOWNLOAD_FILE Download files on a system. Once packaged properly will work on all operating systems. ...
随机推荐
- javascript 数组对象及其方法
数组声明:通过let arr = new Array(); 或者 let arr = []; 数组对象可调用的方法: 1)find方法,使用情况是对数组进行筛选遍历,find方法要求某个函数(A)作为 ...
- 基于python的机器学习实现日元币对人民币汇率预测
## 导入所需的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow a ...
- Uploadify提示-Failed,上传不了文件,跟踪onUploadError事件,errorMsg:2156 SecurityError Error #2156 null
在使用Uploadify上传文件时,提示-Failed,上传不了文件 折腾中.....,没有结果.....%>_<%... 于是跟踪onUploadError事件,发现 errorMsg: ...
- 第十一周(11.24-12.01)----final评论II
1. Nice 项目:约跑软件 这款app非常实用.从性能上讲,这款软件基于Android开发.使用者只要注册就能实用,操作简便.在功能上,这款软件不仅为两个有意愿同时跑步的人牵线,为跑步的人提供跑 ...
- JMeter学习笔记——认识JMeter(1)
拿到一个自动化测试工具,我们第一步就应该了解它能提供我们哪方面的功能(最直接的方法就是从官网获取),接下来就是简单的对这个工具进行“功能测试”了,当然这里的功能测试不是让你找它存在的bug,而是让自己 ...
- 插入排序的C、C++实现
一.插入排序 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到 ...
- [转帖]PG的简单备份恢复 找时间进行测试
转帖PG的简单使用 https://blog.csdn.net/lk_db/article/details/77971634 一: 纯文件格式的脚本: 示例:1. 只导出postgres数据库的数据, ...
- iOS 打开系统设置的常用功能
说明: 跳转到系统设置不同功能界面,只要知道路径都很简单,路径可以自己打开手机设置界面看, 照着模板把对应的名称替换就可以了,但是得知道对应功能的英文名称. 1. prefs:root=Privacy ...
- BZOJ5462 APIO2018新家(线段树+堆)
一个显然的做法是二分答案后转化为查询区间颜色数,可持久化线段树记录每个位置上一个同色位置,离线后set+树状数组套线段树维护.这样是三个log的. 注意到我们要知道的其实只是是否所有颜色都在该区间出现 ...
- 【BZOJ1028】[JSOI2007]麻将(贪心)
[BZOJ1028][JSOI2007]麻将(贪心) 题面 BZOJ 洛谷 题解 感觉好久没打过麻将了,似乎都快不会打了. 这个数据范围看着就觉得是\(O(n^2m)\). 那么就枚举听哪张牌,然后枚 ...