分享

电子取证中如何查找加密压缩文件?——以linux为视角

 昵称m5Gu5 2019-02-19

案例

随笔

知识

声音

其他

编者按

搞过取证的应该想得到,当我们要对一个目标进行关键信息检索的时候,“傻瓜式”的操作,是没有办法应对加密压缩文件的,有时候需要提前把这些加密压缩文件过滤出来单独处理。

本文作者:王伟,湖北省公安县公安局网安大队副大队长。

先森”在《黑客入侵服务器修改考试成绩的取证和分析纪实》一文中,以靶场环境设置在General_log开启的情况下使用纯手工方式完整的追踪和定位了“黑客”的行为痕迹。整个过程遵循电子取证规范,是一篇较为符合现实的电子取证实例。

文章步骤5中,提示用编程的方法遍历加密压缩包,文章对这一部分存在删减。笔者决定作为练习,编写程序遍历后缀为”rar”“zip”的文件,分辨带有加密位的压缩包。

提环境准备

由于靶场环境下Python缺乏rarfile包,需要手工导入,Linux需要自己手动编译生成so文件。

1.首先在python中pip install unrar安装rarfile,然后去下载源文件,不过这就不像Win那样给你封装好了,你需要下载的是源代码:

http://www./rar/unrarsrc-5.4.5.tar.gz 

也就是RARLab官网下载列表中的 UnRAR Source,可以下载到最新版本。

2. 下载完后解压,得到unrar目录,cd unrar 后,使用 make lib 命令将会自动编译库文件,哗啦啦编译完成后,再使用 make install-lib 命令产生 libunrar.so 文件(一般在 /usr/lib 目录下面);

3. 最后,你仍然需要设置Linux系统的环境变量,找到 /etc 目录下的 profile 文件,当然你可以直接使用 vim /etc/profile 命令来编辑,在 profile 文件末尾加上

 export UNRAR_LIB_PATH=/usr/lib/libunrar.so ,

别把我这句话的逗号加进去了。

成功保存后再使用 source /etc/profile 命令使变量生效。

编写查找py脚本

#!/usr/bin/env python

#_*_coding=utf-8_*_

import os, sys

import zipfile

import gzip

from unrar import rarfile

def is_Encrypted(file):   #是否为加密文档

    Suffix = os.path.splitext(file)[1]

    if Suffix == '.zip':

        z = zipfile.ZipFile(file, 'r')

        for i in z.infolist():

            if i.flag_bits & 0x01:

                print('****** 该文件是加密文档!******')

    elif Suffix == '.rar':

        z = rarfile.RarFile(file, 'r')

        for i in z.infolist():

            if i.flag_bits & 0x04:  #0x04 文件使用密码加密

                print('****** 该文件是加密文档!******')

def fun(path):            #当前工作路径

    Const_File_Format = ['.zip', '.rar']  #需要筛出来的文件后缀

    if os.path.splitext(path)[1] in Const_File_Format:

        print ('[!]' + path)

        is_Encrypted(path)

def search(root, target):  #搜索当前目录下的文件

    items = os.listdir(root)

    for item in items:

        path = os.path.join(root, item)

        if os.path.isdir(path):

            None

#小编真心不推荐使用递归,不过此处也没有更好的办法

            search(path, target)

        elif path.split('/')[-1] == target:

            None

        else:

            fun(path)

def main():

    workingpath = os.path.abspath('.')     #获取文件绝对路径

    s = 'file.txt'

    search(workingpath, s)

if __name__ == '__main__':

    main()

最终效果图

作者注】程序编写较为简单,其实还可以拓展功能,如:加上参数设置、自动解密和解压功能。如果有时间会去完善一下。最后谢谢先森、嘟嘟的爸爸、和远远美女的分享。(大家知道“远远美女”是谁吗?)

编者注】本文是一线网安民警的“玩票”之作,代码虽不复杂,但逻辑上清晰好懂,说理充分。既能解决实务中存在的问题,又能起到日常训练、能力保持的作用。感谢他们的分享。

本文未开通赞赏功能,如果您实在想打赏,请移步本号其他文章进行打赏,呵呵。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多