下载链接:百度网盘 请输入提取码
哈希值:MD5值:935160a30f6636cf6d32710e83fb48c5
挂载密码:F!C_2025-Final@决~赛#x7Pz!
案情介绍
在 FIC 线上赛各位取证专家的帮助下, 警方通过互联网线索成功锁定了陈某.
李某失联后, 陈某终日值惶, 打算掩盖并消除其在黑产活动的痕迹, 于是对部分电子设备行了数据重置和销毁. 警方对陈某实施抓捕过程中, 发现陈某加密了其电脑系统, 并且重置了手机数据. 最终在陈某家中找到了陈某备用手机, 电脑, 尚未重置的服务器及路由器.
据陈某交代备用机由于只用作网站测试和钓鱼攻击, 未对数据进行处理; 电脑上制作了多系统, 加密系统密码为 2025=(20+25)^2 大部分钱财相关内容都保留在了加密系统上.
请各位取证专家根据组委会提供的检材, 还原陈某的黑产犯罪痕迹.
从案情来看,是一个黑产的犯罪情况,说是对一些设备进行了重置,不过我们取证是那部分没重置的
备用手机只用作网站测试和钓鱼攻击,电脑还有多系统,加密系统的密码也给了,这个比较关键,是2025=(20+25)^2,说是大部分跟钱财相关的都放在加密系统了

打开来是这样子五个检材,比去年决赛还多了俩
有很多部分都是跟着b0uu - 博客园师傅走的
一、手机取证
1.请分析检材1,该检材的蓝牙mac地址为
基础题,直接在火眼查看即可

在设备信息中,MAC地址为A4:55:90:15:2E:76
2.请分析检材1,该检材的系统Linux内核版本号为
我们知道,安卓手机使用的就是Linux内核,不过火眼检测出来的手机版本号是安卓版本号
要看系统的Linux内核版本号一般我们都是在手机内部通过设置看的,或者adb shell cat /proc/version
在这边我们没有机子,只有镜像,所以可以直接去翻一下/proc/version

可以看到内核版本为4.14.186
3.请分析检材1,该检材中实际使用的密码管理软件的软件包包名为

密码管理APP在APP分析没有直接看见,但是在便签内部发现了一条说是keepass密码的内容

但是keepass数据库里没有什么数据
继续根据这个思路搜索,查找keepass的加密数据库文件kdbx是否存在

的确存在

在该路径,所以包名为design.codeux.authpass.fdroid
4.请分析检材1,该检材中密码管理软件的主密钥为
上一题已经明细了密码管理软件是design.codeux.authpass.fdroid,且是kdbx的加密数据库
https://github.com/keepassxreboot/keepassxc/releases/tag/2.7.10
下载一个keepass的数据库软件,进行解密,密码已经发现写在便签

输入便签密码Save my P Ass.成功解密
这软件反截图啊,录屏截图都搞不下来,只能古法截图了
5.请分析检材1,该检材中保存的github.com密码为

数据库里写了,我们根据URL查找
得到密码Forensix777
6.分析检材 1,该检材 root 工具的版本为

在APP分析能找到一个root工具

所以这道题的问题就是Magisk的版本号
图上已经写了版本号27.0,即为答案
7.分析检材 1,找到该手机上的 Linux 容器,该 Linux 发行版名称为
说有Linux容器,应该小不到哪里去
我们直接文件全显大小降序看看

很容易看见一个长的就像Linux容器的文件
当然了,这是野路子,正规的寻找路径应该是这样子

我们在手机可以看到这个软件,手机正是通过这一软件在Android的Linux内核层运行了一个完整的Linux系统
即我们的容器是通过这个软件部署的,通过包名我们可以看看这个软件的信息
在/data/user/0/ru.meefik.linuxdeploy/files/config/linux.conf
我们可以看到这个部署的容器的具体的配置信息

得到Linux容器存在${EXTERNAL_STORAGE}/UUID中,提取即可

提取并进行分析

所以发行版名称为debian
对于这个容器,其实可以进行仿真,但是这边仿真比较复杂且不是那么必要,摆一下(),贴一下西电的wp
https://forensics.xidian.edu.cn/wiki/writeups/FIC2025Final/#qemu
8.分析检材 1 容器,该系统默认桌面环境为

依旧是前边那一个/data/user/0/ru.meefik.linuxdeploy/files/config/linux.conf
在这边对桌面的环境也写了配置
是xfce
9.分析检材 1 容器,该系统的 android 用户密码为

同一个配置文件可以找到user-android的密码是99c26da5
10.分析检材 1 容器,浏览器下载的文件名为

打开分析,浏览器下载记录只有一条,所以答案为reshacker_setup.exe
11.分析检材 1 容器,陈某使用过的 github 代理的域名为

历史命令一直都是很重要的部分
在这边过滤github
可以看到不少内容,最主要的就是这一行
git clone -b v5.6.4.2 https://gh.viru.sh/https://github.com/aircrack-ng/rtl8812au.git
这边在从远程代码仓库克隆项目,这个URL是典型的前缀+真实地址的形式
即gh.viru.sh才是实际访问域名
所以可以判断陈某使用过的github代理域名为gh.viru.sh
12.分析检材 1 容器中助记词程序 recphrase,其使用的壳类型为

先定位到这个recphrase程序
提取出来DIE查一下壳

发现明显打包工具为UPX,即壳为UPX
我们这边直接用UPX脱壳即可,注意这边需要-o参数才能成功脱壳,原来的没有write权限(或者给一个也行)

13.分析上题程序,程序运行后第 2 列第 3 行助记词为
分析上边那个程序,这边在历史记录里可以注意到存在这样子的命令

发现其实upx加壳的是reco这个程序

而我们之前搜索recphrase的时候reco就在上边,结合大小一样,怀疑是同一个文件

的确一样啊,结合上边的命令,也就是说这个recphrase就是py脚本通过PyInstaller打包做的
用 pyinstxtractor 解包一下

git clone https://github.com/extremecoders-re/pyinstxtractor.git
cd pyinstxtractor
python3 pyinstxtractor.py recphrase_unpacked
直接解包

主程序就是这个reco.pyc

利用pylingual成功还原出python源码

python运行即可
所以第二列第三行是village
14.分析上题程序,该组助记词对应的钱包种子前 8 位为

根据上一题可以得到助记词
在本地的BIP39填入助记词即可计算得到恢复种子
e08478b0ca12153b4ae26d05fc50e5bbf122307d7d431c9d59e1f6bc7d9a835c7d3d384bb4011aeb7540acef56129ad620839d24383a1308997905c9c0586611
15.分析检材 1 容器,钓鱼网站(phishing)的后台用户密码加密算法为
先找这个phishing在哪里

在root家目录下

发现该目录下存在一个数据库,打开看看

可以看到密码是pbkdf2+sha256的加密算法
16.分析检材 1 容器,钓鱼网站超管用户的弱口令为
上一题已经得到了加密方式以及加密后的值
题目已经说是弱口令了,那就把弱口令的字典拿来字典爆破跑跑看就好了,这边刚好有一个rockyou.txt前5000的文件
import hashlib
import base64
import hmac
target = "pbkdf2_sha256$1000000$OiyKwstlWoZt6cvGmjhSFP$gVg7Ds9/KtaSqJSMAHx8eoYI0IDffpTLcHSlDKSiXqY="
dict_path = "/home/kali/Desktop/5000.txt"
def check_password(password_bytes, target_hash):
algorithm, iterations, salt, hash_b64 = target_hash.split("$")
if algorithm != "pbkdf2_sha256":
raise ValueError("不是 pbkdf2_sha256 哈希")
iterations = int(iterations)
salt_bytes = salt.encode()
real_hash = base64.b64decode(hash_b64)
test_hash = hashlib.pbkdf2_hmac(
"sha256",
password_bytes,
salt_bytes,
iterations,
dklen=len(real_hash)
)
return hmac.compare_digest(test_hash, real_hash)
def main():
count = 0
with open(dict_path, "rb") as f:
for line in f:
password = line.rstrip(b"\r\n")
count += 1
if check_password(password, target):
print("[+] 爆破成功!")
print("[+] 密码:", password.decode(errors="ignore"))
print("[+] 尝试次数:", count)
return
if count % 100 == 0:
print(f"[*] 已尝试 {count} 个密码...")
print("[-] 字典中没有找到密码")
print("[*] 总尝试次数:", count)
if __name__ == "__main__":
main()
跑一下

得到密码是123456
17.分析检材 1 容器,宝塔面板的入口为

直接在浏览器历史记录里就能看到面板的访问记录
所以入口就是/a2d3e161
18.分析检材 1 容器,宝塔面板运行在 aarch64 内核时报错的 so 文件为
已经说是宝塔的报错了,我们看看宝塔的报错日志


可以直接看见这边尝试加载64位库导致了报错,所以是PluginLoader.so
不过这个报错log里边也只有这一个so文件就是了