20211317李卓桐 Python取证相关模块

使用python进行取证

参考资料:《python渗透测试编程技术:方法与实践》第十六章

该博客主要内容

  • 网上取证
    1、电子取证
    2、电子证据
  • MD5值的计算
    1、MD5的相关知识
    2、在Python中计算MD5
    3、为文件计算MD5
  • 对IP地址进行地址定位
  • 时间取证
  • 注册表取证
  • 图像取证
  • 总结

为什么要学习网上取证相关内容

首先我们要了解电子取证:

电子取证是指利用计算机软硬件技术,以符合法律规范的方式对计算机入侵、破坏、欺诈、攻击等犯罪行为进行证据获取、保存、分析和出示的过程。从技术方面看,计算机犯罪取证是一个对受侵计算机系统进行扫描和破解,对入侵事件进行重建的过程。具体而言,是指把计算机看作犯罪现场,运用先进的辨析技术,对计算机犯罪行为进行解剖,搜寻罪犯及其犯罪证据。


随着计算机犯罪个案数字不断上升和犯罪手段的数字化,搜集电子证据的工作成为提供重要线索及破案的关键。恢复已被破坏的计算机数据及提供相关的电子资料证据就是电子取证。

收集

  • 由于电子证据的特殊性,在收集电子证据时,首先需由提供证据单位的计算机操作人员打开电脑,查找所需收集的证据。当找到证据时,取证人员应通过显示器观察和确认该文件的形成时间。然后由操作人员打开文件,由取证人员确认该文件系所要收集的证据后,采用相应的方式予以提取固定。在查找证据过程中,如遇文件找不到或打不开等问题,应及时通知专业人员予以协助。同时,为确保电子证据的原始性、真实性、合法性,在电子证据的收集时应采用专业的数据复制备份设备将电子证据文件复制备份,要求数据复制设备需具备只读设计以及自动校准等功能。

固定

  • 常用的固定电子证据的方式,有打印和拷贝两种。通常情况下应当采用打印方式,或两种方式同时使用。只有在文件较多不方便现场打印的情况下,才可以单独使用拷贝方式。
  • 采用打印方式取证,是将计算机文件打印到纸张上。打印文件时,取证人员必须现场监督打印过程,防止计算机操作人员在打印过程中修改文件。打印完毕后,可以按照书证的固定方法,予以固定,但应当注明数据信息在计算机中存放于那个文件夹中。
  • 采用拷贝方式取证,是将计算机文件拷贝到软盘、光盘中。取证人员应当自备计算机,拷贝后,将软盘或光盘插入自备计算机中进行检查。首先进行病毒检测,然后打开文件检查拷贝的质量。如通过检测发现病毒,则应当先消毒,后打开文件检查。

电子证据的认定

何为电子证据

电子证据泛指“一方当事人以数字形式向法庭出示的任何形式的证据信息”。
信息时代变革的节奏是前所未有的,信息的存在与取得方式的飞跃使证据学研究乃至证据立法面临诸多考验。在 证据信息化的大趋势下,以计算机及其网络为依托的电子数据在证明案件事实的过程中起着越来越重要的作用。这种以新的形态出现的证据形式在证据法律实践与理论研究中的有识之士定义为电子证据。

如何认定

  • 电子证据的认证也就是审查电子证据是否符合电子证据认定的相关性,真实性,合法性等标准。在审判实践中主要审查与案件定罪、量刑等相关的电子证据的真实性和合法性。
  • 在审查电子证据真实性过程中,首先必须严格审查电子证据的来源。在证据采信过程中,主要体现在如下几个方面:第一,证据的来源必须是客观存在的,排除臆造出来的可能性;第二,确定证据来源的真实可靠性,根据电子证据形成的时间、地点、对象、制作人、制作过程及设备情况,明确电子证据所反映的是否真实可靠,有无伪造和删改的可能。如网络银行出具的支付、结算凭据,EDI中心提供的提单签发、传输记录,CA认证中心提供的认证或公证书等就具有相当的可靠性和较强的证明力。
  • 其次审查电子证据的内容。结合电子证据本身的技术含量及加密条件、加密方法,判断电子证据是否真实、有无剪裁、拼凑、伪造、篡改等,对于自相矛盾、内容前后不一致或不符合情理的电子证据,应谨慎审查。
  • 最后根据唯一性的原则结合其他证据进行审查分析判断电子证据是否真实。多个连续的电子证据经过时间空间上的排列、组合之后,应同网络犯罪行为的发生、发展过程和结果一致,形成一个完整的证明体系,相互印证,所得出的结论是本案唯一的结论。如审查有无电子证据所反映的事实,同有关书证、物证、证人证言是否互相吻合,是否有矛盾。如果与其他证据相一致,共同指向同一事实,就可以认定其效力,可以作为定案根据,反之则不能作为定案根据。

MD5值的计算

MD5的相关知识

MD5是一种被广泛使用的密码散列函数,无论输入长度是多少,都可以产生出一个128位(16字节)的散列值,不同的输入得到不同的结果( 存在唯一性),用于确保信息传输完整一致,因此MD5也被称为数字指纹,借助这个“数字指纹”,通过检查文件前后MD5值是否发生了改变,就可以知道源文件是否被改动。

MD5由美国密码学家罗纳德·李维斯特设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

用python计算MD5

Python中hashlib模块提供了MD5算法接口,可以通过简单的几个步骤来实现计算MD5方法。
首先:创建一个MD5对象,然后使用这个对象的update方法将要计算MD5值的字符串传递给该对象
最后使用hexdigest方法打印输出十六进制数字表示的MD5值。

实例

用python3计算“hello world”的MD5值实例


执行上面程序,可以看到输出为
5eb63bbbe01eeed093cb22bb8f5acdc3



现在将data中“hello world”中间的空格去掉,变成“hello world”

我们可以看到,输出的值也随之改变:
fc5e038d38a57032085441e7fe7fe7010b0

为文件计算MD5

MD5值的作用并非主要用在字符串计算上,而是用在文件的计算上。例如在下载软件的时候经常会发现,软件的下载页面上除了会提供软件的下载地址以外,还会给出一串长长的字符串,这串字符串其实就是该软件的MD5值。当下载该软件后,可以使用专门的工具计算该软件的MD5值。然后与网站提供的进行比较,如果不同,说明软件已经被篡改了(很有可能被添加了木马或者病毒)


下面我们随便选个文件来查MD5值

通过python输入下列代码并将文件名称输入()


运行上述代码,我们就可以看到这个文件的MD5了

对IP地址进行地理定位

在实际工作中,有时需要对某些IP地址进行定位,也就是说要知道这个IP地址位于哪里。在进行这种操作时,需要一个IP地址和对应地理位置的数据库,目前世界上提供这种数据库的厂商很多,但是大多数都是要收费的,我们可以选择使用maxmind提供的geolite2免费版本。
首先下载这个数据库。目前maxmind需要注册才能完成下载操作,这里给出下载地址链接
按照步骤注册成功,注册account需要一个邮箱验证

用户创建之后,我们从邮箱跳转到maxmind界面就可以下载GeoLite2-City.mmdb了

下载这三个数据

然后我们还需要利用geoip2模块
利用以下代码下载

pip install geoip2


然后我们输入以下代码,需要注意reader输入文件的相对路径

import geoip2.database
ip="124.236.40.3"
reader= geoip2.database.Reader('.\GeoLite2-City.mmdb')
data = reader.city(ip)
print("你所要查询的ip地址是:",ip)
print("该IP所在国家为:",data.country.name)
print("该IP所在区域为:",data.subdivisions.most_specific.name)
print("该IP所在城市为:",data.city.name)
print("该IP所在城市Latitude:",data.location.latitude)
print("该IP所在城市Longitude:",data.location.longitude)

输出结果:

时间取证

有些设备上的时间并不准确,这时就需要进行校准。使用python可以实现时间校准,这里的标准时间是北京时间。
**首先下载和安装ntplib模块

pip install ntplib


并使用request方法连接NTP服务器即可。
并编写一个windows下校准时间的程序:

import os
import time
import nntplib
c= nntplib.NTPClient()
response = c.request('time1.aliyun.com')
ts = response.tx_time
_date=time.strftime('%Y-%m-%d',time.localtime(ts))
_time=time.strftime('%X',time.localtime(ts))
os.system('date() && time{}'.format(_date,_time))

如果希望使用时间戳,可以使用time模块来显示时间,
用以下代码

import time
t= time.localtime()
print("The time is %s"% time.asctime(t))

代码执行结果:

注册表取证

注册表由键、子键和值项构成。一个键是分支中的一个文件夹,而子键是这个文件夹中的子文件夹,子键同样也是一个键。
对注册表可以进行以下操作:

  • 创建项和项值。
  • 更值项的数据
  • 删除项、子项或值项
  • 查找项、值项或数据
    在python中可以使用winreg模块来完成上述操作。其中比较常用的方法包括OpenKey(打开)
    CreateKey(创建)、SetValueEx(添加)、DeleteValue(删除)和CloseKey(关闭)
    **在取证中往往需要读取注册表中的内容,因此可以使用函数OpenKey(),它的原型为:
    winreg.OpenKey(key,sub_key,reserved=0,access =KEY_READ)
    这里的OpenKey()函数一共4个参数,第一个是根键,第二个是子项,第三个为保留整数,必须为0,第4个是访问权限。
    下面给出了一个使用winreg读取RecentDocs.docx中名称为“0”的程序。
import winreg
redocs=r"Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs\.docx"
key=winreg.OpenKey(winreg.HKEY_CURRENT_USER,redocs)
value,type =winreg.QueryValueEx(key,'0')
print(value)


运行结果如图:

图像取证

目前,通过相机或截图获取的图像仍然是很重要的证据。从取证角度看,图像取证需要考虑两个方面:一是如何获取作为证据的图像;
二是如何验证图像的真实性。在python中,有一个优秀的图像处理框架————PIL库。Image是PIL库图像处理中常见的模块,它提供了对图像进行操作的各种功能。
加载图像使用open()函数:

from PIL import Image
im = Image.open("地址")
im.show()

保存图像可以使用save()函数

from PIL import Image
im= Image.open("address")
im.save("address")

当打开一张图片以后,还可以通过查看im输出图片的各种属性,其中包括filename,format,mode,size,width,height,info等。
下面的程序输出了一张图片的这些属性:
from PIL import Image
im= Image.open("address")
print(im,filename,im.format,im.mode,im.size,im.width,im.height,im.info)

遇到的问题与解决方法

1、 在IP地址的地理定位的学习中,我遇到了一些难题,首先是对geoip2模块在vscode中的应用,我下载了geoip2的模块,但是在vscode中确无法识别。

后来搜索百度找到了解决办法:在vscode中选择Windows store带的python而不是recommended的python从而解决了相关问题,vscode就可以采纳geoip2模块了

2、问题:在reader()中无法识别相关文件,提示no such file or directory,这个问题我起初找了很多种解决方法,如文件名改写、换pycharm运行、将文件与代码放入一个文件夹中,都没有解决掉

解决方法:我询问了2019级的王鹏宇学长和2020级的周慧琳学姐,听取了他们的建议,并搜索了百度相关问题的解决办法,通过选择输入相对路径而非路径,vscode即可识别,解决了以上问题


3、在查文件的MD5值时我也遇到了一个问题,就是python中对文件名称的转义问题
我们可以看到这个文件的名称是:C:\Users\AAA\Documents\Book1.xlsx

但是如果你直接将文件名称输入代码中

会报SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: tr这个错误

我在遇到这个问题后上百度搜索从而得知了问题所在,参考网站运行python文件报SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: tr
在运行python文件的时候报SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: tr这个错误,其实引起这个错误的原因就是转义的问题。
原因分析:在windows系统当中读取文件路径可以使用,但是在python字符串中\有转义的含义,如\t可代表TAB,\n代表换行,所以我们需要采取一些方式使得\不被解读为转义字符。

网站上给出3个解决方案,我用第二个方案“双反斜杠代替单反斜杠”成功解决问题
4、在IP地址查询中,我通过Maxmind官网下载Geolite-city的mmbd文件时,由于官网纯英文,我在申请账号,邮箱验证时都遇到了不理解意思的困难



解决办法:我通过查单词的意思,中文翻译来理解邮箱、官网的内容,找到了下载的地址,并按照网上的教程一步一步完成了相关IP数据库的下载,从而完成了IP地址地理定位这一模块内容

总结与感受

在此次学习过程中,由于还在入门阶段,我遇到了不少的问题和,但是很庆幸我坚持了下来,并确确实实有所收获。在实际的工作中,电子证据的采集尽量由专业人员通过专业设备来获取,因为电子证据的来源会受到严格的审查。以上只是简单介绍了可能涉及的几点技术问题
通过学习这块内容,让我深感自己相关知识的薄弱,同时对计算机领域又有了更深一步的认识和理解,也产生了更浓厚的兴趣。希望以后能学到更多有用且专业的知识。

posted @ 2021-11-14 22:42  LLLZTTT  阅读(370)  评论(1编辑  收藏  举报
$