FIC 2025

第五届全国电子取证大赛 FIC决赛

围绕 FIC 的公开复盘与解题记录。

作者:彩虹七号 发布日期:2026-05-27 58 次阅读

第五届全国电子取证大赛 FIC决赛

作者: 彩虹七号


FIC学生组排名 第四图片

本次比赛可能确实是比赛紧张了,感觉很多题都是可以做出来的。

前言

这次比赛算是糖太宗和他的左右护法这个学期第一次参加线下取证比赛,糖太宗AK了服务器部分带飞了在做手机部分卡在没找到UUID的右护法和在做计算机部分卡在不会调分辨率的左护法,第一次夺得了线下一等奖。感觉这次计算机、手机和路由器和后面的服务器和apk根本不是一个难度的,出题人真的难评。。。 ——右护法

被糖太宗带飞了——左护法

FIC 容器密码F!C_2025-Final@决~赛#x7Pz!

服务器

请分析检材3,该操作系统版本号为

图片

24.04.1

请分析检材3,该主机名为

图片

api-server-2

请分析检材3,该ens33网卡IP地址为

做到这个题预期应该是仿真然后进去之后ip a ,或者直接查看网络配置文件,因为后面会用到仿真之后的一些东西我先直接仿真

会发现root用户根本登录不进去,因为没有root用户,在shadow里面看到一个king用户这个是服务器唯一的用户

使用rockyou字典爆破hash发现king用户的密码为123456但是这个是错误的,登陆不进去在etc下找到可疑文件my_two_factor_pwdfile ,根据下面题目的提示可以知道密码由king+(三位数字组成),生成一个字典,从king001~king999进行hash爆破最后出来时king110

图片

ip 地址为172.16.10.254

请分析检材3,操作系统登录使用了第三方身份验证,该技术为

图片

在/etc/pam.d/common-auth中可以看到登录技术为

pam_pwdfile

请分析检材3,该身份验证的加密算法为?

在/etc/pam.d/common-auth中可以看到加密技术为Bcrypt

图片

请分析检材3,该保存king用户密码的文件名为?

这个上面写到过了my_two_factor_pwdfile

图片

请分析检材3,尝试爆破king用户,其密码为(king字母加3个数字)?

上面写过生成字典使用hashcat爆破就行或者直接掩码爆破如下

# $2a$10$V/8GUI5aTNSnbFodPjP7Zu6vCFSXmvdd9oKHGtWv/vbT3Q4LLTCcW
​
hashcat -m 3200 -a 3 -o found.txt hash.txt king?d?d?d

king110

请分析检材3,该WEB-API配置的 MySQL 数据库服务器地址为

这个xshell连上之后就翻一下配置文件就行了

图片

172.16.10.200

请分析检材3,其中用于 WEB-API 测试的流量包文件名为

其实这个题一眼是test.pcap

就在加目录下,但是具体要看的话看下历史命令也知道

图片

图片

请分析检材3WEB-API,该容器的数据库内容被SO所加密,该SO文件名为

图片

请继续分析上题SO文件,该文件的编译器类型为

GCC

图片

请继续分析上题SO文件,在SO文件的encrypt函数中,该加密算法为

图片

请继续分析上题SO文件,尝试分析getAeskey函数,该KEY值为

zhaohongzhaohongzhaohongzhaohong

图片

图片

进行了一次0x44的异或,由于提取出来是的小端序存储的数据,我们需要进行一次倒序,然后这是AES-256,所以key是32字节的,这里还差一半,但是看起来是对密钥进行了一次复制到这32字节上面,所以key是zhaohongzhaohong*2图片

请继续分析上题SO文件,尝试分析get_flag1函数,该返回值为

图片

请继续分析上题SO文件,尝试分析get_flag2函数,该返回值为

图片

再进到compute_flag2()里面 图片

问AI

获取 compute_flag2 返回的 flag 最简单、靠谱的方法就是在运行时把它 call 一下,然后直接打印它返回的字符串。

写一个最简 Loader + 在 GDB 下跑

  1. 查看导出符号
readelf -Ws libflag2.so | grep get_flag2
# 或者
nm -D libflag2.so | grep flag2

确认get_flag2compute_flag2 可被 dlsym 到。

  1. 写个 C 程序动态加载并调用(存为 dump_flag2.c):
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
​
typedef char *(*get_flag2_t)(void);
​
int main() {
    void *hdl = dlopen("./libflag2.so", RTLD_NOW);
    if (!hdl) {
        fprintf(stderr, "dlopen failed: %s\n", dlerror());
        return 1;
    }
    get_flag2_t get_flag2 = (get_flag2_t)dlsym(hdl, "get_flag2");
    if (!get_flag2) {
        fprintf(stderr, "dlsym failed: %s\n", dlerror());
        return 1;
    }
    char *flag = get_flag2();
    printf("flag2 = %s\n", flag);
    return 0;
}
  1. 编译
gcc -o dump_flag2 dump_flag2.c -ldl
  1. 在 GDB 下运行
gdb -q --args ./dump_flag2
(gdb) run
# 由于在 gdb 下运行,is_debugger_present() 会返回真
# get_flag2 会返回 compute_flag2 得到的真实 flag

程序正常跑完后,标准输出就会打印出真实 flag。

图片

请继续分析上题SO文件,尝试分析decrypt函数,该密文dnJXwBR4qc+1Y4WB6ZxR0A==的明文为

FICerisgood

图片

图片

图片

请分析检材3数据库,在 products 表中,统计商品型号的种类数量(例如以 ZK、CW 等为前缀的型号)

首先直接启动一下这个容器然后连一下navicat就行

图片

前面找到过密钥和iv了直接解密一下就行

key是zhaohongzhaohongzhaohongzhaohong

iv是0123456789012345

然后最快的做法应该就是拿着硬盘拷一份这个表导出的sql文件然后直接带着sql文件去联网机跑ai然后后三题答案就出来了

注意sql要复制出来并把 key是zhaohongzhaohongzhaohongzhaohong

iv是0123456789012345 一起给ai就全出了

图片

当然这里贴出脚本

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
decrypt_and_analyze_full.py
​
Usage:
  1. Install dependencies:
       pip install pycryptodome
  2. Make sure this script and `product_db.sql` are in the same directory,
     or adjust `SQL_FILE` path below.
  3. Run:
       python decrypt_and_analyze_full.py
"""
​
import re
import base64
from Crypto.Cipher import AES
​
# PKCS#7 去填充
def pkcs7_unpad(data: bytes) -> bytes:
    pad_len = data[-1]
    return data[:-pad_len]
​
# AES-256-CBC 解密函数
def decrypt_aes256_cbc(ciphertext_b64: str, key: bytes, iv: bytes) -> str:
    ciphertext = base64.b64decode(ciphertext_b64)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    decrypted = cipher.decrypt(ciphertext)
    return pkcs7_unpad(decrypted).decode('utf-8', errors='ignore')
​
# 配置:32字节密钥与16字节IV
KEY = b"zhaohongzhaohongzhaohongzhaohong"
IV  = b"0123456789012345"
SQL_FILE = "product_db.sql"  # 或者绝对/相对路径
​
# 匹配 INSERT 语句中的第2、4、7 列
pattern = re.compile(
    r"INSERT INTO `products` VALUES \(\s*\d+\s*,\s*'([^']+)'\s*,\s*'[^']*'\s*,\s*'([^']+)'\s*,\s*[^,]+,\s*'[^']*'\s*,\s*'([^']+)'\s*"
)
​
prefixes = set()
count_zk_gray = 0
total_zk_revenue = 0.0
​
with open(SQL_FILE, 'r', encoding='utf-8') as f:
    for line in f:
        m = pattern.match(line)
        if not m:
            continue
        name_enc, price_enc, addl_enc = m.groups()
        name       = decrypt_aes256_cbc(name_enc, KEY, IV)
        price_str  = decrypt_aes256_cbc(price_enc, KEY, IV)
        try:
            price = float(price_str)
        except ValueError:
            continue  # 非数值跳过
        additional = decrypt_aes256_cbc(addl_enc, KEY, IV)
​
        # 型号前缀
        prefix = name.split('-')[0]
        prefixes.add(prefix)
​
        # 如果是 ZK,累加金额并检查颜色
        if prefix.upper() == 'ZK':
            total_zk_revenue += price
            # 从 additional_data 解密结果中提取 color
            cm = re.search(r'"color"\s*:\s*"([^"]+)"', additional)
            if cm and cm.group(1) == '灰色':
                count_zk_gray += 1
​
# 输出
print("不同商品型号前缀种类数量:", len(prefixes))
print("各前缀列表:", ", ".join(sorted(prefixes)))
print("型号为 ZK 且颜色为灰色的商品数量:", count_zk_gray)
print("型号为 ZK 的总销售额(取整数部分):", int(total_zk_revenue))
​

图片

5

请分析检材3数据库,在 products 表中,统计型号为 “ZK” 且颜色为灰色的商品的数量

ai能直接出脚本如上

图片

29

请分析检材3数据库,在 products 表中,统计型号为 "ZK" 的总销售额(金额只保留整数部分,不进行四舍五入)

ai能直接出脚本如上

图片

106 450

APK

请分析检材5,该检材的包名为

com.forensix.cam

图片

请分析检材5,该检材的签名证书 MD5 值为

7b1963b70fbac57a50836e9a044d0029

图片

请分析检材5,在尝试抓包登录 APP 时,登录请求中提交的参数包括:(请使用比武U盘中提供的智能家居账号密码进行登录抓包)

不知道结束之后能不能抓到包,这里用比赛时抓到的包,我记得password、

id和flag都要选图片

请分析检材5,通过抓包分析登录请求,获取到的 flag 参数的值为

05d8cccb5f

看上图

请分析检材5,该 APK 登录请求中携带了一个远程调证 ID,分析该请求并提取该 ID,统计其长度为(请提取该 ID 并在比武平台中进行调证,准备进入下一阶段分析,可参考比武 U 盘中的手册)

6

看上图的id长度,然后这个id可以在比赛平台获取云取证的账户密码,分析最后两道题目

请分析检材5,在登录成功后,应用会跳转至 “欢迎使用 forensix” 界面。该界面对应的 Activity 类的完整类名为

com.forensix.cam.activity.c75e3a8b2d

开个activity记录

图片

请分析检材5,分析上述 Activity 类后,发现其内部定义的 TAG 常量值为:

222

图片

请结合互联网分析APP调证检材,该检材系统版本号为(完成调证后,可参考比武 U 盘中的手册,在云实验室中继续完成取证任务)

11.11

队友到云取证平台把检材下到本地给我分析了

图片

请结合互联网分析APP调证检材,该检材系统内FLAG值为(完成调证后,可参考比武 U 盘中的手册,在云实验室中继续完成取证任务)

778899

图片

图片

计算机取证

公告里提示了密码是2025=(20+25)^2,陈某对其电脑进行了VC加密。

仿真后的分辨率及其难受,需通过安装vmtools自适应屏幕大小或者远程远程连接来调分辨率或者win+S搜分辨率。

被出题人狠狠地按在地上摩擦了。。

请分析检材2,该检材系统中设备名称为neo4chen的系统分区的sha256值为

启动盘C盘就是加密盘

E2219548F5A8E61F373258EB658625ADDA7BF858A83AD8D6E4213BCD8ECEB423

请分析检材2,上题系统中,曾被远程控制的ip为

192.168.3.14

图片

请分析检材2加密系统,陈某通过物理方式保存助记词的东西名为

时光密钥

图片

这个图片应该是真的助记词,另外还有一张死神来了.jpg应该是假的,看着像AI的。

图片

同时可以真照片可以提取出来另外一张没有笔挡住的图

图片

请分析检材2加密系统,陈某保存记录完整助记词的文件的md5值为

c2a8300c87f86bd04b4aea42e7d6b83c

请分析检材2加密系统,陈某交代XI位为2^1,上题文件对应中文助记词不包含一下哪一项

#include <bits/stdc++.h>
​
using namespace std;
​
int main(){
    int x[] = {1853,1537,2006,848,1590,5,1096,1658,120,97,25,1115};
    for (int i = 0; i < 12; i++) cout << (x[i] ^ 1988) << endl;
​
    return 0;
}
249干
453快
18以
1172摇
498首
1985捅
908督
446选
1980捞
1957驾
2013搅
927呼

找对应的助记词。

干快以摇首捅督选捞驾搅呼

图片

学到了。

请分析检材2加密系统,该检材加密系统中陈某自白的录音最后修改时间为

2025-05-14 20:59:20

图片

请分析检材2加密系统,陈某和李某共同出行的户外活动为

钓鱼

听音频

请分析检材2加密系统,陈某自白中的隐藏的“学习资料”所在服务器ip地址为

背景音存在莫斯,消除人声后听莫斯

114.51.41.91

玩三角洲同学耳听的。

请分析检材2加密系统,存放欠条的加密容器文件名为

我的手机号

一般的容器都比较大,没想到这个也会是容器。

图片

317001070313170010703,两个手机号对应两个不同的解密结果,一个左一个右,拼接得到最终欠条。

请分析检材2加密系统,该容器欠条中赵某欠陈某多少虚拟币

0.079BTC

图片

请分析检材2加密系统,该检材中ubuntu光盘文件的系统内核版本号为

4.15.0

没有用QEMU仿真看,硬翻的。

图片

图片

请分析检材2Linux系统,该系统的当前状态为

可以组raid,仿真起来,但是启动出来是grub rescue恢复界面,按照方法手动恢复进入到kali界面

###

图片

图片

图片

其他3个状态太正常了不太可能(bushi。

但是这样做应该是有问题的,浏览器Chrome打不开。

请分析检材2Linux系统,该系统使用了什么阵列

raid0

如果不是队友取证大师自动组出raid了,我都不知道还有raid重组的东西

图片

请分析检材2Linux系统,系统自带记事本软件中记录的密码的未知位数有几位

4

指的是mousepad。

图片

请分析检材2Linux系统,系统自带记事本内容缓存在重组后逻辑分区中的起始偏移地址为

0x296d90000

图片

请分析检材2Linux系统,chrome浏览器插件的保护密码为

直接对组的raid仿真后,我的kali打不开Google,不知道是什么原因。

如果直接使用PC的镜像仿真,手动选择kali引导是可以打开的。

图片

图片

密码和win的一样。

根据刚才找到的提示进行掩码攻击。

*请分析检材2Linux系统,chrome浏览器插件存放的令牌的名称为

*请分析检材2Linux系统,该检材Linux系统浏览器插件存放的令牌在2022-05-12 00:54:10时的令牌为

路由器

火眼仿真直接就可以给你配好网卡,神!

图片

service restart network 
service firewall stop
passwd root

然后使用scp命令将文件传输到主机上即可。

由于我的win主机没有开启ssh服务需要先开。

这里备注一下开服务的方法吧(乱开了一堆东西)。

图片

图片

图片

图片

这样就将需要的分析的文件导入到主机上了。后面题目基本就秒了。

请分析检材4,该检材的系统版本号为

24.10.0

图片

请分析检材4,该检材的lan口ip为

192.168.3.1

图片

请分析检材4,该检材Overlayfs分区的大小为多少KB

8292024

图片

请分析检材4,该检材中VPN网络私钥为

和上题在一个文件中。

SLkCLyRhrkWIFgJWfEd0B7s99FYWJf9PUV+scj3Vw3U=

请分析检材4,嫌疑人交代其开发了一款专门用于收集其售出摄像头信息的服务程序。请问该摄像头信息收集服务程序编译器版本为?

就是前面导出的文件。

13.3.0

图片

请分析检材4,该摄像头信息收集程序支持的运行参数(命令行参数)数量为多少

2

图片

请分析检材4,该摄像头信息收集程序使用了什么算法进行加密

AES,base64

图片

请分析检材4,该摄像头信息收集程序所使用的数据库文件名为

collected.txt

图片

请分析检材4,该摄像头信息收集程序收集了以下哪些摄像头信息?

对应目录下并未找到对应文件。

####

手机取证

请分析检材1,该检材的蓝牙mac地址为

A4:55:90:15:2E:76

图片

请分析检材1,该检材的系统Linux内核版本号为

4.14.186

比赛的时候好不容易把linux容器仿真起来,进去发现这个内核版本,和答案的不一样。图片

后面发现在这个目录下面能找到和答案一样的内核版本,为什么仿真起来不一样,感觉可能就是数据没有仿真对,因为这个仿真起来的终端好像读的是我模拟器里面的数据,只是把配置文件仿真起来了,所以后面问配置文件的题目都是对的,但是问到那个浏览器下载,就不行了,数据没有导入对图片

请分析检材1,该检材中实际使用的密码管理软件的软件包包名为

design.codeux.authpass.fdroid

这题花了挺多时间,直到看见这个文件才确定就是这个apk

图片

请分析检材1,该检材中密码管理软件的主密钥为

Save my P Ass.

这题做出来感觉都不太对,但是根据这个答案的格式,确定大概就是这个。

图片

请分析检材1,该检材中保存的github.com密码为

Forensix777

把上面的我的密码.kdbx提取出来,然后用keepass打开

图片

请分析检材1,该检材root工具的版本为

27.0

用过magisk,就是面具嘛

图片

请分析检材1,找到该手机上的Linux容器,并回答下列问题,该Linux发行版名称为

debian

根据linux仿真的东西来看

图片

请分析检材1容器,该系统默认桌面环境为

Xfce

图片

请分析检材1容器,该系统的android用户密码为

99c26da5

这题如果仿真再出点问题,密码还不是这个

图片

请分析检材1容器,浏览器下载的文件名为

reshacker_setup.exe

比赛的时候没有找到这个linux镜像,后面都没做出来。感觉这个安装路径已经暗示了存储的数据名称图片

图片

图片

请分析检材1容器,陈某使用过的github代理的域名为

gh.viru.sh

这题真的比赛的时候理解不了,然后ai直接能猜出来答案。。。这里的历史命令里面存在先走代理域名再访问github的痕迹

图片

图片

请分析检材1容器中助记词程序recphrase,其使用的壳类型为

upx

这题当时虽然前面没做,但是猜一下都能猜到是upx壳,

图片

请分析上题程序,程序运行后第2列第3行助记词为

village

给程序脱壳之后,拖进ida,发现好多什么py*的东西图片

尝试用pyinstxtractor将exe反编译,然后得到pyc,发现大概逻辑是跑matplotlib图片

我们直接跑一遍代码

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import string
fig, axes = plt.subplots(4, 3, figsize=(12, 12))
axes = axes.flatten()
word_codes_list = [[115, 101, 115, 115, 105, 111, 110], [102, 101, 118, 101, 114], [115, 112, 111, 110, 115, 111, 114], [99, 114, 111, 117, 99, 104], [116, 105, 99, 107, 101, 116], [116, 119, 105, 115, 116], [97, 112, 112, 114, 111, 118, 101], [118, 105, 108, 108, 97, 103, 101], [102, 105, 110, 105, 115, 104], [115, 113, 117, 97, 114, 101], [97, 108, 115, 111], [99, 111, 111, 107]]
for i, word_codes in enumerate(word_codes_list):
    ax = axes[i]
    ax.set_xlim(0, len(word_codes) + 1)
    ax.set_ylim(0, 3)
    ax.set_xticks([])
    ax.set_yticks([])
    word = ''.join([chr(code) for code in word_codes])
    ax.text(0.5, 1.5, word, fontsize=24, ha='left', va='center')
plt.tight_layout()
plt.show()

得到了助记词

图片

请分析上题程序,该组助记词对应的钱包种子前8位为

e08478b0

把助记词输进去,用妙妙小工具计算一下

图片

请分析检材1容器,钓鱼网站(phishing)的后台用户密码加密算法为

pbkdf2_sha256

数据库里面能找到这个加密方式

图片

请分析检材1容器,钓鱼网站超管用户的弱口令为

123456

估计可以根据字典来爆破弱口令?或者这个也是非常好猜的弱口令,可以根据加密的方式计算哈希值,校验一下得到的密码是不是对的

图片

请分析检材1容器,宝塔面板的入口为

/a2d3e161

把网站仿真起来还是难度太大了,这里跟着川佬的博客,直接静态分析了。。。

图片

请分析检材1容器,宝塔面板运行在aarch64内核时报错的so文件为

PluginLoader.so

图片

图片

综合分析

请综合分析,陈某进行了那些操作

A、VC加密Linux系统

B、VC加密Windows系统

C、VC加密文件

D、VC加密系统容器

BC 解析:

  • 公告里提示了密码是2025=(20+25)^2,陈某对其电脑进行了VC加密。
  • 电脑里“我的手机号”文件被vc加密

请综合分析,陈某没有使用过以下那种方式安装数据库

A、编译安装

B、包管理器安装

C、容器安装

D、单文件

  • 包管理安装就是yum install / apt install 类似于
  • 容器安装在服务器起来之后的网站配置文件里面好像有
  • 单文件是sqlite

A

请综合分析,陈某使用过以下那些系统

A、Windows

B、MacOS

C、Debian

D、CentOS

E、Fedora

AC

请综合分析,以下说法正确的是

1.陈某将正确的助记词藏在了Linux中

2.陈某将正确的助记词藏在了windows中

3.陈某电子数据中保留了孙某的欠条

4.陈某电子数据中保留了王某的欠条

5.陈某使用JAVA搭建后台接口

6.陈某和“香格里拉大酒店”有关

选择146

请综合分析,陈某现有电子数据没有以下那个Linux内核版本

A、4.14-arm

B、6.6-arm

C、4.15-x64

D、6.8-x64

C

请综合分析,陈某做为壁纸的邪影芳灵原图的sm3值为

没找到

0300A48E6ACEFEF6EBC6FF64B957B42880FEBB66B5C807C7E3D7D3C3CCAD2661

请结合分析,陈某的真实GitHub密码为

参考川佬的

图片

从这后面应该是要去找这个app的加密逻辑了

然后解出来hash