签到题



flag{Welcome_to_the_3rd_JuHeXieZhi_Cup}
一、手机取证
1. 请分析检材1:手机的序列号是什么?【答案格式:AB65CDEFG6HIJKLM,字母全部大写】

火眼的基本信息基本上啥都没有搜出来,只能去系统日志里边找了
在启动日志中检索 <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">serialno</font>序列号
adb\lspd\log.old\kmsg.log
adb\ksu\log\dmesg.log

最后在kmsg.log找到了,即在内核消息日志找到了序列号(确实是没在这边翻过,更多是ai想到的
AM69VKKVU4CMGELB
2. 该手机的具体型号是什么?【答案格式:小米17至尊版】

设备信息里只为我们展示了蓝牙名称,所以我们必须要去查看系统配置属性才行
直接全局检索 <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">ro.product.marketname</font>、<font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">ro.product.model</font>这些可能记录手机型号的字段

全局搜索后可以在很多的属性文件及伪装机型模块中发现以上字段
所以手机型号是一加Ace 5 至尊版
3. 手机中已删除的联系人手机号码是什么?【答案格式:12345678910】
我们可以直接在火眼看被删除的联系人是谁

发现全都列出来了,就是老六,然后手机号是13696966666
或者也可以去联系人数据库里查
user\0\com.android.providers.contacts\databases\contacts2.db
直接SQL查询
select rc._id, rc.deleted, rc.display_name, m.mimetype, d.data1
from raw_contacts rc
left join data d on d.raw_contact_id=rc._id
left join mimetypes m on m._id=d.mimetype_id
where rc.deleted=1;
结果显示删除联系人老六,手机号为:
13696966666

印证了答案正确
4. 手机中找到密码本文件,计算其MD5哈希值,取后6位,字母大写。【答案格式:EF3898】
说是密码本,我们直接搜索密码看看有没有线索

发现直接就有个文件叫做常用密码,在media\0\常用密码.txt

一看发现还真是密码表,可以拿来字典爆破的那种
直接计算MD5即可

所以后六位是AD3563
5. 嫌疑人下载的图片隐写工具名称是什么?【答案格式:outguess.zip,英文小写】
说是下载的图片隐写工具了,我们去下载记录看看有没有什么线索
/media/0/Download
发现有个文件

叫steghide,明显的图片隐写工具啊
所以本题的答案就是这个文件的文件名:steghide-0.5.1-win32.zip
6. 嫌疑人使用隐写工具进行文件隐写密码是什么?【答案格式:ABCD@202002】
隐写工具解压看看

发现一个README.txt,打开发现介绍和原版的steghide一模一样
既然是steghide,还要密码,我们不难想到拿着之前那个常用密码.txt进行爆破
只差一个图片了,我们可以直接去火眼过滤的图片格式文件里边找,也可以去media/0/DCIM/Camera找
DCIM就是Digital Camera Images,这边放了很多数码相机拍的照片
我们在这边可以看见这样子一张图片

看上去就很重要啊,我们尝试爆破看看
import subprocess
img = "/mnt/data/important.jpg"
wordlist = "/mnt/data/常用密码.txt"
out_file = "result_output"
with open(wordlist, "r", encoding="utf-8", errors="ignore") as f:
for i, pwd in enumerate(f):
pwd = pwd.strip()
if not pwd:
continue
print(f"[{i}] testing: {pwd}")
r = subprocess.run(
["steghide", "extract",
"-sf", img,
"-p", pwd,
"-xf", out_file,
"-f"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
if r.returncode == 0:
print("\n[+] FOUND PASSWORD:", pwd)
print("[+] FILE EXTRACTED:", out_file)
break
爆破成功,得到了密码是JHTJ@202605,即本题答案
7. 嫌疑人向数据贩子购买公民个人信息共计多少条?【答案格式:123】
一下子问买了多少条,一般这种交易不会上交易平台
反而该去聊天软件找才是

有很多聊天软件,我们可以一个个尝试着找一下
最后在连趣这个软件里我们找到了这个数据库user\0\com.lianqujiaoyou.chat\app_flutter\OpenIM_v3_1355997814.db

先确定一下聊天双方是谁
风有约:1355997814
观云听海:1082423674
接着看看聊天内容 ** **
说的很直接啊,软件也很直接啊,都不加密,数据库聊天内容完全明文

甚至账密都是直接明文存的,可以直接仿真登录,不过这边没必要,就不演示了
盘古石要是也这样子直接就好了
所以本题答案是100
8. 嫌疑人向数据贩子交易时使用的付款方式是什么?【答案格式:支付宝】

继续看聊天记录啊,俩人说去i聊里边继续聊,那我们也去i聊看看数据库

找到数据库
data\uni.app.UNI04963C4\files\1600123285_3137373036323233393731\msg_0.db
** ** 可以看到很明显啊,说的是银行卡,所以本题答案是银行卡
9. 数据贩子交易过程中提供的银行卡号是多少?【答案格式:6222351234482925678】

** 工商银行卡号:6222355973482923738**
10. 接上题,嫌疑人所使用聊天工具的用户 ID 是多少?【答案格式:12345】
接上题的话我们用的还是i聊这个软件
记得一开始从连趣到i聊的时候,数据贩子让嫌疑人发了一张二维码

我们来定位一下这个二维码openim_media_cache_4b8966d3-242a-4c1e-a2e3-8bd7168c9236.jpg

扫扫看

{"type":"personal","userID":"17706223971","nick":"搁浅","timestamp":1778574712018}
因此聊天工具实际用户 ID 为17706223971** **
11. 嫌疑人使用浏览器访问了该下载链接,该浏览器对应的包名是什么?【答案格式:com.heytap.market】
肯定是接着上几题在说
说什么浏览器访问了下载链接

根据题目的意思,应该就是这些数据,已经被加密传到了百度网盘,而且密码是手机号,而嫌疑人是用浏览器先访问的,访问完了用的网盘下载

在连趣的配置文件处,把手机号也直接明文存储了,所以我们可以知道密码应该就是17706223971
来找一下看看,我们最后可以用17706223971当作密码验证一下

然而浏览器还不少,我们一个个看看
最后发现在鲁班浏览器有很多百度网盘下载痕迹

剩下两个显然没有,所以我们确定了本文的答案是com.meiit.browser
12. 嫌疑人于何时下载数据商人发送的数据压缩包文件?【答案格式:2022-02-02 12:00:00】
很明确是百度网盘里下的了,所以我们先定位一下百度网盘的数据库位置
user\0\com.baidu.netdisk\databases\7045389826filelist.db

发现表 <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">download_tasks</font> 中记录了这个数据.zip的下载详情

得到下载的时间戳,dcode转换为北京时间即可

所以是2026-05-12 17:00:05
13. 接上题,该压缩包的解压密码是什么?【答案格式:根据实际值填写】
接上题,我们已经确定了压缩包是数据.zip

而且我们也知道了密码就是手机号17706223971

所以这题答案就是17706223971,我们可以试着解密验证一下

直接索引找到解密试试看
发现成功解密压缩包
所以这题的答案是17706223971
14. 接上题,年龄在 40 至 60 岁(含 40、60 岁)的富豪共有多少人?【答案格式:123】
我们上一题已经找到确定了Excel表,有一栏就是年龄,直接筛选即可
=SUMPRODUCT((--F2:F100>=40)*(--F2:F100<=60))
得到一共46个人
15. 请找出嫌疑人筛选的重点客户名单,并统计名单内共有多少人?【答案格式:1】
跳的有点远,我们在第六题不是steghide爆破出了密码吗,解密出了一个文件
打开发现存在 <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">重点客户.xlsx</font>

但是显示了文件损坏

发现主要是ZIP数据流尾部截断
虽然只有外层 ,但关键的 <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">xl/worksheets/sheet1.xml</font> 与 <font style="color:rgb(51, 51, 51);background-color:rgb(243, 244, 244);">xl/sharedStrings.xml</font> 可恢复
import struct
import zlib
import re
import xml.etree.ElementTree as ET
path = "1.zip"
data = open(path, "rb").read()
# 1. 找外层 ZIP 本地文件头
idx = data.find(b"PK\x03\x04")
if idx == -1:
raise Exception("找不到 PK\\x03\\x04")
outer = data[idx:]
nlen = struct.unpack_from("<H", outer, 26)[0]
elen = struct.unpack_from("<H", outer, 28)[0]
dstart = 30 + nlen + elen
# 2. 解外层 deflate,尾部截断没关系,能解多少算多少
d = zlib.decompressobj(-15)
xlsx_data = d.decompress(outer[dstart:], max_length=200000)
print("恢复出的内层 xlsx 数据长度:", len(xlsx_data))
print("外层是否完整:", d.eof)
files = {}
# 3. 扫内层 xlsx 的本地文件头
off = 0
while off < len(xlsx_data) - 30:
pos = xlsx_data.find(b"PK\x03\x04", off)
if pos == -1:
break
method = struct.unpack_from("<H", xlsx_data, pos + 8)[0]
csize = struct.unpack_from("<I", xlsx_data, pos + 18)[0]
nlen = struct.unpack_from("<H", xlsx_data, pos + 26)[0]
elen = struct.unpack_from("<H", xlsx_data, pos + 28)[0]
name_start = pos + 30
name = xlsx_data[name_start:name_start + nlen].decode("utf-8", errors="ignore")
dstart = name_start + nlen + elen
dend = dstart + csize
# 不完整的文件直接跳过
if dend > len(xlsx_data):
off = pos + 4
continue
raw = xlsx_data[dstart:dend]
if method == 8:
try:
raw = zlib.decompress(raw, -15)
except Exception:
off = dend
continue
files[name] = raw
off = dend
print("已恢复文件:")
for k in files:
print(" ", k)
shared_xml = files.get("xl/sharedStrings.xml")
sheet_xml = files.get("xl/worksheets/sheet1.xml")
if not shared_xml or not sheet_xml:
raise Exception("没有恢复出 sharedStrings.xml 或 sheet1.xml")
# 4. 解析 sharedStrings
strings = re.findall(r"<t[^>]*>(.*?)</t>", shared_xml.decode("utf-8", errors="ignore"), re.DOTALL)
# 5. 解析 sheet1
root = ET.fromstring(sheet_xml)
ns = {"a": "http://schemas.openxmlformats.org/spreadsheetml/2006/main"}
def col_index(cell_ref):
m = re.match(r"([A-Z]+)", cell_ref)
col = m.group(1)
num = 0
for ch in col:
num = num * 26 + ord(ch) - ord("A") + 1
return num - 1
rows = []
for row in root.findall(".//a:row", ns):
arr = []
for c in row.findall("a:c", ns):
ref = c.attrib.get("r", "")
idx = col_index(ref) if ref else len(arr)
while len(arr) <= idx:
arr.append("")
t = c.attrib.get("t")
v = c.find("a:v", ns)
if v is None:
arr[idx] = ""
continue
val = v.text or ""
if t == "s":
arr[idx] = strings[int(val)]
else:
arr[idx] = val
rows.append(arr)
# 6. 打印表格
for row in rows:
print("\t".join(row))

最后恢复出名单里5个人
所以答案是5
看https://mp.weixin.qq.com/s/3lok6N3tVoqHR59AqXgw1g又学到一些吼吼吼
这边其实是分卷解压,我们搜索重点客户

可以在计算机检材的回收站搜到这样子一个zip,这是主卷,只需将刚刚的1.zip改成同名,放在同一个目录下双击这个zip文件就会自动拼起来解压


**即可成功打开,确认是5人 **
二、计算机取证
1.请分析检材2:密码连续错误输入多少次数后,系统会自动锁定用户账户?【答案格式:1】
算是基础题吧,多少次自动锁定
我们可以在cmd输入net accounts查看

可以看到锁定阈值是3
其次我们也可以去账户策略看看,在Win+R输入gpedit.msc

所以答案是3
2.请分析检材2:检材中对应的微信 wxid 是多少?【答案格式:wxid_1a2b3c4d5e6f】
这边分析检材并没有分析出微信,甚至都分析结果里安装软件都没有微信,怀疑是下完删掉了
我们只能在这边直接搜索wxid
找到了这样子一个文件夹

所以本题的wxid应该是wxid_q1w2e3r4t5y6u7i8o9
3.请分析检材2:E盘 BitLocker 恢复密钥末尾六位是多少?【答案格式:616912】
上一题我们说到微信文件夹

双击进入后发现了MsgAttach下有两张AI图片



扫码发现这俩二维码全能解析出恢复密钥

但是咖啡那个不全,少了6位,所以正确答案应该是清单(8)里边这个
所以最后几位是126269
尝试用这个去解开E盘的BitLocker

填入恢复密钥即可

发现成功恢复,所以验证答案正确为126269
4.请分析检材2:VC加密容器的外层加密卷密码是什么?【答案格式:根据实际值填写】
翻一下电脑很容易发现D盘有一个1.png

一个png文件只有66字节,明显不是图片,是文本,我们直接notepad打开

成功找到外层加密卷的密码
JHTJ!@#¥A313
![](/editor