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. ...
随机推荐
- C语言函数参数传递
1.值传递 void swap(int x,int y) { int temp = x; x = y; y = temp; } void main() { , b = ; swap(a, b); } ...
- 作业6--四则运算APP之Sprint计划
1.现状 小组成员各就各位,理顺计划思路,制定工作计划. 2.部分需求索引卡 第一个阶段没有具体功能的实现. 3.任务认领 产品负责人:王宏财 Master:陈思明 项目开发成员:许佳豪.吴旭涛 4. ...
- nginx转发swoole以及nginx负载
nginx作为静态服务器同时转发swoole配置: location /{root //静态文件目录;index index.html index.htm;//默认首页 if(!-e $request ...
- Linux下利用json-c从一个json数组中提取每一个元素中的部分字段组成一个新json数组
先把代码贴上来,有时间整理一下 首先说一下要实现的功能: 假定现在有一个json格式的字符串,而且他是一个josn中的数组,比如: [ { "id": "NEW20170 ...
- array_pop()方法
array_pop — 将数组最后一个单元弹出(出栈) 说明 mixed array_pop ( array &$array ) array_pop() 弹出并返回 array 数组的最后一个 ...
- 【Vue学习笔记1】基于Vue2.2.6版本
记录一下自己关于Vue学习的过程,便于以后归纳整理以及复习. 1.下载引用vue.js 下载: npm install vue ,然后引用. 或直接线上引用: <script src=" ...
- 如何让搜索引擎抓取AJAX内容?
越来越多的网站,开始采用"单页面结构"(Single-page application). 整个网站只有一张网页,采用Ajax技术,根据用户的输入,加载不同的内容. 这种做法的好处 ...
- 学习《Unix/Linux编程实践教程》(1):Unix 系统编程概述
0.目录 1.概念 2.系统资源 3.学习方法 4.从用户的角度来理解 Unix 4.1 登录--运行程序--注销 4.2 目录操作 4.3 文件操作 5.从系统的角度来理解 Unix 5.1 网络桥 ...
- CF1110C Meaningless Operations(构造题)
这可能是我打那么多次CF比赛时,做出来的最难的一道题了……而且这题也是个绝世好题…… 题目链接:CF原网 洛谷 题目大意:$q$ 组询问,每次给定 $a$ 询问 $\gcd(a\&b,a\o ...
- debian开启cgroup memory子系统
Debian系统默认是关闭cgroup memory子系统的. 1.修改grub启动参数 # vim /etc/default/grub GRUB_CMDLINE_LINUX="cgroup ...