Python 取证与虚拟化 | 哈希函数

2025年3月17日 | 阅读13分钟

在本教程中,我们将学习使用 Python 进行取证科学、基本的 Python 取证应用、哈希函数、破解加密、可视化、命名约定、Dshell 和 Scapy,以及网络取证的详细解释。

引言

收集和保存证据对于计算机设备上的网络取证调查和分析至关重要。它在法庭上作为对付罪犯的证据发挥着重要作用。如今,技术使我们只需在浏览器上输入查询即可获取信息。但这同时也吸引了网络犯罪分子。网络犯罪分子是指利用其系统和互联网进行恶意活动的人。他们可以从其他地方获取您的所有信息。

凭借其广泛的应用,Python 还提供了与数字取证协同工作的便利。通过使用它,我们可以收集数据、提取证据,还可以加密密码。它将支持我们恢复证据的可靠性。

在此之前,您必须熟悉 Python 及其高级概念。

计算取证简介

计算取证是用于解决各种取证学科中问题的研究领域。它使用基于计算机的建模、分析、计算机模拟和识别。Python 取证由 Chet Homster 发明。还有模式证据,如指纹、鞋印、工具痕迹和任何文件。它利用程序、对象范围和物质。还有生理和行为模式,如数字证据、DNA 和犯罪现场。

Python Forensics and Virtualization

我们还可以使用各种算法来处理信号和图像处理。通过使用算法,我们还可以处理 数据挖掘计算机图形学机器学习、计算机视觉数据可视化和统计模式识别。

简而言之,计算取证用于研究数字证据,计算取证处理各种类型的证据。

Python 取证应用的命名约定

我们必须熟悉命名约定和模式,以遵循 Python 取证指南。请看下表。

命名约定示例
局部变量驼峰命名法(可选下划线)studentName
Constant大写,单词用下划线分隔STUDENT_NAME
全局变量以驼峰命名法(可选下划线)作为前缀my_studentName
函数帕斯卡命名法(可选下划线);主动语态MystudentName
模块以驼峰命名法作为前缀_studentname
Class类以帕斯卡命名法作为前缀;保持简短class_MyStudentName
Object以 ob_和驼峰命名法作为前缀ob_studentName

哈希算法是最好的将二进制数据流作为输入的方式之一。在现实生活中,我们可以加密我们的密码、文件,甚至是任何种类的数字文件或数据。该算法接受输入并生成加密消息。让我们看一个给定的例子。

示例

Python 哈希函数

Python 哈希函数用于将大量数据映射到固定值。输入返回相同的输出。它是一个哈希和,并存储具有精确信息的特征。一旦我们将数据映射到固定值,就无法还原。这就是为什么我们也将其称为单向加密算法。

让我们理解以下示例 -

示例 -

输出

Enter your password: sharma
The hash string to store in the db is: 947782bdb0c7a5ad642f1f26179b6aef2d9857427b45a09af4fce3b8f1346e91:8a8371941513482487e5ab8af2ae6466

现在,我们将重新输入密码。

输出

Enter your password devansh 
The hash string to store in the db is: 4762866edd3b49c7736163ef3d981e42629a09a9ca7e081f56d116e137d77b9c:ebbf5b16bd9f4b989505a495bf7ae9b9
Enter new password sharma
Passwords do not match

哈希函数具有以下属性。

  • 我们可以简单地将任何哈希值转换为任何输入值。
  • 它无法生成与给定哈希值相同的输出。
  • 在不移动哈希值的情况下转换输入是不现实的。

在 Python 中破解加密

我们必须知道如何加密在分析和证据过程中获取的文本数据。首先,了解基本的加密。

通常,军队人员通过发送秘密消息来传达他们的计划,而不会被敌人读取。这些消息不是人类可读的格式。明文通过加密算法加密,这些文本被称为密文。

假设一位将军向高级官员发送消息,以保护文本不被敌人获取。这里,我们将明文中的字母向字母表后移四位。现在,A 将是 E,B 将是 F,依此类推。

让我们通过以下示例来理解如何破解向量数据。

示例 -

输出

Enter message: Yes
~
}
|
{
z
y
x
w
v
u
t
s
r
r~
q
q}
p
p|
o
o{
n
nz
m
my
l
lx
k
kw
j
jv
i
iu
h
ht
g
gs
f
fr
e
eq
d
dp
dp~
c
co
co}
b
bn
bn|
a
am
am{
`
`l
`lz
_
_k
_ky
j
jx
i
iw
h
hv
g
gu
f
ft

虚拟化

虚拟化是模拟 IT 系统(如工作站、网络和存储)的行为。我们创建此类资源的虚拟实例。这可以通过虚拟机管理程序来完成。

Python Forensics and Virtualization

硬件虚拟化在计算机取证中发挥着非常重要的作用。通过使用虚拟化,我们可以获得以下优势。

  • 我们可以在每次调查中使用处于有效状态的工作站。
  • 我们可以通过在虚拟机上包含驱动器的 dd 镜像来恢复已删除的数据。
  • 虚拟机可以变成恢复设备,有助于收集证据。

我们定义以下步骤来使用 Python 创建虚拟机

步骤 - 1: 假设我们将本地机器视为 “dummy”。每个虚拟机至少有 512 MB 内存。

步骤 - 2: 现在,我们将此虚拟机附加到默认集群。

步骤 - 3: 接下来,从虚拟硬盘启动虚拟机。

现在,我们将上述步骤组合到一个虚拟机参数对象中。让我们看下面的例子。

示例 -

输出

Virtual Machine dummy added successfully.

Python 中的网络取证

Python 还提供了处理网络取证的功能。在现代,Python 网络取证环境调查可能会遇到许多困难。这些问题可能是响应违规报告、执行与易感性相关的评估或验证合规性。让我们了解网络取证的基本术语。

客户端 - 客户端运行个人计算机和工作站。

服务器 - 服务器执行客户端的请求。

协议 - 协议是数据传输时必须遵循的一组规则。

WebSockets - WebSockets 是一种提供全双工通信并运行在 TCP 连接上的协议。我们可以使用 WebSockets 发送双向消息。

借助这些协议,我们可以验证信息并由第三方用户发送或接收。但是,加密对于安全通道是必要的。

让我们了解以下网络示例

示例 -

输出

The client waits for connection

Python Scapy 和 Dshell

让我们简要介绍一下 Python Scapy 和 Dshell。

Python Scapy

Scapy 是一个基于 Python 的工具,用于分析和操作网络流量。借助 Scapy,我们可以分析数据包操作。我们还可以捕获和解码大量协议的数据包。使用 Scapy 的好处是为调查员提供有关网络流量的详细报告。第三方工具(如操作系统指纹识别应用程序)也可以在 Scapy 中使用。让我们看下面的例子。

示例 -

输出

source INDIA >> destination USA

Python Dshell

Dshell 是一个基于 Python 的网络取证分析工具包。它由美国陆军研究实验室开发,并于 2014 年开源发布。它使取证调查变得非常容易。Dshell 提供以下解码器。

  • reservedips - 用于识别 DNS 问题的解决方案。
  • rip-http - 从 HTTP 流量中提取文件。
  • large-flows - 是一个表示列表网络流的解码器。
  • Protocols - 识别非标准协议。
  • dns - 提取 DNS 相关查询。

Python 搜索

搜索是取证调查中最重要的部分。如今,好的搜索取决于运行证据的调查员。从消息中搜索关键词是调查的支柱。我们可以通过关键词找到强有力的证据。

从已删除的消息中获取信息需要经验和知识。

Python 提供了各种内置模块来支持搜索操作。调查员可以使用“谁”、“什么”、“哪里”、“何时”、“哪个”等关键词来查找结果。让我们看下面的例子。

示例 -

输出

11
11
-1

Python 索引

索引是一个功能,调查员可以使用它从文件中收集潜在证据。证据可以限制在内存快照、磁盘镜像、文件或网络跟踪中。它对于减少耗时任务(如关键词搜索)的时间非常有帮助。索引也用于在交互式搜索阶段定位关键词。在以下示例中,我们解释了 Python 中的索引。

示例 -

输出

Index example :  1
Index for indexing :  3
Index of the character keyword found is 
10

Python 图像库

取证调查的真正含义是从可用资源中提取有价值的信息。从资源中获取所有相关信息对于报告至关重要。它有助于我们得出适当的结果。

Python Forensics and Virtualization

资源数据可以是简单数据结构(如数据库),也可以是复杂数据结构(如 JPEG 图像)。

调查员可以轻松地从简单数据结构中访问信息,但从复杂数据结构中提取信息是一项繁琐的任务。

Python 提供了 PIL 图像库。它用于为 Python 解释器添加图像处理功能。它还支持文件格式、图形功能,并提供强大的图像处理。让我们通过以下图片来了解如何从图像中提取数据。

我们定义了编程示例来解释它是如何实际工作的。

步骤 - 1: 假设我们有一张需要提取详细信息的图片。

Python Forensics and Virtualization

步骤 - 2: 图像由各种像素值组成。PIL 库用于提取图像详细信息以收集证据。让我们看下面的例子。

示例 -

输出

[255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

输出以列表的形式返回。它是 RGB 组合的像素值,更好地描述了所需的数据。

Python 多进程支持

取证专家发现,在普通犯罪中,将数字解决方案应用于大型数字证据存在困难。大多数数字证据是单线程的,这意味着我们一次只能执行一个命令。让我们简要了解一下 多进程的介绍

多进程处理

多进程是系统支持多个进程的能力。它使多个程序能够并发运行。多进程有两种类型 - 对称和非对称处理

让我们看下面的多进程示例。

示例 -

输出

List processing complete

Python 移动取证

取证调查不仅限于标准计算机硬件,如硬盘、CPU 等。硬件通过技术来分析非标准硬件或瞬态证据。

如今,智能手机广泛应用于数字调查,但它们仍然被认为是“非标准”的。通过对智能手机进行适当的研究,我们可以提取照片、智能手机数据和消息。

安卓智能手机使用 PIN 或字母数字密码。密码可以是 4 到 16 位/字符。

在以下示例中,我们将通过锁屏提取数据。智能手机密码通常存储在 /data/system 目录下的 password.key 文件中。

Android 存储此密码的加盐 SHA1-哈希和 MD5-哈希。请看以下示例。

示例 -

上述代码是破解智能手机密码的示例代码。字典攻击无法破解密码,因为哈希密码存储在 盐文件 中。盐文件是 64 位随机整数的十六进制表示字符串。已 ROOT 的智能手机或 JTAG 适配器可以访问 文件。

已 ROOT 的智能手机

文件 /data/system/password.key 的转储存储在 SQLite 数据库中的 lock screen.password_salt 下。密码存储在 settings.db 下。

JTAG 适配器

JTAG 代表联合测试行动小组,可用于访问盐值。同样,Riff-Box 或 JIG-Adapter 可用于访问销售文件。我们可以使用从 Riff-box 获得的信息找到加密数据的位置。规则如下。

  • 查找关联字符串“password_salt”。
  • 盐文件的宽度以字节表示。这是它的长度。
  • 这是实际搜索以获取智能手机存储密码/PIN 的长度。

内存与取证

Python 取证主要侧重于使用 Volatility(一个基于 Python 的框架)进行易失性内存分析。

易失性存储器

易失性内存是一种在系统电源关闭或中断时会擦除的内存。简单来说,如果我们正在处理一个尚未保存到硬盘的文档,而电源突然断开,我们就会丢失数据。

易失性内存遵循与其他取证调查相同的模式。

  • 首先,需要选择调查目标。
  • 获取取证数据。
  • 取证分析

RAM 转储工具用于分析从 RAM 中收集的数据。

YARA 规则

YARA 是一种用于检查可疑文件/目录并匹配字符串的工具。它基于模式匹配实现。它在取证分析中发挥着重要作用。

示例 -