盘古石杯2023选拔赛部分赛题复现

前言

在今年的盘古石之前准备一下。

环境准备

“盘古石杯”全国电子数据取证大赛晋级赛&总决赛-检材下载、题目、答案
下载地址:百度网盘
加密容器密码:usy1UN2Mmgram&^d?0E5r9myrk!cmJGr

环境解压

VeraCrypt - Free Open source disk encryption with strong security for the Paranoid

选择盘符解压:
image.png

案情简介

2023年4月,公安机关接到受害人张娟报案称自己在“USDTRE”虚拟币投资理财平台被骗。据公安机关了解,受害人张娟在抖音平台推送的“物联智慧购”兼职刷单招聘平台注册了个人信息,后有一位自称是“物联智慧购”兼职招聘的工作人员容某与自己联系,双方还互加了微信好友。刚开始,受害人通过兼职刷单获得了一些利润,后容某向其推荐了“USDTRE”投资理财平台,还向其介绍了投资导师魏某,在魏某的指导下,受害人刚开始获利,大额投资后无法提现,方知被骗。公安机关接警后,立即成立专案小组,通过公安机关的侦查与分析,锁定了该诈骗团伙的业务窝点,并将容某和魏某抓获,并扣押了容某的安卓手机1部、苹果电脑1台,魏某的安卓、苹果手机各1部,电脑1台。同时,公安机关还摸排到了该诈骗团伙的设备窝点,并在设备窝点抓获了平台技术人员臧某,扣押了臧某的安卓手机1部,电脑1台,软路由1台,调证服务3台,调证数据库1个。以上检材已分别制作了镜像,检材清单见附件。请结合案情,对上述检材进行勘验与分析,完成以下题目。
image.png

受害人

容恨寒

Android

1.根据容恨寒的安卓⼿机分析,⼿机的蓝⽛物理地址是

压缩包下Basic/deviceinfo.json
image.png
A9:8B:34:8B:04:50

2.根据容恨寒的安卓⼿机分析,SIM卡的ICCID是

image.png
89014103211118510720

3.根据容恨寒的安卓⼿机分析,团队内部沟通的聊天⼯具程序名称是

Basic/appinfo/appinfo.db
image.png
数据库位于:data/com.qim.imm/databases/im_db_225_18969939616_8AF2C81F-58C2-8459-C492-9C4F65E6BC1E.db
image.png
Potato

4.根据容恨寒的安卓⼿机分析,团队内部沟通容恨寒收到的最后⼀条聊天信息内容是

BAProvider$j中保存了私聊信息,BAProvider$g保存了群聊消息。
私聊中容恨寒最后收到消息时间为:1681302605884863
image.png
群聊中容恨寒最后收到消息时间为:1681302912881658(群聊中包含容恨寒)
image.png
解码body内容:
image.png
收到

5.根据容恨寒的安卓⼿机分析,收到的刷单.rar的MD5值是

BAProvider$b中有包含文件大小的内容,猜测是保存文件信息:
image.png
image.png
并且保存Path也显示了其文件名:
image.png
查找对应的rar文件:
计算md5:certutil -hashfile 刷单.rar MD5
image.png
如果没有后面的Path,可以通过py实现解析sqlite读取:

1
2
3
4
5
6
7
8
9
10
11
import sqlite3
from base64 import b64decode

con = sqlite3.connect("E:/Panguite/FileExport/Rong_AndroidPhone/PatatoDatabase/im_db_225_18969939616_8AF2C81F-58C2-8459-C492-9C4F65E6BC1E.db")
cur = con.cursor()
result = cur.execute("SELECT NAME, PATH FROM `BAProvider$b` WHERE STATUS=1;")

for item in result.fetchall():
print(f"{b64decode(item[0]).decode('U8')} -> {item[1]}")

con.close()

dc52d8225fd328c592841cb1c3cd1761

6.根据容恨寒的安卓⼿机分析,收到的刷单.rar的解压密码是

【内网学习笔记】20、Hashcat 的使用

BAProvider$h中有密码规则:

1
2
3
4
5
6
密码规则:
前五位:wlzhg
末尾两位:片区简写“xn”
中间四位:0-9随机数组合
各部分用@连接
示例:wlzhg@8888@xn

John提取压缩包的hash:

1
2
3
4
5
6
rar2john 刷单.rar                                                                                               
刷单.rar:$rar5$16$fd80c0dad768537589fd4a01167abade$15$576345a86e55ff8cd1258d28b6c5e1b5$8$ecbfa2295c0972e4
刷单.rar:$rar5$16$fd80c0dad768537589fd4a01167abade$15$df67722bc447977d5b0840414c0d2308$8$ecbfa2295c0972e4
刷单.rar:$rar5$16$fd80c0dad768537589fd4a01167abade$15$157f35cab10ccbb515082130f74f43bd$8$ecbfa2295c0972e4
刷单.rar:$rar5$16$fd80c0dad768537589fd4a01167abade$15$559f2a623c52d4a8d9bd41be918773f9$8$ecbfa2295c0972e4
刷单.rar:$rar5$16$fd80c0dad768537589fd4a01167abade$15$9d8cbbe107134d6e7ce6b792dcfe60ae$8$ecbfa2295c0972e4

直接用第一个:

1
hashcat -m 13000 -a 3 '$rar5$16$fd80c0dad768537589fd4a01167abade$15$576345a86e55ff8cd1258d28b6c5e1b5$8$ecbfa2295c0972e4' -1 0123456789 'wlzhg@?1?1?1?1@xn'

image.png
wlzhg@3903@xn

7.根据容恨寒的安卓⼿机分析,发送刷单.rar的⽤⼾的⼿机号是

1
2
3
4
5
6
7
8
9
10
11
import sqlite3
from base64 import b64decode

con = sqlite3.connect(r"D:\Desktop\MouseWithoutBorders\im_db_225_18969939616_8AF2C81F-58C2-8459-C492-9C4F65E6BC1E.db")
cur = con.cursor()
result = cur.execute("SELECT SENDERNAME, SUBJECT, BODY FROM `BAProvider$g`;").fetchall()
result += cur.execute("SELECT SENDERNAME, SUBJECT, BODY FROM `BAProvider$j`;").fetchall()

for item in result:
if '刷单.rar'.encode('U8') in b64decode(item[2]):
print(item[0], "\n -> ", b64decode(item[1]).decode('U8'), '\n -> ', b64decode(item[2]).decode('U8'))

image.png
两人均发送了刷单.rar
先由后者发送,再由前者转发,前往BAProvider$o查看用户信息
image.png
或者直接在BAProvider$b中搜索刷单.rar获取到msgID,然后在私聊和群聊中可以定位到位置:
image.png
image.png
15137326185

8.根据容恨寒的安卓⼿机分析,发送多个报表的用户来⾃哪个部⻔

搜索关键字xls

1
2
3
4
result = cur.execute("select sendername, subject, body from `BAProvider$j`;").fetchall()
for item in result:
if b'xls' in b64decode(item[2]):
print(item[0])

image.png
BAProvider$o中查看id为229
image.png
BAProvider$m中获取部门:
image.png
parentid为109,在BAProvider$m中id为技术部:
image.png
技术部

9.根据容恨寒的安卓⼿机分析,MAC的开机密码是

com.lq.bwljsb是一个记事本软件,虽然被删除,但是数据仍然保存在/data/data/com.lq.bwljsb/databases
下的runs.db
这里使用导出可能出现问题,直接解压压缩文件没有问题:
image.png
apple

10.根据容恨寒的安卓⼿机分析,苹果⼿机的备份密码前4位是

同上 1976

iPhone

iphone备份文件位于mac电脑的PC.raw/分区5/未命名 - 数据/Library/Application Support/MobileSync/Backup/下:
这个隔哪呢我去?

Mac

恢复时注意不要重置密码,否则用apple(密码来源容恨寒android#9)无法打开。

1.嫌疑人容恨寒苹果电脑的系统版本名称是?

image.png
image.png
Monterey

2.嫌疑人容恨寒苹果电脑操作系统安装日期是?

macOS上软件安装/更新时间的获取 – ASPIRE

命令行:

1
system_profiler SPInstallHistoryDataType

image.png
2022/10/9 13:11

3.嫌疑人容恨寒苹果电脑的内核版本是?

macOS 的系统版本对应唯一的 Darwin 内核版本, 可以查到 macOS 12.6 对应的内核版本为 21.6.0.
image.png
Darwin 21.6.0

4.嫌疑人容恨寒苹果电脑有多少正在运行的后台程序?

macOS 中先前运行的程序信息会保存在 PC.raw/分区 02/未命名 - 数据/Users/apple/Library/Saved Application State/ 目录下.
image.png
finderTerminal在运行
网上有现成的 parser 用于处理 saveStates 中的 data 文件, 从而可以获取程序上次运行时的状态:

parse macOS savedState files · GitHub

2

5.嫌疑人容恨寒苹果电脑最后一次关机时间(GMT)?

image.png
2023-04-14 07:55:50

6.嫌疑人容恨寒苹果电脑执行过多少次查询主机名称命令?

hostname相关:
image.png
13

7.从嫌疑人容恨寒苹果电脑中找出“陆文杰”提现金额是?

在桌面处有一个相同密码格式的流水压缩包。需要用相同模板进行爆破:
得到密码:wlzhg@3698@hn

1
hashcat -m 13000 -a 3 '$rar5$16$17ebbae081128c99df998442c2b27362$15$ba894add556b914e2cb5c47ae307f760$8$0d2469c50b0b539b' -1 0123456789 'wlzhg@?1?1?1?1@hn'

image.png
共提现10

8.从嫌疑人容恨寒苹果电脑中找出嫌疑人容恨寒上午上班时长是?

docx中有:image.png
2.5小时

9.从嫌疑人容恨寒苹果电脑中找出“万便”的邮箱是?

image.png
txt中有
IxCnq3@yDp.net

10.通过分析得出嫌疑人容恨寒小孩的年龄是?

6岁
有一个小学一年级文件。

魏文茵

Windows PC

分区5(D盘)存在 BitLocker 加密.
有一个内存镜像, TrueCrypt 密钥提取需要用到 vol2. 由于有硬盘镜像, 知道系统版本, 所以可以直接指定 profile=Win10x64_14393

1.嫌疑人魏文茵计算机的操作系统版本?

image.png
Windows 10 Pro 14393

2.嫌疑人魏文茵计算机默认的浏览器是?

Windows编程—获取操作系统默认浏览器路径_win32 获取用户默认浏览器-CSDN博客

这个路径下没有东西,但是默认空间下能发现chrome的信息是最多的:
image.png
Chrome

3.嫌疑人魏文茵计算机中以下那个文档不是嫌疑人最近打开过的文档?

image.png
A.掠夺攻略.docx

4.嫌疑人魏文茵计算机中存在几个加密分区?

1

5.嫌疑人魏文茵计算机中安装了哪个第三方加密容器?

image.png
TrueCrypt

6.接上题,嫌疑人魏文茵计算机中加密容器加密后的容器文件路径?

image.png
可以在加密文件中找到:
D:\Users\WH\Documents
但是这里答案是C盘下的,这里宏联的默认盘有点问题,解析能注意到:
image.png

7.嫌疑人魏文茵计算机中磁盘分区BitLocker加密恢复秘钥为?

TrueCrypt 加密容器可以通过内存中提取的密钥进行解密.
在 linux 或者 wsl 中使用 AmNe5iA/MKDecrypt 挂载 TrueCrypt 卷

1
MKDecrypt.py -m /mnt/tc -X /mnt/E/FileExport/Wei_Windows_PC/truecrypt.tc /mnt/E/Panguite/FileExport/Wei_Windows_PC/0xffffd78304c9c1a8_master.key

Windows 上可以使用 Elcomsoft Forensic Disk Decryptor
之后可以看到被删除的 Steganography.jpeg. 从文件尾可以提取出来 BitLocker 的恢复密钥 000649-583407-395868-441210-589776-038698-479083-651618
image.png
我去,这怎么能直接搜索出来啊?
image.png

8.嫌疑人魏文茵计算机中 BitLocker 加密分区中“攻略.docx”文档里涉及多少种诈骗方式?

38

9.投资理财团伙“华中组”目前诈骗收益大约多少?

100万

10.通过对嫌疑人魏文茵计算机内存分析,print.exe 的 PID 是?

一个 “PID” 是 “Process Identifier”(进程标识符)的缩写。在操作系统中,每个运行的进程都有一个唯一的数字标识符,称为 PID。这个标识符用于区分系统上运行的每个进程,无论它们是否运行相同的应用程序或命令。
volatility

1
volatility_2.6_win64_standalone.exe -f N:\魏文茵\电脑\memdump.mem imageinfo
1
volatility_2.6_win64_standalone.exe --profile=Win10x64_14393 -f Z:\魏文茵\电脑\memdump.mem pstree

image.png
728

二进制

这部分的二进制文件分析不太行,给re手去做。

做不了一点。

iPhone

1.根据魏文茵苹果手机分析,IMEI号是?

image.png
358360063200634

2.根据魏文茵苹果手机分析,可能使用过的电话号码不包括?

A.18043618705
B.19212175391
C.19212159177
D.18200532661

a
image.png
c
image.png
只出现两个,另外一个出现在android中
D

臧觅风

Android Phone

1.根据臧觅风的安卓手机分析,微信ID是

image.png
wxid_kr7b3jbooht322

2.根据臧觅风的安卓手机分析,在哪里使用过交友软件

image.png
西安

3.根据臧觅风的安卓手机分析,嫌疑人从哪个用户购买的源码,请给出出售源码方的账号

image.png
5768224669

4.根据臧觅风的安卓手机分析,购买源码花了多少BTC?

0.08

5.根据臧觅风的安卓手机分析,接收源码的邮箱是

molihuacha007@hotmail.com
image.png

Windows PC

1.根据臧觅风的计算机分析,请给出技术人员计算机“zang.E01”的SHA-1?

1
certutil -hashfile zang.E01 SHA1

239F39E353358584691790DDA5FF49BAA07CFDBB

2.根据臧觅风的计算机分析,请给出该技术人员计算机“zang.E01”的总扇区数?

image.png

3.根据臧觅风的计算机分析,以下那个文件不是技术人员通过浏览器下载的?

A.WeChatSetup.exe
B.aDrive.exe
C.Potato_Desktop2.37.zip
D.BaiduNetdisk_7.27.0.5.exe

image.png
image.png
image.png
D

4.根据臧觅风的计算机分析,请给出该技术人员邮件附件“好东西.zip”解压密码?

能在邮箱中找到带有下载链接的内容:
image.png
molihuacha007

5.根据臧觅风的计算机分析,该技术人员电脑内曾通过远程管理工具连接过服务器“master.k8s.com”,请给出连接的端口号?

搜索关键字k8s可以得到:
image.png
2282

6.根据臧觅风的计算机分析,接上题,请给出服务器的密码?

可以搜索到ini文件,其中有包含密码的密文信息:
image.png
SecureCRTCipher

GitHub - depau/shcrt: Shell script to replace SecureCRT/FX

其中的SecureCRTCipher.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#!/usr/bin/env python3

## Adapted from https://github.com/DoubleLabyrinth/how-does-SecureCRT-encrypt-password

import os
from Crypto.Hash import SHA256
from Crypto.Cipher import AES, Blowfish

class SecureCRTCrypto:

def __init__(self):
'''
Initialize SecureCRTCrypto object.
'''
self.IV = b'\x00' * Blowfish.block_size
self.Key1 = b'\x24\xA6\x3D\xDE\x5B\xD3\xB3\x82\x9C\x7E\x06\xF4\x08\x16\xAA\x07'
self.Key2 = b'\x5F\xB0\x45\xA2\x94\x17\xD9\x16\xC6\xC6\xA2\xFF\x06\x41\x82\xB7'

def Encrypt(self, Plaintext : str):
'''
Encrypt plaintext and return corresponding ciphertext.

Args:
Plaintext: A string that will be encrypted.

Returns:
Hexlified ciphertext string.
'''
plain_bytes = Plaintext.encode('utf-16-le')
plain_bytes += b'\x00\x00'
padded_plain_bytes = plain_bytes + os.urandom(Blowfish.block_size - len(plain_bytes) % Blowfish.block_size)

cipher1 = Blowfish.new(self.Key1, Blowfish.MODE_CBC, IV = self.IV)
cipher2 = Blowfish.new(self.Key2, Blowfish.MODE_CBC, IV = self.IV)
return cipher1.encrypt(os.urandom(4) + cipher2.encrypt(padded_plain_bytes) + os.urandom(4)).hex()

def Decrypt(self, Ciphertext : str):
'''
Decrypt ciphertext and return corresponding plaintext.

Args:
Ciphertext: A hex string that will be decrypted.

Returns:
Plaintext string.
'''

cipher1 = Blowfish.new(self.Key1, Blowfish.MODE_CBC, IV = self.IV)
cipher2 = Blowfish.new(self.Key2, Blowfish.MODE_CBC, IV = self.IV)
ciphered_bytes = bytes.fromhex(Ciphertext)
if len(ciphered_bytes) <= 8:
raise ValueError('Invalid Ciphertext.')

padded_plain_bytes = cipher2.decrypt(cipher1.decrypt(ciphered_bytes)[4:-4])

i = 0
for i in range(0, len(padded_plain_bytes), 2):
if padded_plain_bytes[i] == 0 and padded_plain_bytes[i + 1] == 0:
break
plain_bytes = padded_plain_bytes[0:i]

try:
return plain_bytes.decode('utf-16-le')
except UnicodeDecodeError:
raise(ValueError('Invalid Ciphertext.'))

class SecureCRTCryptoV2:

def __init__(self, ConfigPassphrase : str = ''):
'''
Initialize SecureCRTCryptoV2 object.

Args:
ConfigPassphrase: The config passphrase that SecureCRT uses. Leave it empty if config passphrase is not set.
'''
self.IV = b'\x00' * AES.block_size
self.Key = SHA256.new(ConfigPassphrase.encode('utf-8')).digest()

def Encrypt(self, Plaintext : str):
'''
Encrypt plaintext and return corresponding ciphertext.

Args:
Plaintext: A string that will be encrypted.

Returns:
Hexlified ciphertext string.
'''
plain_bytes = Plaintext.encode('utf-8')
if len(plain_bytes) > 0xffffffff:
raise OverflowError('Plaintext is too long.')

plain_bytes = \
len(plain_bytes).to_bytes(4, 'little') + \
plain_bytes + \
SHA256.new(plain_bytes).digest()
padded_plain_bytes = \
plain_bytes + \
os.urandom(AES.block_size - len(plain_bytes) % AES.block_size)
cipher = AES.new(self.Key, AES.MODE_CBC, IV = self.IV)
return cipher.encrypt(padded_plain_bytes).hex()

def Decrypt(self, Ciphertext : str):
'''
Decrypt ciphertext and return corresponding plaintext.

Args:
Ciphertext: A hex string that will be decrypted.

Returns:
Plaintext string.
'''
cipher = AES.new(self.Key, AES.MODE_CBC, IV = self.IV)
padded_plain_bytes = cipher.decrypt(bytes.fromhex(Ciphertext))

plain_bytes_length = int.from_bytes(padded_plain_bytes[0:4], 'little')
plain_bytes = padded_plain_bytes[4:4 + plain_bytes_length]
if len(plain_bytes) != plain_bytes_length:
raise ValueError('Invalid Ciphertext.')

plain_bytes_digest = padded_plain_bytes[4 + plain_bytes_length:4 + plain_bytes_length + SHA256.digest_size]
if len(plain_bytes_digest) != SHA256.digest_size:
raise ValueError('Invalid Ciphertext.')

if SHA256.new(plain_bytes).digest() != plain_bytes_digest:
raise ValueError('Invalid Ciphertext.')

return plain_bytes.decode('utf-8')

if __name__ == '__main__':
import sys

def Help():
print('Usage:')
print(' SecureCRTCipher.py <enc|dec> [-v2] [-p ConfigPassphrase] <plaintext|ciphertext>')
print('')
print(' <enc|dec> "enc" for encryption, "dec" for decryption.')
print(' This parameter must be specified.')
print('')
print(' [-v2] Encrypt/Decrypt with "Password V2" algorithm.')
print(' This parameter is optional.')
print('')
print(' [-p ConfigPassphrase] The config passphrase that SecureCRT uses.')
print(' This parameter is optional.')
print('')
print(' <plaintext|ciphertext> Plaintext string or ciphertext string.')
print(' NOTICE: Ciphertext string must be a hex string.')
print(' This parameter must be specified.')
print('')

def EncryptionRoutine(UseV2 : bool, ConfigPassphrase : str, Plaintext : str):
try:
if UseV2:
print(SecureCRTCryptoV2(ConfigPassphrase).Encrypt(Plaintext))
else:
print(SecureCRTCrypto().Encrypt(Plaintext))
return True
except:
raise
print('Error: Failed to encrypt.')
return False

def DecryptionRoutine(UseV2 : bool, ConfigPassphrase : str, Ciphertext : str):
try:
if UseV2:
print(SecureCRTCryptoV2(ConfigPassphrase).Decrypt(Ciphertext))
else:
print(SecureCRTCrypto().Decrypt(Ciphertext))
return True
except:
raise
print('Error: Failed to decrypt.')
return False

def Main(argc : int, argv : list):
if 3 <= argc and argc <= 6:
bUseV2 = False
ConfigPassphrase = ''

if argv[1].lower() == 'enc':
bEncrypt = True
elif argv[1].lower() == 'dec':
bEncrypt = False
else:
Help()
return -1

i = 2
while i < argc - 1:
if argv[i].lower() == '-v2':
bUseV2 = True
i += 1
elif argv[i].lower() == '-p' and i + 1 < argc - 1:
ConfigPassphrase = argv[i + 1]
i += 2
else:
Help()
return -1

if bUseV2 == False and len(ConfigPassphrase) != 0:
print('Error: ConfigPassphrase is not supported if "-v2" is not specified')
return -1

if bEncrypt:
return 0 if EncryptionRoutine(bUseV2, ConfigPassphrase, argv[-1]) else -1
else:
return 0 if DecryptionRoutine(bUseV2, ConfigPassphrase, argv[-1]) else -1
else:
Help()

exit(Main(len(sys.argv), sys.argv))

执行

1
python SecureCRTCipher.py dec 9e213284b79b4970c7962291aee426959ee4384d66ad6179b9d0a08a2d5654bc

image.png
但是似乎可以查到…
搜索关键字账号
image.png
P@ssw0rd

7.根据臧觅风的计算机分析,据该技术人员交代,其电脑内有个保存各种密码的txt文件,请找出该文件,计算其MD5值?

image.png
image.png
C1934045C3348EA1BA618279AAC38C67

8.根据臧觅风的计算机分析,该技术人员曾使用过加密容器反取证技术,请给出该容器挂载的盘符?

image.png
问的是挂载的盘符,而不是所在🤦‍
image.png
发现存在F盘,但是解析时并未显示
F

9.根据臧觅风的计算机分析,请给出该技术人员电脑内keePass的Master Password?

可以从内存镜像中提取到TC的MasterKey

1
volatility_2.6_win64_standalone.exe --profile=Win10x64_14393 -f N:\臧觅风\电脑\memdump.mem truecryptmaster

image.png

TC容器挂载

TC容器为资料.docx
用Elcomsoft Forensic Disk Decryptor按顺序使用:
image.png
image.png
选择源和mem文件:
image.png
找到密钥:
image.png
保存导出key.evk
挂载磁盘:
image.png
修改挂载信息,这里我选择在O盘:
image.png
注意这里要点Mount迁移
然后就成功挂载了:
image.png
在根目录及发现密码:
image.png
xiaozang123!@#
使用前面得到的密码可以在KeePass中找到两条新密码:
image.png
image.png
image.png
image.png
其中TC为TrueCrypt隐藏容器的密码,在其中使用这条密码挂载容器可以看到隐藏卷的内容

TrueCrypt 的 Hidden Volume.
可能会发生这样的情况:有人强迫你透露加密卷的密码。在许多情况下,您无法拒绝透露密码(例如,由于勒索)。使用隐藏加密卷可以让您在不泄露加密卷真实密码的情况下解决此类问题。

原理是在一个 TrueCrypt 卷中创建另一个 TrueCrypt 卷(在卷上的可用空间内)。即使外部卷被挂载,也应该无法证明其中是否存在隐藏卷,因为任何 TrueCrypt 卷上的空闲空间在创建卷时总是被随机数据填充,并且隐藏卷的任何部分都无法与随机数据区分开来。
隐藏卷的密码必须与外部卷的密码大不相同。对于外部卷,(在其中创建隐藏卷之前)您应该复制一些您实际上不想隐藏的伪敏感文件。这些文件是准备给那些逼你交出密码的人的。您只需要交出外部卷的密码,而不是隐藏卷的密码。真正敏感的文件将存储在隐藏卷上。
隐藏卷的挂载方式与标准 TrueCrypt 卷相同:单击“选择文件”或“选择设备”以选择外部/主机卷(重要:确保卷未挂载)。然后单击 Mount,并输入隐藏卷的密码。是挂载隐藏卷还是挂载外部卷由输入的密码决定(即输入外部卷的密码,则挂载外部卷;当您输入隐藏卷的密码时,隐藏卷将被挂载。
TrueCrypt 首先尝试使用输入的密码解密标准卷标头。如果失败,它将卷中可以存储隐藏卷头的区域(即65536-131071字节,当卷中没有隐藏卷时仅包含随机数据)加载到RAM中,并尝试使用输入的密码对其进行解密。

使用TC的密码使用TrueCrypt(不是VeraCrypt!!)加载容器。能注意到之前解密的是容器的外部加密卷,现在可以看到内部加密卷:
image.png
这里面有后面需要的Tor Browser
image.png
以及前文源码密码:
image.png

10.根据臧觅风的计算机分析,请给出该技术人员所使用的爬虫工具名称?

后羿采集器

11.根据臧觅风的计算机分析,接上题,该技术人员通过该采集器一共采集了多少条人员信息数据?

加密容器中存在多个xlsx表,计算数量:
19225

12.根据臧觅风的计算机分析,以下那个不是该技术人员通过爬虫工具采集的数据?

A.中国证券投资基金业协人员信息
B.仓山区市场监督管理局行政执法人员信息
C.清平镇卫生院基本公共卫生服务

C

13.根据臧觅风的计算机分析,该嫌疑人曾浏览过“阿里云WebDAV”,请给出该“阿里云WebDAV”端口号?

前面有显示ip地址192.168.8.20直接对应搜索即可:
image.png
8080

14.根据臧觅风的计算机分析,请给出该技术人员电脑内代理软件所使用的端口号?

使用加速软件为Clash,Clash的配置在其config.yaml中,寻找其安装位置:
zmf/文件系统/zang.E01/分区02_本地磁盘[C]/[Root]/Program Files (x86)/clash/
image.png
7890

15.根据臧觅风的计算机分析,接上题,请给出该代理软件内订阅链接的token?

订阅链接位于profiles/list.yaml中:
image.png
d4029286acc8bfd97818d5f8724f0f0a

16.根据臧觅风的计算机分析,请给出该技术人员电脑内用于内部通联工具的地址和端口?

使用的工具是Potato仿真运行:
im.pgscup.com:6661

17.根据臧觅风的计算机分析,请给出该电脑内存镜像创建的时间(北京时间)?

1
volatility_2.6_win64_standalone.exe --profile=Win10x64_14393 -f N:\臧觅风\电脑\memdump.mem imageinfo

image.png
2023-04-27 17:57:53

18.根据臧觅风的计算机分析,以下那个不是“chrone.exe”的动态链接库?

A.ntdll.dll
B.iertutil.dll
C.wow64cpu.dll
D.wow64win.dll

1
volatility_2.6_win64_standalone.exe --profile=Win10x64_14393 -f N:\臧觅风\电脑\memdump.mem dlllist -n chrone.exe

image.png
B

19.根据臧觅风的计算机分析,请给出“\REGISTRY\MACHINE\SYSTEM”在内存镜像中的虚拟地址是多少?

1
volatility_2.6_win64_standalone.exe --profile=Win10x64_14393 -f N:\臧觅风\电脑\memdump.mem hivelist

image.png
0xffffab861963e000

20.根据臧觅风的计算机分析,据嫌疑人交代,其电脑上曾存打开过一个名为“账号信息.docx”的文档,请给出该文档的最后访问时间(北京时间)?

image.png
2023-04-27 17:55:32

21.根据臧觅风的计算机分析,接上题,请给出该文档的存储路径?

导出之后打开所在位置:
image.png
D:\backup\mydata\账号信息.docx

暗网取证

臧的电脑上只有一个已经被删除且被覆盖的 Tor Browser.zip, 在他的 TrueCrypt 容器的隐藏卷中可以找到 Tor Browser 。

22.臧觅风电脑使用暗网浏览器版本是?

image.png
但是答案似乎不是这个
在changelog中可以看到版本号:
image.png
12.0.4
image.png
前面那个是Firefox的版本。

23.臧觅风电脑使用的暗网浏览器历史记录中最多浏览内容是?

image.png
BT币

24.臧觅风电脑使用的暗网网浏览器书签“社工库”添加的时间是?

image.png
2022/5/27 13:49
这个找法是错误的,因为少一位秒,需要先找到浏览器的数据
在:O:\Tor Browser\Tor Browser\Browser\TorBrowser\Data\Browser\profile.default下的place.sqlite
或者TC挂载后使用自动化分析提取内容:
image.png

25.臧觅风电脑使用的暗网浏览器第一次使用时间是?

image.png
2023/4/12 10:19:06

26.臧觅风电脑使用的暗网浏览器扩展应用中“ftp.js”文件的md5值是?

搜索extensions
image.png
改为zip解压搜索:
image.png
ea86403d1de3089b3d32fe5706d552f6

软路由OpenWRT

环境配置

先配置一个新网卡,在这里登录过一次就知道需要配置的ip段是192.168.8.0段,NAT模式。
添加一下仿真,注意,这里需要添加DD分片:
image.png
在虚拟机设置里面切换到刚才配置的网卡:
image.png

1.请给出该软路由管理的IP地址?

原始ip地址为192.168.8.20

2.请给出该软路由管理员的密码

参见 #9.根据臧觅风的计算机分析,请给出该技术人员电脑内keePass的Master Password?
P@ssw0rd

3.请给出阿里云WebDAV的token?

image.png
afc455bdc29a45b18f3bae5048971e76

4.请给出该软路由所用机场订阅的token?

image.png
502f6affe3c7deb071d65fb43effc06d

5.请给出该软路由数据卷的UUID?

image.png
这个页面我怎么没有这个Btrfs目录。
后来在挂载点这里可以看到:
image.png
9a89a5ec-dae6-488a-84bf-80a67388ff37

6.请给出该软路由的共享路径?

image.png
/mnt/data

IM服务器(Windows Server)

在 OpenWRT 的 /mnt/data/IM/ 目录下放着一个 VMware 虚拟机的文件,给它提取出来,妈的我这里怎么没有data下的IM?

后记

做不太动了,先这样吧,后面有机会再做。

参考文章

【首发最全】2023首届“盘古石杯”全国电子数据取证大赛参考题解
盘古石杯2023初赛题解 - XDforensics-Wiki