2026fic
检材密码
FIC-{e404d6e66586e9460c23755afab5a872bcf78ab4}
参考wp
- https://www.yuque.com/heguozi-u1swv/fmcbd7/gzzhzhwxnz7z3hnx?singleDoc#juzo2
- https://www.cnblogs.com/lyydbk/p/20042661#_label0
计算机
1. 分析计算机检材,操作系统版本号为

答案:23.1
2. 分析计算机检材,李安弘曾收到一份免费领取token的邮件的疑似钓鱼邮件,其发送用户邮箱为
路径:<font style="color:rgba(0, 0, 0, 0.87);">/home/lha/.local/share/deepin/deepin-mail/imap.163.com/lihongan19851024@163.com/imap/42e7eeb9-3108-4536-999d-fb0d42a8b569/mail.eml</font>


答案: hf13338261292@outlook.com
3. 分析计算机检材,李安弘电脑中记录的黄金换现金的商家联系方式
从启动器看,有一个语音记事本

从文件系统看,这应该是系统自带的,所以他的包名有deepin,要到home目录下去找,因为登录的时候是lha用户,而不是root,路径:<font style="color:rgba(0, 0, 0, 0.87);">/home/lha/.local/share/deepin/deepin-voice-note/deepin-voice-note1.0.db</font>

答案:13612817854
4. 分析计算机检材,推广设计图中的apk下载链接为
从邮件里可以直接看到与推广设计有关的邮件

可以看到是有三个附件的

看html文件关于RSA解密,刚好最近密码学课有在学这个,解密脚本是要n和d,看public.txt

通过文件来看,前三行应该是n,最后一行是e

RSA加密算法里,n=p*q,结合github里的加密源码得到q=p+2,让ai写脚本

解密的n和d塞进去解密图片,再扫码下载即可



答案:https://drive.google.com/file/d/1z3aRS-lkaJYKm7Cp1XjtUmVPsOEVW2fV/view?usp=sharing
5. 分析计算机检材,李安弘电脑vpn软件开放的代理端口为
启动应用里看到***,查看***信息得到端口

答案:9527
6. 分析计算机检材,李安弘电脑中AI软件当前使用的模型类型为
仿真在任务栏里看到UOS AI,查看设置就可以知道使用的ai模型


答案:OpenRouter
7. 分析计算机检材,李安弘电脑中AI软件当前使用的模型apiKey为
详细信息里看到apikey并不完整,看对应的数据库,路径:\home\lha\.local\share\deepin\uos-ai-assistant\db\basic

答案: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
8. 分析计算机检材,李安弘电脑中勒索软件提供的解密服务联系方式为
手机的便签里有vc密码9ed2@99y8.com.cn,用这个密码解密pc中的加密分区

解密分区里看到get_token_linux推测这应该是勒索凭证

ida看main_main函数

答案:beijixin996@tutanota.com
9. 分析计算机检材,李安弘电脑中记录的存放黄金的保险柜编号是
在hideen里看到202603121310.mp4,推测这个视频是加密过的

解密脚本
import struct
import sys
import os
KEY = 0x539 # 1337
MARKER = b"stco"
def decrypt_file(input_path: str, output_path: str) -> bool:
with open(input_path, "rb") as f:
data = bytearray(f.read())
found_any = False
search_start = 0
while True:
pos = data.find(MARKER, search_start)
if pos == -1:
break
if pos + 16 > len(data):
search_start = pos + 4
continue
# Read entry count at stco+0x08 (big-endian, NOT encrypted)
count = struct.unpack(">I", data[pos + 8 : pos + 12])[0]
# Sanity check: a typical MP4 stco chunk has at most ~100000 entries
if count == 0 or count > 500000:
search_start = pos + 4
continue
entry_base = pos + 0x0C
entries_end = entry_base + count * 4
if entries_end > len(data):
search_start = pos + 4
continue
print(f"[+] Found 'stco' at offset 0x{pos:X}, entry count: {count}")
for i in range(count):
offset = entry_base + i * 4
encrypted = struct.unpack(">I", data[offset : offset + 4])[0]
decrypted = (encrypted - KEY) & 0xFFFFFFFF
data[offset : offset + 4] = struct.pack(">I", decrypted)
if i < 3 or i >= count - 3:
print(f" [{i:4d}] offset=0x{offset:X} enc=0x{encrypted:08X} dec=0x{decrypted:08X}")
if count > 6:
print(f" ... ({count - 6} entries omitted)")
found_any = True
search_start = pos + 4
if not found_any:
print(f"[-] No valid 'stco' marker found in {input_path}")
return False
with open(output_path, "wb") as f:
f.write(data)
print(f"[+] Decrypted file saved to: {output_path}")
return True
if __name__ == "__main__":
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <encrypted.mp4> [output.mp4]")
sys.exit(1)
inpath = sys.argv[1]
outpath = sys.argv[2] if len(sys.argv) > 2 else inpath + ".decrypted.mp4"
if not os.path.exists(inpath):
print(f"[-] File not found: {inpath}")
sys.exit(1)
success = decrypt_file(inpath, outpath)
sys.exit(0 if success else 1)

答案:997546
10. 分析计算机检材,李安弘电脑中记录的保险柜密码是
在zhongyao文件夹下找到et文件保险箱的秘密,另外几个文件均是表格有很多点,推测可能是一种加密

在<font style="color:rgba(0, 0, 0, 0.87);">/home/lha/tool</font>下找到execelcrypt.txt,代码扔给ai解释,发现就是加密成点阵

这个et文件是WPS 的 OLE + BIFF + Escher + 内嵌 OOXML 混合结构,让ai读取生成脚本
解析步骤:
1. 用 olefile 打开 OLE 容器,读取 Workbook 流
2. 收集 BIFF MSODRAWING (0x00EC) 记录
3. 从 Escher 二进制中定位 0xF122 记录,提取内嵌 ZIP 中的 descr 值
4. 逆向公式:x = (val/1000 XOR 85) - 100, y = (val%1000 XOR 85) - 100
5. 按 x/25 分组,每组查表匹配字符,拼接成明文
#!/usr/bin/env python3
"""Decrypt .et file steganography - extract hidden text from shape AlternativeText."""
import olefile
import struct
import zipfile
import io
import re
import sys
FONT = {
'0': [(1,0),(2,0),(0,1),(3,1),(0,2),(3,2),(0,3),(3,3),(1,4),(2,4)],
'1': [(2,0),(1,1),(2,1),(2,2),(2,3),(1,4),(2,4),(3,4)],
'2': [(1,0),(2,0),(0,1),(3,1),(2,2),(1,3),(0,4),(1,4),(2,4),(3,4)],
'3': [(0,0),(1,0),(2,0),(3,1),(1,2),(2,2),(3,3),(0,4),(1,4),(2,4)],
'4': [(3,0),(2,1),(3,1),(1,2),(3,2),(0,3),(1,3),(2,3),(3,3),(4,3),(3,4)],
'5': [(0,0),(1,0),(2,0),(0,1),(0,2),(1,2),(2,2),(3,3),(0,4),(1,4),(2,4)],
'6': [(1,0),(2,0),(0,1),(0,2),(1,2),(2,2),(0,3),(3,3),(1,4),(2,4)],
'7': [(0,0),(1,0),(2,0),(3,0),(3,1),(2,2),(1,3),(1,4)],
'8': [(1,0),(2,0),(0,1),(3,1),(1,2),(2,2),(0,3),(3,3),(1,4),(2,4)],
'9': [(1,0),(2,0),(0,1),(3,1),(1,2),(2,2),(3,2),(3,3),(2,4)],
'a': [(1,2),(2,2),(3,2),(0,3),(3,3),(1,4),(2,4),(3,4)],
'b': [(0,0),(0,1),(0,2),(1,2),(2,2),(0,3),(3,3),(0,4),(1,4),(2,4)],
'c': [(1,0),(2,0),(3,0),(0,1),(0,2),(0,3),(1,4),(2,4),(3,4)],
'd': [(3,0),(3,1),(1,2),(2,2),(3,2),(0,3),(3,3),(1,4),(2,4),(3,4)],
'e': [(1,0),(2,0),(0,1),(0,2),(1,2),(2,2),(0,3),(1,4),(2,4)],
'f': [(1,0),(2,0),(1,1),(0,2),(1,2),(2,2),(1,3),(1,4)],
'g': [(1,2),(2,2),(3,2),(0,3),(3,3),(1,4),(2,4),(3,4),(3,5),(1,6),(2,6)],
'h': [(0,0),(0,1),(0,2),(1,2),(2,2),(0,3),(3,3),(0,4),(3,4)],
'i': [(1,0),(1,2),(1,3),(1,4)],
'j': [(2,0),(2,2),(2,3),(2,4),(2,5),(1,6),(0,5)],
'k': [(0,0),(0,1),(0,2),(0,3),(0,4),(2,2),(1,3),(3,3),(2,4)],
'l': [(1,0),(1,1),(1,2),(1,3),(1,4)],
'm': [(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(2,2),(4,2),(0,3),(4,3)],
'n': [(0,1),(1,0),(2,0),(0,2),(3,2),(0,3),(3,3),(0,4),(3,4)],
'o': [(1,1),(2,1),(0,2),(3,2),(1,3),(2,3)],
'p': [(0,2),(1,2),(2,2),(0,3),(3,3),(0,4),(1,4),(2,4),(0,5),(0,6)],
'q': [(1,2),(2,2),(0,3),(3,2),(3,3),(3,4),(3,5),(4,5)],
'r': [(0,2),(0,3),(0,4),(1,2),(2,2)],
's': [(1,0),(2,0),(3,0),(0,1),(1,2),(2,2),(3,3),(0,4),(1,4),(2,4)],
't': [(1,0),(1,1),(1,2),(1,3),(1,4),(0,2),(2,2)],
'u': [(0,2),(0,3),(3,2),(3,3),(1,4),(2,4),(3,4)],
'v': [(0,0),(4,0),(1,2),(3,2),(2,4)],
'w': [(0,2),(0,3),(1,4),(2,3),(3,4),(4,2),(4,3)],
'x': [(0,0),(4,0),(1,1),(3,1),(2,2),(1,3),(3,3),(0,4),(4,4)],
'y': [(0,0),(4,0),(1,1),(3,1),(2,2),(2,3),(1,4)],
'z': [(0,0),(1,0),(2,0),(3,0),(2,1),(1,2),(0,3),(0,4),(1,4),(2,4),(3,4)],
':': [(1,1),(1,3)],
'@': [(1,0),(2,0),(0,1),(3,1),(0,2),(2,2),(3,2),(0,3),(1,4),(2,4)],
'.': [(1,4)],
}
def decrypt_et(filepath: str) -> str:
ole = olefile.OleFileIO(filepath)
wb = ole.openstream("Workbook").read()
# Collect MSODRAWING records
msodata = bytearray()
pos = 0
while pos < len(wb) - 4:
rec_type, rec_size = struct.unpack("<HH", wb[pos : pos + 4])
if rec_type == 0x00EC:
msodata.extend(wb[pos + 4 : pos + 4 + rec_size])
if rec_size > 10000:
break
pos += 4 + rec_size
# Extract descr values from embedded DrawingML XML
descrs = set()
offset = 0
while offset < len(msodata) - 8:
if msodata[offset + 2 : offset + 4] == b"\x22\xf1":
dsize = struct.unpack("<I", msodata[offset + 4 : offset + 8])[0]
if (
struct.unpack("<H", msodata[offset + 2 : offset + 4])[0] == 0xF122
and dsize > 1000
):
data = bytes(msodata[offset + 8 : offset + 8 + dsize])
pk = data.find(b"PK\x03\x04")
if pk >= 0:
try:
zf = zipfile.ZipFile(io.BytesIO(data[pk:]))
xml = zf.read("drs/shapexml.xml").decode("utf-8", errors="replace")
m = re.search(r'descr="(\d+)"', xml)
if m:
descrs.add(int(m.group(1)))
except Exception:
pass
offset += 1
# Decode: alt_text = ((x+100)^85)*1000 + ((y+100)^85)
dots = []
for val in descrs:
ex = val // 1000
ey = val % 1000
x = (ex ^ 85) - 100
y = (ey ^ 85) - 100
dots.append((x, y))
# Group by character index
chars = {}
for x, y in dots:
ci = x // 25
dx = (x % 25) // 4
dy = y // 4
chars.setdefault(ci, set()).add((dx, dy))
# Match each character
result = ""
for ci in sorted(chars.keys()):
dots_set = chars[ci]
best_ch, best_diff = "?", 999
for ch, pattern in FONT.items():
pset = set(pattern)
diff = len(dots_set - pset) + len(pset - dots_set)
if diff < best_diff:
best_diff, best_ch = diff, ch
result += best_ch
return result
def main():
if len(sys.argv) < 2:
print(f"Usage: python3 {sys.argv[0]} <file.et>")
sys.exit(1)
result = decrypt_et(sys.argv[1])
print(result)
if __name__ == "__main__":
main()
答案:583985
手机
1. 分析手机检材,该手机型号为
看雷电手机提取的总结文件

答案:Redmi Note 7 Pro
2. 分析手机检材,李安弘手机计划前往迪拜的日期是
在小米的记事本里,路径:\data\user\0\com.miui.notes\databases\todo.db

答案:20260606
3. 分析手机检材,李安弘手机中与网站搭建人员沟通所使用的app安装日期为
data目录里看到talk,推测是聊天软件

搜索发现是uutalk

确定包名之后,到packages.xml找安装时间ft


答案:20260414
4. 分析手机检材,李安弘手机中与网站搭建人员沟通所使用的app,存放聊天数据的数据库为
db有两个数据库文件,一个可以打开里面并没有聊天信息,另一个可以打开,但是有加密,结合ai分析apk。发现数据库的文件名是wk_+uid的格式,apk要到下载路径去找<font style="color:rgba(0, 0, 0, 0.87);">/storage/emulated/0/Android/data/com.talk.uabchat/files/Download/</font>

同时看到数据库密码是uid

由此解密数据库

答案:wk_9628874a3c6b403593766496fa985893.db
5. 分析手机检材,存放聊天数据的数据库的解密密码为
见上题
答案:9628874a3c6b403593766496fa985893
6. 分析手机检材,李安弘购买云服务器商家的收款备用钱包地址为
在channel表里看到了大日云服务器,再看message发现可以通过channel-id进行筛选



答案:TN8vQzB3n7W5wVca9W4kL2wP7xY9zM5nU1
7. 分析手机检材,李安弘手机中给网站搭建人员第一次转账的交易hash前6位为
聊天记录紧接着的下一条就是图片,顺着路径就是交易图片


答案:26226f
8. 分析手机检材,手机中使用的AI软件李安弘主动向AI提问了几次
应用列表过滤ai得到包名

看\com.pocketpalai\pocketpalai.db即可

答案:5
9. 分析手机检材,李安弘手机使用的AI软件调用本地AI模型及版本为
在model文件夹下可以看到

答案:Qwen3.5
10. 分析手机检材,李安弘曾使用无人机航拍,分析其飞行轨迹,其在哪个县进行飞行
11. 分析手机检材,李安弘最近安装了一个视频类APP,该APP声明了多个敏感权限用于收集用户隐私。请选择其中涉及用户隐私的敏感权限。
A. READ_CONTACTS
B. READ_SMS
C. RECEIVE_BOOT_COMPLETED
D. READ_CALL_LOG
E. SEND_SMS
data目录下看到一个有video的包名,app目录下没找到apk文件,联系到上面的aapk是下载下来的,去download里看



答案:ABD
12. 上述APP启动后会加载一个色情网站。请找出该APP当网络不可用时APP加载的本地离线页面路径
结合ai静态分析apk


答案: file:///android_asset/www/index.html
13. 上述APP将非法收集的用户隐私数据上传至远程服务器。上传地址在代码中经过编码处理。请找出编码方式,还原出完整的上传服务器URL
看到上传第一想法就是搜索upload,看到主函数下有,优先看主函数下的

看到contact,userdata解密一下,得到网址发现与上传隐私有关


答案:https://api.sp-live88.com/collect/userdata
14. 该APP在本地创建了SQLite数据库存储收集到的用户信息。请分析代码,写出用于存储用户信息的表名
搜索.db找到对应的文件

看到代码里有sql语句,sql语句创建了user_collection表里面全是用户信息

答案:user_collection
15. 该APP的assets目录中存在一个加密配置文件config.dat。请解密该文件,写出其中的USDT钱包地址
搜索config.dat,直接查找到对应的代码,s方法提到对config_seed进行了aes加密,t方法是如何aes加密的详细过程

看到getstring和string知道要到资源文件里去找config_seed,得到config_seed为 hotclub_2026_sec

分析t方法先进行了md5加密,转变为utf-8编码,再取前十六位


答案:TXqH7sVn8bR4kL2mN9pW6xJ3cY5dF1gA
16. 该APP前端JS代码可以直接调用Android原生方法获取用户隐私数据。请分析暴露了哪些方法用于获取通讯录?
看index.html,看到有个contact判断这是获取通讯录

答案:getContactsList()
17. 当主上传服务器不可达时,APP会获取备用服务器地址。请分析备用服务器的完整域名和端口

答案:backup.sp-live88.xyz:8443
服务器
仿真之后进入的是docker,要终端进root,systemctl apt install openssh-server安装ssh,再重启网络服务,修改网卡配置文件,具体细节看上面的参考wp
1.该服务器主机操作系统版本为
cat /etc/os-release

答案:Debian GNU/Linux 13 (trixie)
2.该服务器根分区硬盘的uuid号为
findmnt -no UUID /

答案:3231e52f-5e15-44c4-b224-e29cb4201c0e
3.该服务器中最新的docker镜像创建时间为
先查看所有的docker<font style="color:rgb(96, 98, 102);">docker images -a</font>,发现u22最近创建的,再查看详细信息

答案:2026-04-16T07:15:50.535713491Z
4.该服务器根分区快照路径为
这里问的应该是网站的快照,因为参考wp给的都是/root/history,这是系统的快照。标答应该是网站的快照,路径是/var/www/html/maccms10
如果问的是系统的该怎么做?
1.先df -T / 查看文件系统
2.如果是btrfs,则btrfs subvolume list /
3.zfs则zfs list -t snapshot
4.ext4/xfs 则看lvs 或 lvdisplay,有 LVM则看lvs(看 origin 列非空就是快照),无 LVM则无原生快照,直接跳到查 Web 路径
答案:/var/www/html/maccms10
5.该网站后台管理入口对应的文件名为
grep查看涉及到后台的文件,发现user.php很可疑,访问发现为登录管理系统的入口


答案:user.php
6.该网站设置的icp备案号为
访问网站即可看到

或者直接grep也可以

答案:icp1919810
7. 该网站设置的主域名为
直接看index.html

答案:www.2026fic.forensix
8.该网站分类3中,视频的拼音为
在database.php里找到连接数据库的对应信息,配置连接信息,通过ssh隧道连接,在mac_vod表里可以看到

答案:sipaanshe
9.该站点设置页面中,被使用的前端模板来自于哪个源文件?
从主配置文件maccms.php 中找到当前启用的模板,发现来自于template/001tep,而001tep下的info.ini文件有着配置的源信息,同时也介绍了这个模板里底是一个什么样到的格式


答案:info.ini
10.该网站的伪静态规则配置文件sm3值为
在说明文档里,看到rewrite说明文件,该服务器使用的是nginx,因此对应的配置文件就是maccms.conf,但是在网站文件目录里并没有这个文件,联想到这是nginx,nginx中 <font style="color:rgb(96, 98, 102);">/etc/nginx/sites-enabled/</font>存放真正的网站启用配置

在该目录下,发现了说明文档给的示例maccms.conf的同样代码,确定这就是配置文件


答案:e73407468e6f52af54c7b14632eeeb9be25b05106d06c4c3085fc843c223793f
11.该网站关联的数据库的ip地址为
在database.php里找到了数据库的配置文件,但是只有名字没有ip,到hosts文件里找


答案:10.0.3.100
12.该网站数据库使用了哪一类容器技术
根据上一题的ip推测可能是LXC,因为10.0.3.0/24 是很多 LXC/LXD 环境的默认私有网段,由 lxdbr0 网桥分配。<font style="color:rgb(96, 98, 102);">ip route</font>查看路由,发现确实是通过lxcbr0分配的,另外两个一个走的网卡,一个走的docker都不是题目所说的数据库

答案:LXC
13.运行在4000端口的备份数据库版本号为
根据数据库配置文件推测是tidb,<font style="color:rgb(96, 98, 102);">mysql -h 10.0.3.100 -P 4000 -u aa -p'123456' --skip-ssl -e "SELECT VERSION();"</font>,注意用tcp直接连接

答案:8.0.11
14.新注册用户数量最多的日期为
SELECT
FROM_UNIXTIME(user_reg_time, '%Y-%m-%d') AS reg_date,
COUNT(*) AS user_count
FROM mac_user
WHERE user_reg_time > 0
GROUP BY reg_date
ORDER BY user_count DESC
LIMIT 1;

答案:2026-04-15
15.马慧美最后一次登录该网站的ip为
SELECT
user_name,
user_last_login_ip
FROM mac_user
WHERE user_name = 'Ma Hui Mei';


答案:51.43.21.163
16.以下哪个文件系统未被使用

答案:ntfs
17.该服务器安装了以下那些数据库服务
通过进程看是mysql,tidb,postgresql

答案:ACD
互联网
1. 售卖卡密的公开群组ID为
看苹果CMS网站的主配值文件/var/www/html/maccms10/application/extra/maccms.php

答案:FIC_2026
2. 备份数据库中视频图片的文件名为
前面提到备份数据库的端口是4000,所以切换端口尝试连接,连接成功,在mac_vod表里找到视频图片名

答案:7b3fdd9d464ce48e7f20cd45f918c9a6.jpg
3. ngrok提供的域名为
命令<font style="color:rgb(96, 98, 102);">ngrok http 80</font>即可获取,不过报错了,尝试了wp的方法仍然报错,就这样把
答案:blemish-junior-unengaged.ngrok-free.dev
二进制
1. 分析u盘检材,找到其中保存的加密程序SampleVC.exe,请给出这个exe程序的md5值

答案:764789dd9c095d74b6b258cf0f7568b2
2. 分析SampleVC.exe,该程序编译的日期可能是什么?

答案:2026-04-17
3. 分析SampleVC.exe,正确的密码是什么?
在WinMain里看到窗口收到信息,进行处理时会调用sub_1400024A0函数进行处理

在sub_1400024A0函数看到档值为0x2711u,会触发sub_140002200函数,而其他值并没有出现这种情况,很可疑,顺着这个函数往下看

在sub_140002200函数里,看到调用了sub_140001230,其中v6是用户输入的值,v8的值为<font style="color:rgb(31, 31, 31);">01 23 45 67 89 AB CD EF 01 23 45 67 89 AB CD EF</font>,后面还将str1和str2进行了比较,判断str1应该是密文
lpMultiByteStr = (CHAR *)operator new(0x10u);
WideCharToMultiByte(0xFDE9u, 0, (LPCWCH)lParam_, -1, lpMultiByteStr, 16, 0, 0);
*(_QWORD *)&v8 = 0xEFCDAB8967452301uLL;
v25 = 0;
*(_OWORD *)Str2 = 0;
*((_QWORD *)&v8 + 1) = 0xEFCDAB8967452301uLL;
v20 = 0;
v21 = 0;
v9 = 0;
v22 = 0;
v23 = 0;
v24 = 0;
v6 = (char *)operator new(0x11u);
*(_OWORD *)v6 = *(_OWORD *)lpMultiByteStr;
sub_140001230(Str2, v6, &v8);
*(_DWORD *)Str1 = 0xAC77B9AF;
n215362084 = 0xCD62A24;
v12 = 0xAD6124F4;
n1230097010 = 0x4951CA72;
v14 = 0;
if ( !strncmp(Str1, Str2, 0x10u) )
{
if ( (unsigned int)sub_140001CF0(lParam, (__int64)lpMultiByteStr) == 1 )
MessageBoxW(0, &Text, &Caption, 0);
else
MessageBoxW(0, &lpText_, &Caption, 0);
}
else
{
MessageBoxW(0, &lpText__0, &lpCaption_, 0);
}
结合sub_140001230整体思路是先对输入限制为16字节,再异或,最后aes-128加密,让ai写解密脚本
import struct
from Crypto.Cipher import AES
def solve_new_password():
# 1. 填入你修改后的四个十六进制硬编码参数
dw1 = 0xAC77B9AF
dw2 = 0x0CD62124 # 注意:你给出的第二项少了最高位,这里根据标准Dword或原题补全
dw2_modified = 0x0CD62A24 # 采用你给出的新值
dw3 = 0xAD6124F4
dw4 = 0x4951CA72
# 2. 拼接为小端序二进制流 (最终目标密文 Y)
target_ciphertext = struct.pack('<IIII', dw1, dw2_modified, dw3, dw4)
print(f"[*] 当前新目标密文 (Str1): {target_ciphertext.hex().upper()}")
# 3. 准备 AES-128 密钥 (v8)
aes_key = struct.pack('<QQ', 0xEFCDAB8967452301, 0xEFCDAB8967452301)
# 4. 逆向第一步:标准 AES-128 ECB 解密得到中间体 M
cipher = AES.new(aes_key, AES.MODE_ECB)
middle_m = cipher.decrypt(target_ciphertext)
print(f"[*] 当前解密后的中间体 (M): {middle_m.hex().upper()}")
# 5. 逆向第二步:剥离前置混淆层 (M[i] ^ (3 * i + 127))
real_password = ""
for i in range(16):
magic_byte = (3 * i + 127) & 0xFF
real_char = middle_m[i] ^ magic_byte
real_password += chr(real_char)
print("-" * 50)
print(f"[+] 针对新代码推导出的正确密码为: {real_password}")
print("-" * 50)
if __name__ == "__main__":
solve_new_password()
答案:PleaseRunAsAdmin
4. 分析u盘检材,利用SampleVC.exe解密U盘中被加密的文件,解密后的文件的后缀是什么?
在sub_140001CF0函数里可以看到加密文件后缀为vhd

答案:vhd
5. 分析u盘检材,找到被加密的交易记录,统计李安弘虚拟币收款地址钱包总收款金额为
解密脚本
import os
import sys
from Crypto.Cipher import ARC4
def decrypt_evidence_file():
# =================【用户配置区】=================
# 1. 题目给你的那个“加密文件”的真实名称(请根据实际情况修改)
encrypted_filename = "source_file"
# 2. 解密后输出的标准 VHD 虚拟磁盘文件名
output_filename = "extracted_evidence.vhd"
# 3. 我们在前面静态分析推导出的核心明文密钥
# (如果是你后面修改过的十六进制版本,请在此替换为计算出的对应新密码)
key = b"PleaseRunAsAdmin"
# ===============================================
# 检查加密源文件是否存在
if not os.path.exists(encrypted_filename):
print(f"[-] 错误:在当前目录下未找到加密文件 '{encrypted_filename}'!")
print("[*] 请修改脚本中的 'encrypted_filename' 变量为你的真实文件名。")
return
file_size = os.path.getsize(encrypted_filename)
print(f"[*] 成功锁定加密文件: {encrypted_filename} ({file_size / (1024*1024):.2f} MB)")
print(f"[*] 正在初始化 RC4 解密引擎,使用密钥: {key.decode('utf-8', errors='ignore')}")
print(f"[*] 对应解密逻辑:对应 exe 内部的 sub_140001CF0 函数流程")
print("-" * 60)
try:
# 初始化标准 RC4(即 ARC4)解密器
cipher = ARC4.new(key)
# 采用分块读取机制(每次 4096 字节,完美同步 C++ 代码中的 fread(Buffer, 1u, 0x1000u, Stream))
chunk_size = 4096
bytes_processed = 0
with open(encrypted_filename, "rb") as f_in, open(output_filename, "wb") as f_out:
while True:
chunk = f_in.read(chunk_size)
if not chunk:
break
# 执行逐块流解密
decrypted_chunk = cipher.decrypt(chunk)
f_out.write(decrypted_chunk)
# 打印简易进度条
bytes_processed += len(chunk)
progress = (bytes_processed / file_size) * 100
sys.stdout.write(f"\r[+] 正在解密: [{int(progress/2)*'='}{(50-int(progress/2))*' '}] {progress:.2f}%")
sys.stdout.flush()
print("\n" + "-" * 60)
print(f"[▓▓▓] 解密百分之百完成!")
print(f"[+] 成功生成标准虚拟磁盘文件: {os.path.abspath(output_filename)}")
print("[*] 后续取证指南:")
print(" 1. 在 Windows 10/11 系统中,直接【双击】该 .vhd 文件即可将其作为盘符挂载。")
print(" 2. 你也可以直接使用 FTK Imager、Autopsy 或 7-Zip 直接打开该 vhd 获取内部的 Flag 电子证据。")
except Exception as e:
print(f"\n[-] 解密过程中发生未预料的错误: {e}")
if __name__ == "__main__":
decrypt_evidence_file()
解密得到vhd后,挂载即可看到xlsx文件,从手机第7题可以看到地址为T9y开头,筛选再求和即可
答案:186948.09

浙公网安备 33010602011771号