Windows10 Python3.10环境下的PEframe快速安装说明

文章目录

  • 1. 文件依赖及准备
    • 1.1 文件依赖
    • 1.2 使用pip工具下载依赖文件包
    • 1.3 使用Python脚本自动下载依赖文件包
  • 2. 安装OpenSSH
  • 3. 安装编译环境
    • 3.1 swigwin
    • 3.2 微软编译工具
  • 4. 安装M2Crypto
  • 5. 安装依赖包
    • 5.1 whl安装1
    • 5.2 zip格式文件安装
    • 5.3 whl安装2
    • 5.4 peframe安装
      • 5.4.1 安装
      • 5.4.2 修改错误代码
  • 6. 资源文件下载

在学习恶意代码分析课程中,PE格式文件分析需要安装PEframe,按照官方网站的安装中,会发现一些问题,例如某些组建安装过程需要编译一些c语言,因此需要配置编译环境;有些Python程序代码随着Python版本的升高出现了不兼容,需要修改。本文主要记录了目前能够获得的全部最高版本的文件包,进行离线安装的完整过程。

1. 文件依赖及准备

1.1 文件依赖

使用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]

1.2 使用pip工具下载依赖文件包

可以使用pip工具方便的下载相关版本文件,以下的命令可以下载yara-python 4.2.3。其他包的下载可以更改包名和版本即可。

pip download yara-python==4.2.3

1.3 使用Python脚本自动下载依赖文件包

以下脚本能够自动下载索引文件中列出的依赖文件,由于默认下载的都是网站上列出的第一个下载版本的文件,可能会出现下载的版本不匹配。这里仅给出参考。

#!/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()

2. 安装OpenSSH

peframe需要调用openssh部分功能实现一些hash的计算,因此在Windows 10环境下,需要安装OpenSSH。笔者是从官方网站下载的Win64OpenSSL-1_1_1q.exe进行安装。
安装需要特别注意:安装后需要将安装文件夹中bin子文件这个路径添加到操作系统的Path环境变量中。

3. 安装编译环境

标准的安装过程中,部分组建安装过程需要编译代码,可能需要使用到swigwin和微软命令行编译软件。以下简要说明安装要点。如果使用本文末给出的编译好的安装文件包附件,则可以忽略本步骤

3.1 swigwin

swig是跨平台的多种语言编译管理工具,在Windows下可以下载到最新的版本是swigwin4.02
下载后解压缩到安装目录后,将安装文件夹的路径添加到环境变量Path中。

3.2 微软编译工具

编译C/C++代码的配套编译环境。这里可以下载最新版本Visual Studio 2022 Build Tools
下载地址: https://aka.ms/vs/17/release/vs_buildtools.exe

4. 安装M2Crypto

标准安装请参考源码安装,需要预先安装好步骤3的软件,这里不再详述。
以下简单介绍在给出的文末附件资源包的安装方法。

  1. 解压缩M2Crypto-master-Build-win10x64.zip
  2. 在命令行中执行 python setup.py install 安装。

5. 安装依赖包

需要安装的依赖包按照依赖关系进行安装。安装命令如下:

5.1 whl安装1

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

5.2 zip格式文件安装

  1. 解压缩以下文件
    future-0.18.2.zip
    pefile-2022.5.30.zip
    win_unicode_console-0.5
    olefile-0.46.zip
    pyreadline-2.1.zip
  2. 在命令行中执行 python setup.py install 安装。

5.3 whl安装2

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

5.4 peframe安装

5.4.1 安装

解压缩peframe-master.zip,并执行以下安装命令
python setup.py install

5.4.2 修改错误代码

由于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]

6. 资源文件下载

下载地址

你可能感兴趣的:(教学内容,脚本,python,开发语言,开源软件)