在学习恶意代码分析课程中,PE格式文件分析需要安装PEframe,按照官方网站的安装中,会发现一些问题,例如某些组建安装过程需要编译一些c语言,因此需要配置编译环境;有些Python程序代码随着Python版本的升高出现了不兼容,需要修改。本文主要记录了目前能够获得的全部最高版本的文件包,进行离线安装的完整过程。
使用pipdeptree可以获得peframe包依赖情况如下:
peframe==6.0.3
- M2Crypto [required: Any, installed: 0.38.0]
- oletools [required: Any, installed: 0.60.1]
- colorclass [required: Any, installed: 2.2.2]
- easygui [required: Any, installed: 0.98.3]
- msoffcrypto-tool [required: Any, installed: 5.0.0]
- cryptography [required: >=2.3, installed: 37.0.4]
- cffi [required: >=1.12, installed: 1.15.1]
- pycparser [required: Any, installed: 2.21]
- olefile [required: >=0.45, installed: 0.46]
- olefile [required: >=0.46, installed: 0.46]
- pcodedmp [required: >=1.2.5, installed: 1.2.6]
- win-unicode-console [required: Any, installed: 0.5]
- pyparsing [required: >=2.1.0,<3, installed: 2.4.7]
- pefile [required: Any, installed: 2022.5.30]
- future [required: Any, installed: 0.18.2]
- python-magic [required: Any, installed: 0.4.27]
- virustotal-api [required: Any, installed: 1.1.11]
- requests [required: >=2.22.0, installed: 2.28.1]
- certifi [required: >=2017.4.17, installed: 2022.6.15]
- charset-normalizer [required: >=2,<3, installed: 2.1.1]
- idna [required: >=2.5,<4, installed: 3.3]
- urllib3 [required: >=1.21.1,<1.27, installed: 1.26.11]
- yara-python [required: Any, installed: 4.2.3]
可以使用pip工具方便的下载相关版本文件,以下的命令可以下载yara-python 4.2.3。其他包的下载可以更改包名和版本即可。
pip download yara-python==4.2.3
以下脚本能够自动下载索引文件中列出的依赖文件,由于默认下载的都是网站上列出的第一个下载版本的文件,可能会出现下载的版本不匹配。这里仅给出参考。
#!/usr/bin/env python3
# -*- encoding:utf8 -*-
import sys
import requests
def extract(html, pattern='//*[@id="files"]/div[2]/div[2]/a[1]/@href'):
from lxml import etree
parser = etree.HTML(html)
return parser.xpath(pattern)
def download(url, filename):
with open(filename, 'wb') as f:
response = requests.get(url, stream=True)
total = response.headers.get('content-length')
if total is None:
f.write(response.content)
else:
downloaded = 0
total = int(total)
for data in response.iter_content(chunk_size=max(int(total/1000), 1024*1024)):
downloaded += len(data)
f.write(data)
done = int(50*downloaded/total)
sys.stdout.write('\r[{}{}]'.format('█' * done, '.' * (50-done)))
sys.stdout.flush()
sys.stdout.write('\n')
def loadpackagename(package='index.txt'):
with open(package, 'r', encoding='utf8') as f:
line = f.readline().strip('\n')
while line != '':
if not line.startswith('★'):
yield tuple(line.split(' '))
line = f.readline().strip('\n')
def main():
for (pak, pakver) in loadpackagename('peframe需预安装包.txt'):
url = f'https://pypi.org/project/{pak}/#files'
html_text = requests.get(url).text
print(url)
myurl = extract(html_text)
if len(myurl) != 0:
strUrl = str(myurl[0])
filename = strUrl[strUrl.rindex('/')+1:]
print(filename)
download(strUrl, filename)
else:
print(f'(⊙﹏⊙):{pak} CANNOT FOUND!')
if __name__ == "__main__":
main()
peframe需要调用openssh部分功能实现一些hash的计算,因此在Windows 10环境下,需要安装OpenSSH。笔者是从官方网站下载的Win64OpenSSL-1_1_1q.exe进行安装。
安装需要特别注意:安装后需要将安装文件夹中bin子文件这个路径添加到操作系统的Path环境变量中。
标准的安装过程中,部分组建安装过程需要编译代码,可能需要使用到swigwin和微软命令行编译软件。以下简要说明安装要点。如果使用本文末给出的编译好的安装文件包附件,则可以忽略本步骤。
swig是跨平台的多种语言编译管理工具,在Windows下可以下载到最新的版本是swigwin4.02
下载后解压缩到安装目录后,将安装文件夹的路径添加到环境变量Path中。
编译C/C++代码的配套编译环境。这里可以下载最新版本Visual Studio 2022 Build Tools
下载地址: https://aka.ms/vs/17/release/vs_buildtools.exe
标准安装请参考源码安装,需要预先安装好步骤3的软件,这里不再详述。
以下简单介绍在给出的文末附件资源包的安装方法。
python setup.py install
安装。需要安装的依赖包按照依赖关系进行安装。安装命令如下:
pip install urllib3-1.26.12-py2.py3-none-any.whl
pip install idna-3.3-py3-none-any.whl
pip install charset_normalizer-2.1.1-py3-none-any.whl
pip install certifi-2022.6.15.1-py3-none-any.whl
pip install requests-2.28.1-py3-none-any.whl
pip install virustotal_api-1.1.11-py2.py3-none-any.whl
pip install yara_python-4.2.3-cp310-cp310-win_amd64.whl
pip install python_magic-0.4.27-py2.py3-none-any.whl
python setup.py install
安装。pip install pcodedmp-1.2.6-py2.py3-none-any.whl
pip install pyparsing-2.4.7-py2.py3-none-any.whl
pip install pycparser-2.21-py2.py3-none-any.whl
pip install cffi-1.15.1-cp310-cp310-win_amd64.whl
pip install colorclass-2.2.2-py2.py3-none-any.whl
pip install easygui-0.98.3-py2.py3-none-any.whl
pip install cryptography-37.0.4-cp36-abi3-win_amd64.whl
pip install msoffcrypto_tool-5.0.0-py3-none-any.whl
pip install oletools-0.60.1-py2.py3-none-any.whl
解压缩peframe-master.zip,并执行以下安装命令
python setup.py install
由于peframe开源软件最新更新的版本是2019年的,python语言的版本升级以及很多软件组建的升级,导致部分的代码在Windows环境下运行会出现一些错误。因此可以尝试运行peframe c:\windows\notepad.exe命令, 如果出现如下的错误,可以按照下面的方法逐条解决。直到运行以上的命令不再报错为之,说明安装成功。
错误信息:AttributeError: module ‘collections’ has no attribute ‘Callable’
解决方法:编辑文件“C:\Program Files\Python310\Lib\site-packages\pyreadline\py3k_compat.py”,修改collections.Callable为collections.abc.Callable。
错误信息:ImportError: failed to find libmagic. Check your installation
解决方法:将libmagic.zip中文件解压缩,复制到c:\windows\system32文件夹中。
错误信息:AttributeError: ‘array.array’ object has no attribute ‘tostring’
解决方法:编辑文件 “C:\Program Files\Python310\lib\site-packages\peframe-6.0.3-py3.10.egg\peframe\modules\features.py”
修改21行中,将return delta.tostring()[:-key_len] 改成 return str(delta)[:-key_len]