基础知识

16进制

四个二进制为一组进行存储运算 一个16进制数范围在0~15

1
2
3
0000 ---> 0
1111 ---> 15
0001 0000 ---> 16

满16进1 即16进制 也可以用2^4^=16进行记忆

如何用一个字符表示大于9的16进制

1
2
3
4
5
6
7
8
0 ---> 0
1 ---> 1
...
9 ---> 9
10 ---> A
11 ---> B
...
15 ---> F

示例:

1
2
3
4
01010111001001101110 二进制
0101 0111 1010 1110 1111 四位一组
0x05 0x07 0x0a 0x0e 0x0f 0x0为表示这是个16进制
57AEFH 也可以这样表示 最后结尾的H表示前边是16进制

运用:很广 可以自行百度

进制转换:

(1) 可以百度进制转换网站 推荐这个网站 https://tool.lu/hexconvert/

(2) 运用脚本
1
2
3
x='123abc'
b=bin(int(x,16))[2:]
print(b)

ASCII码

ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。

ASCII码是字符的整形形式 属于另一种标准码 总共采用7位二进制比特来表示包括不可见字符、字母数字下划线等和控制字符在内的总共128个字符 ASCII码只是一种很广泛运用的编码形式 也是方便我们看的

哈希

==哈希函数==(以SHA-256为例)

SHA-256是指一个字符串或文件 经过SHA-256算法之后 能够得出一个具有256位的唯一的字符串

SHA-256函数大致步骤:

1.原始字符转换为ASCII码 再转换为二进制

2.利用同余方程L+k+1≡448(mod 512)求出补位数 在刚刚二进制后补上k个0

3.第二次补位 在刚得到的字符串后补上二进制形式表示的64位的L(前补0)

4.分块 刚刚得到的字符一定是512的倍数位 以32位为一个块进行分块

5.哈希摘要函数循环 得到最终哈希(不要求掌握)

注意:哈希函数具有高度不可逆性 在密码学上是安全的 文件或字符中一位不一样 得出的哈希字符串就完全不一样

==校验机制==的完美载体 大名鼎鼎的比特币校验机制(后续会讲)

1
2
3
4
graph LR
A[文件或字符串] ---> B[计算哈希] ---> C[哈希校验]
C --->|哈希值相同| D[没被更改]
C --->|哈希值不同| E[遭到更改]

哈希家族:MD5(128位) SHA1(160位) SHA256 SHA512

(SHA = Secure Hash Algorithm)

(MD = Message-Digest Algorithm)

算法不同 得出哈希长度不同 现阶段看清问的是啥别混了就行

==哈希得出来的字符 要么是数字加全大写字母 要不是数字加全小写字母==

安全性:无法进行爆破 ==密码学上安全 字符串越长越安全== (可以去算算2^256^是个多大的数)

计算:

(1) CMD
1
certutil -hashfile 路径 SHA256
(2) 网站 (略)

(3) 软件 (我会发)

BASE64

一个简单的==可逆==的不安全的文本加密方式

加密:

假设我们编码Man这个字符串

先把他变成ASCII码 也就是77 97 110 然后将ASCII值变成二进制

01001101 01100001 01101110 每一个字符都补全至八位二进制

然后将上述二进制比特每六位分组

010011 010110 000101 101110 ==因为每六位一组 一组取值范围是0到63 可以用来一一对应的标志64个字符==所以我们称他为BASE64 其他BASE家族编码的原理也差不多就是这样子

上述六位一组对应的十进制为19 22 5 46

对应码表中的值 T W F u

如果二进制不是3的倍数 二进制用0补位 并且补了几个之后在编码后会在末尾加上几个=

比如说 我们加密A这个字符串

01000001 —> 010000 01==0000==(末尾不足六位需要补齐)

因为BASE64在工作的时候会先将数据放入一个24bit的缓冲区 如果数据不足24bit 要用0补位 所以上述字符变成了

010000 01==0000== 000000 000000 而后面的6个0 在BASE64中用=来对应

所以A字符串最后变成了 —> QQ== 不信可以去网站试一下

==一个字符串 有数字有大小写字母 就可以试一下是不是BASE家族 如果后面带等号那肯定就是==

简单了解就好 以后遇到知道是啥就行 到时候邮件深度恢复会用

BASE==家族==:常见的有BASE64 BASE32 BASE16 BASE91

加解密:

(1) 在线加解密网站

(2) 软件

Winhex和Notepad++

听我讲

常用数据储存格式

.db和.sqlite

常见的数据库存储格式文件 一般是PC上==微信和QQ的聊天记录==或者各种记录存储的格式(大概吧我也没啥印象)

一般来说文件内部信息是经过加密处理的 直接原始数据搜索字符串是不行的 但是软件自动取证的取证结果会从数据库文件中提取信息 但是没有的就得自己去找

一般搜索聊天记录会寻找这种数据库文件

==特别注意:数据库中会储存有被删除的聊天记录(多数情况) 所以数据库的取证要多练==

.db和.sqlite是两种不同存储格式的数据库文件 用不同的软件进行取证分析 但是大体上都一样

.plist与.ufd

很重要 很重要 很重要

plist一般出现在手机备份文件中 plist一般用于储存手机备份中的手机基本信息 各种信息都有可能储存 plist的打开方式很简单 Notepad++就可以打开 并且文件不以加密格式储存 可以直接进行字符串原始数据搜索

Iphone备份也会有.plist备份文件 跟上面一样样的 而与安卓不一样的是 如果苹果是使用ufd备份的话 会有一个.ufd文件 这个文件很重要

==特别注意:.ufd文件中会含有Iphone的备份密码 如果这个密码找不到的话 这个备份就永远解不开(参考20年美亚杯Bob的Iphone部分题目)==

当然.ufd也可以用Notepad++直接打开

.xml与.json

都很简单 就是一种储存格式 大胆用Notepad++打开就行

.exe与.dll

微步云沙箱(暂时掌握到这步)

.lnk

快捷方式 很简单

.dat

.dat文件不是一种确定类型的文件 dat的全名为data 如果.dat文件内容很小 就10多K的话 可以尝试直接用Notepad++打开 但是如果文件比较大 可能就得按着情况来了

不过以比赛的感觉 应该还是以数据库文件为主

Edge浏览记录.dat文件取证 ESEDATABASEVIEW

Bitcoin钱包文件 wallet.dat 脚本取证

这部分很活 多做题 依情况吧

WINDOWS文件系统介绍

扇区、簇

扇区是硬盘中的最小存储单元 ==文件在硬盘中占据的最小单位也就是簇== 一个文件占据的簇也必须是==整数个== 不能占用半个这个是文件的逻辑大小 所以文件的逻辑大小都是簇的整数倍

扇区是一块磁盘上划分的区域 硬盘的读写以扇区为基本单位

磁道是一组记录密度不同的同心圆 扇区和磁道主要用于磁盘寻址定位

图中A为磁道 B为扇区 D为簇

==磁盘读写原理== 寻道 旋转 数据传输 即先找到数据所在磁道 然后旋转磁盘找到所在扇区 就能定位到簇 开始数据读取

文件删除

一个文件在磁盘上是怎么储存的呢 这个文件首先得先经过一个写入的过程 计算机写入这个文件 把这个文件写进磁盘 并且除了内容 还得写入其他的包括权限啊 位置啊等等的一些基本信息 这样一来写入的功能完成了 要这个文件的时候读取他就行

那么删除呢 要删除这个文件 其实只是相当于在这个磁盘上文件对应的位置 给他打上一个标记 标记这块区域可以给其他文件使用 也就是可以被覆盖掉 ==如果这个文件被覆盖了 那么就真的没办法恢复了== 没被覆盖总有恢复的办法

FAT32

FAT32 (File Allocation Table)是指以32位二进制形式文件分配表储存的管理方式 文件分配表就相当于目录 指引着操作系统寻找对应文件所在位置 这个表丢了那这块硬盘上所有数据就无法找回了

FAT32特点

==4GB缺陷 FAT32支持的单一文件最大大小为4GB== FAT32特点是会将文件大小储存在一个4字节的数值中 而4字节是2^32^-1 正好是4GB-1字节

NTFS

NTFS (New Technology File System)反正这个文件系统很厉害 很安全 具有==数据保护、恢复以及加密功能 并且是一个日志型文件系统==

NTFS特点

(1) 日志系统

NTFS文件系统是日志型文件系统 所有对磁盘的修改都会被记录在事件中 如果发生磁盘文件和内存文件不匹配 NTFS会自动将磁盘文件标记为损坏 并将==内存文件写入到磁盘新的位置==这就实现了NTFS的自动修复功能 大大提高了文件系统可用性 但是这也就代表了会对整个磁盘进行高速频繁的读写 如果将一个U盘刷成NTFS格式 因为U盘硬件限制 这样做是非常伤U盘的

(2) 加密

NTFS系统常用的加密方式就是EFS加密 也是==系统自带==的一种加密方式 对文件进行加密操作之后 系统会让你备份一个EFS证书 用于后期对已加密文件进行解密

==注意== 如果在比赛中 遇到了一个EFS加密文件 直接在取证大师中打开大概率是没办法导入证书的 最好还是==仿真==进入系统 导入在取证大师中找到的证书文件 这样保险

注册表

注册表是windows的核心 可以说是一个非常非常大的树状的数据库 里边记录的各种数据保证了系统从软件到硬件的各种关键数据 ==注册表信息存储在NTUSER.DAT中== 如果在自己电脑中可以CMD输入regedit进行查看 如果是比赛中就得使用相应软件进行解析

CPPUISA公众号 邮件与注册表取证 对于初学来说已经很详细了 ==课下自学==

资源管理器历史记录机制

RECENT文件夹

是不是很多人都有过疑问 取证大师是怎么知道我们这一段时间什么时候打开了什么文件 是不是系统自带了什么历史记录 答案是肯定的没错 确实自带

Recent文件夹==所在位置==

1
C:\Users\当前用户名 每个人都不一样\AppData\Roaming\Microsoft\Windows

==注意== 可能一些人的电脑上边不叫Recent文件夹 叫最近使用的项目 我反正是这样 也不知道为啥

打开之后会发现一大堆.lnk快捷方式 你每打开一个文件或者文件夹 都会在这个文件夹中生成他的快捷方式 而取证中如果找不到目标文件的位置 但是却能找到目标文件所对应的快捷方式 ==那么我们起码能推出嫌疑人最后打开目标文件的时间== 以及解析出目标文件所在目录 看看是被删除了还是被加密了

内存

除了上述的Recent文件夹 在内存中也会保存资源管理器的记录 并且由于系统自身的机制 ==内存中的资源管理器记录其实是更加全面的== 包括了许多程序调用的dll文件也会被记录在内存中 但是大部分情况下内存是单独出一部分题的

timeliner.txt

特殊文件(夹)

WINDOWS

就在C盘一打开就能看得懂 我寻思没啥基础的也能知道这个文件夹啥作用吧 题目会问你哪个是系统盘 如果没有这个文件夹那就肯定不是系统盘

USER

也一样 一打开就看得到 windows是支持多个用户间切换的 不同的用户可以设有不同的权限 例如有的时候调试电脑 就要用到user里边自带的Administrator 也就是管理员用户 还可以有公共Public用户

可以通过设置不同用户权限来专门分配一个用户作为公共账号 简单了解即可 这个文件夹里边存放的就是这些用户的信息

所以这个文件夹也是可以用来判断系统盘的

Program Files / Program Files (x86)

Program Files文件夹是默认软件的安装路径 安装软件之后桌面上生成的快捷方式来源就是这个文件夹 当然在安装软件的时候可以自行选择安装路径 一般比赛的时候不会在这里为难你 Program Files指的是依赖64位操作系统的软件所安装的路径 而Program Files (x86)是依赖32位的 ==包括一些系统自带的软件 安装路径也会在这里== 所以也是可以通过这两个文件夹判断系统盘在哪

假如你需要对一个软件的数据库文件进行解析 软件没帮你自动跑出来 就得依靠自己去寻找了 ==虽然PC上取证大师已经帮了很多忙 但是这个思维是一定要建立起来的 包括在后期手机取证的时候 去寻找安装路径进而寻找数据库文件进行取证的思路尤为重要==

回收站文件

推荐大家安装一下Everything这个软件 功能很强大 搜索速度极快 快到我都不敢信 而且可以搜出几乎所有的文件

首先插一句题外话 一个文件被扔进回收站里是可以找回的 都懂 一个文件从回收站里边删除了 也是有几率找回的 这个也得懂

将一个文件删除到回收站时 系统会生成两个文件 假如我删除了一个word文档 那么系统会自动生成两个文件 这个5NG9YB是个随机的字符串 不重要

==一个是$R打头的 一个是$I打头的== 其他字符一致 如果比赛的时候有把这个文件导出就会知道 $R文件对应的就是删除文件的源文件 $I文件是顺带生成的(也许不能叫顺带 不知道用啥词) 这个$I文件很小 基本就在1KB左右 里边存储的是这个被删除文件的一些基本信息 如文件名 文件大小 删除时间等等 很可惜我需要一个镜像才能导出文件 我的电脑没办法导出这个$I文件

Microsoft Word文件介绍

文件结构

表面上看word是个文档 但是其实他的本质是压缩包 只不过是个很特别的压缩包

我们直接将随便一个word文件扔进010editor里

熟悉文件头的都知道 50 4B 03 04是压缩包头部标识而这个文件头部也就注定了这个文件的本质还是压缩包 我们将这个压缩包的后缀名从docx改为zip

可以看到成功用解压软件打开了这个压缩包 没有报错 里面的大部分文件都是配置文件 包括字体 大小 行间距等等 这些在目前都不怎么需要关心 我们需要留意文档内容

打开这个压缩包里面的word文件夹 打开document.xml文件 往后滑 就可以看到我们输入的文件内容 word系统将字符串以空格隔开 记录每个字字符串的各种信息 包括字体和大小等 ==如果一个word文件恢复不出来 可以从这个文件里提取==

~$临时文件

word中 $开头的文件属于word的一个临时文件 在打开word的时候会自动生成 在关闭word之后会自动被删除 而$开头的文件属于隐藏文件 有几率在打开了显示隐藏文件之后可以看到(对 有几率)

我们打开了一个目录在D:\work的一个很久没有打开过的文档 在Everything中找到该word对应的~$临时文件 这个临时文件虽然不储存任何和文件内容相关的信息 但是也有用

==注意 比赛时可以用这个临时文件来推断是否文件最近访问时间被修改 一般这样问的考点就在~$文件==

ASD文件

.asd文件就不是word的临时文件了 当word被非正常关闭了 就会生成一个.asd文件 这个文件如果打开 会发现他储存了这个word文档的上一个版本的内容信息 ==word自带恢复上一个版本内容信息 就是从这个文件恢复的==

==注意 这个.cad文件如果是在自己电脑上测试的话 需要开启word的”自动恢复”功能==

注意标红路径 上面将文件保存格式只是为了将备份文件打开时的文件格式 而不是保存备份的备份的文件格式

首先我们得找到.asd文件 我以非正常手段(拔电源)关闭了一个名为”处罚”的word文档(因为当时没设置自动恢复)

当然如果直接找找不到的话 可以在Everything上搜索.asd文件

我们可以直接将这个.asd文件以word文档打开 打开就是上一个版本的内容 因为这个.asd文件可以用word打开 我推测他也是和.docx一样 本质是压缩包文件 我们将他拖进winhex

果然 我们看到了50 4B 03 04这是标准的zip压缩包头文件 我们将他改成压缩包打开 打开里面解压出来的WordDocument文件 搜索之前的文件内容123

完美 找到所需文件内容

==注意 如果需要寻找一个word的之前版本内容 入手点基本上就是这个 也不排除嫌疑人自己搞的备份==

计算机底层

冯·诺依曼体系

特点

  1. 程序存储执行
    计算机是靠诸多晶体管控制电路而运行 早期的计算机是靠手动控制电路执行 这种设计缺点在于 程序是一次性执行 即没办法存储起来反复执行 冯·诺依曼体系计算机 则提出了程序是可存储执行 即人们把要执行的程序存储在一个地方 然后在运行的时候让CPU去固定的地方去取这样做的好处是程序可以存储起来多次运行 且修改程序不需要手动调整电路

  2. 二进制逻辑
    十进制逻辑的计数有利于人类阅读 但不利于电路设计 在电路中 状态一般有两种开启或者关闭 二进制逻辑的设计简化了计算机内部电路的设计

  3. 存储程序方式

指令和数据不加区分的存储在同一个存储器中 也就是说数据和程序在内存中的存储方式都是一样的 都是在内存中以二进制方式存储的 唯一不同是 指令的存储有特定的格式 可以让CPU识别出来

指令 操作码 地址码
内容 指明本指令的操作类型 指明操作数和地址

什么是CPU

中央处理器(Central Processing Unit) 是电子计算机的主要设备之一 电脑中的核心配件 其功能主要是解释计算机指令以及处理计算机软件中的数据 CPU是计算机中负责读取指令 对指令译码并执行指令的核心部件

CPU工作的几个步骤

取指令 指令译码阶段 执行指令阶段 访存取数阶段 结果写回阶段

举个栗子

当我们双击执行一个.exe文件之后 操作系统通过文件系统驱动找到文件的存储位置并开始加载 分解文件 并按数据、代码等不同部分加载到内存中(内存马上会讲) 然后CPU就会在内存中读取指令 把指令编译成CPU能理解的语言 然后执行 取数 写回

注意 CPU在读取指令时是按照内存中写入指令的顺序来的 也就是说上一个程序没跑完你的这个程序就会卡着 (小时候计算机课的时候肯定干过

什么是内存

内存(Memory)是的重要部件之一 也称内存储器和主存储器 它用于暂时存放CPU中的运算数据 与硬盘等外部存储器交换的数据 它是外存与CPU进行沟通的桥梁 计算机中所有程序的运行都在内存中进行 内存性能的强弱影响计算机整体发挥的水平 只要计算机开始运行 操作系统就会把需要运算的数据从内存调到CPU中进行运算 当运算完成 CPU将结果传送出来。

一般我们日常生活中的内存都是RAM(Random Access Memory)随机存储器 存放临时数据和指令 一大特点就是断电丢失数据 在取证中需要断电前先提取内存数据

举个栗子

内存是暂时存储程序以及数据的地方 当我们使用WPS处理文稿时 当你在键盘上敲入字符时 它被存入内存中 当你选择保存时 内存中的数据才会被存入硬(磁)盘

为什么要有内存

寄存器 缓存 内存储器 外存储器
读写速度 很快 相对慢 相对很慢

CPU的作用是高速解决和处理计算机中的大多数指令 所以要求非常快的读写处理能力 因此CPU中的存储设备基本上都是寄存器

而CPU经常要从内存中读取数据 但是为什么CPU不直接从外存(硬盘)中直接读取数据呢

简单来说就是因为硬盘的读写速度太慢了 会严重拖后CPU的处理速度 CPU有大量的空闲浪费时间 这是很致命的 于是发明出了内存这一中间缓冲存储器 起到缓冲CPU与硬盘读写速度差的功能 肯定有人会问为什么不把寄存器做成硬盘 (你知道那会得多贵吗)

同理 内存和CPU间也有蛮大的读写速度差 而且以冯·诺依曼体系 内存中的存储的数据和程序是不加以区分的 CPU处理的时候肯定是要浪费一点时间进行区分

所以有了缓存 既能缓冲CPU和内存的读写速度差 也能将数据和程序加以区分的储存 提高了整体处理速度

内存里有什么

了解了CPU和内存的关系之后 就应该明白 内存里的东西很多 很多 很多 没办法一一列举 什么都可能有 具体可以通过内存取证的题目来理解

内存取证步骤

听我说

非常非常非常简单的日志的取证