2026FIC初赛(服务器+互联网+U盘)

admin 2026-05-03 04:42:11 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录了2026年FIC初赛的完整解题过程,涵盖服务器取证、互联网信息收集和二进制程序分析三部分。服务器部分通过仿真技术成功获取系统信息、数据库配置和网站后台管理入口;互联网部分通过分析配置文件获取TG群组ID和备份数据;二进制程序部分成功逆向分析出AES加密密码。文档提供了详细的技术操作步骤和验证方法。 综合评分: 85 文章分类: CTF,WEB安全,渗透测试,漏洞分析,应急响应


查看数据库文件,在mac_vod表中看到文件名

3. ngrok提供的域名为 【参考格式:a.b.c】

blemish-junior-unengaged.ngrok-free.dev

/root/.config/ngrok/ngrok.yml找到配置文件

发现没有任何信息,查看crontab发现开机自启配置cat /etc/crontab | grep ngrok

启动ngrokngrok http 80查看到域名

二进制程序部分

1. 分析u盘检材,找到其中保存的加密程序SampleVC.exe,请给出这个exe程序的md5值? (答案格式:c4ca4238a0b923820dcc509a6f75849b)

764789DD9C095D74B6B258CF0F7568B2

在U盘中找到该文件

直接计算md5即可

2. 分析SampleVC.exe,该程序编译的日期可能是什么? (答案格式:2025-06-06)

2026-04-17 13:53:20

将程序导出,用die查看一下

3. 分析SampleVC.exe,正确的密码是什么? (答案格式:abcdefghABCDEFGH)

PleaseRunAsAdmin

放进ida里分析一下,分析一下winmain函数

这是一个标准的 Windows GUI 程序模板,创建了一个基本的窗口应用程序框架。实际功能在窗口过程函数 sub_1400024A0中实现,定位该函数

再去sub_140002200函数中获取key与密文

1.获取输入 :从两个EDIT控件获取文件路径(hWnd)和密码(hWnd_0)2.长度校验 :密码必须恰好 16个字符3.字符范围校验 :每个字符必须在 0x20~0x7E (可打印ASCII)4.编码转换 :使用代码页 0xFDE9 (UTF-8无BOM)将宽字符转为多字节5.AES加密验证 :

•初始状态(密钥): [0x67452301, 0xEFCDAB89, 0x67452301, 0xEFCDAB89]•对密码进行 XOR预处理 : password[i] ^= (3*i + 127)•然后进行 AES-128加密

1.比较结果 :与硬编码密文比较

import structfrom Crypto.Cipher import AES
ciphertext&nbsp;= struct.pack('<4i', -1401439825,&nbsp;215362084, -1386142476,&nbsp;1230097010)key&nbsp;= struct.pack('<4I',&nbsp;0x67452301,&nbsp;0xEFCDAB89,&nbsp;0x67452301,&nbsp;0xEFCDAB89)mask&nbsp;= bytes([(3&nbsp;* i +&nbsp;127) &&nbsp;0xFF for i in range(16)])
decrypted&nbsp;= AES.new(key, AES.MODE_ECB).decrypt(ciphertext)password&nbsp;= bytes([decrypted[i] ^ mask[i] for i in range(16)])print(password.decode('ascii'))

4. 分析u盘检材,利用SampleVC.exe解密U盘中被加密的文件,解密后的文件的后缀是什么? (答案格式:exe)

vhd

分析解密函数 sub_140001CF0当密码验证通过后,程序调用 sub_140001CF0(文件路径, 密码) :

1.打开加密文件 : wfopen_s(&Stream, lParam, L”rb”)2.创建输出文件 :

wcscpy_s(Destination,&nbsp;0x104u, lParam);wcscat_s(Destination,&nbsp;0x104u, L".vhd"); &nbsp;// ← 输出文件后缀为 .vhdwfopen_s(&Stream_, Destination, L"wb");

1.RC4解密 :使用密码作为RC4密钥,对文件内容进行流式解密2.调用VHD挂载 : sub_140001760 → sub_1400027B0

分析VHD挂载函数 sub_1400027B0

该函数使用Windows VHD API:

•OpenVirtualDisk() — 打开VHD文件•AttachVirtualDisk() — 挂载为虚拟磁盘•GetVirtualDiskPhysicalPath() — 获取物理磁盘路径•挂载成功后删除临时.vhd文件

SampleVC.exe先用RC4解密加密文件,输出为 .vhd 格式的虚拟硬盘文件,然后自动挂载该VHD。

分析完之后,在U盘中导出加密文件进行解密

用管理员模式启动程序

解密成功,可以看到这个文件一闪即逝,这是正常的,因为他挂载成功后会删除临时.vhd文件

5. 分析u盘检材,找到被加密的交易记录,统计李安弘虚拟币收款地址钱包总收款金额为 【参考格式:1.00】

186948.09

因为解密后文件会消失,所以我选择写脚本解密,当然也可以修改程序,但是我不会

import&nbsp;sys
def&nbsp;rc4_init(key_bytes):&nbsp; &nbsp; S =&nbsp;list(range(256))&nbsp; &nbsp; j =&nbsp;0&nbsp; &nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(256):&nbsp; &nbsp; &nbsp; &nbsp; j = (j + S[i] + key_bytes[i %&nbsp;len(key_bytes)]) %&nbsp;256&nbsp; &nbsp; &nbsp; &nbsp; S[i], S[j] = S[j], S[i]&nbsp; &nbsp;&nbsp;return&nbsp;S
def&nbsp;rc4_crypt(data, S):&nbsp; &nbsp; output = []&nbsp; &nbsp; i = j =&nbsp;0&nbsp; &nbsp;&nbsp;for&nbsp;byte&nbsp;in&nbsp;data:&nbsp; &nbsp; &nbsp; &nbsp; i = (i +&nbsp;1) %&nbsp;256&nbsp; &nbsp; &nbsp; &nbsp; j = (j + S[i]) %&nbsp;256&nbsp; &nbsp; &nbsp; &nbsp; S[i], S[j] = S[j], S[i]&nbsp; &nbsp; &nbsp; &nbsp; k = S[(S[i] + S[j]) %&nbsp;256]&nbsp; &nbsp; &nbsp; &nbsp; output.append(byte ^ k)&nbsp; &nbsp;&nbsp;return&nbsp;bytes(output)
def&nbsp;decrypt_file(input_path, output_path, password):&nbsp; &nbsp;&nbsp;with&nbsp;open(input_path,&nbsp;'rb')&nbsp;as&nbsp;f:&nbsp; &nbsp; &nbsp; &nbsp; encrypted_data = f.read()
&nbsp; &nbsp; key = password.encode('utf-8')&nbsp; &nbsp; S = rc4_init(key)&nbsp; &nbsp; decrypted_data = rc4_crypt(encrypted_data, S)
&nbsp; &nbsp; output_final_path = output_path +&nbsp;'.vhd'&nbsp; &nbsp;&nbsp;with&nbsp;open(output_final_path,&nbsp;'wb')&nbsp;as&nbsp;f:&nbsp; &nbsp; &nbsp; &nbsp; f.write(decrypted_data)
&nbsp; &nbsp;&nbsp;print(f"Decrypted successfully!")&nbsp; &nbsp;&nbsp;print(f"Output:&nbsp;{output_final_path}")&nbsp; &nbsp;&nbsp;return&nbsp;output_final_path
if&nbsp;__name__ ==&nbsp;"__main__":&nbsp; &nbsp;&nbsp;if&nbsp;len(sys.argv) !=&nbsp;4:&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("Usage: python decrypt.py <input_file> <output_file> <password>")&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;print("Example: python decrypt.py encrypted_file output PleaseRunAsAdmin")&nbsp; &nbsp; &nbsp; &nbsp; sys.exit(1)
&nbsp; &nbsp; input_file = sys.argv[1]&nbsp; &nbsp; output_file = sys.argv[2]&nbsp; &nbsp; password = sys.argv[3]
&nbsp; &nbsp; decrypt_file(input_file, output_file, password)

挂载恢复的磁盘

筛选李安弘虚拟币收款地址对应的收款记录,计算一下即可


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:云影安全实验室 《2026FIC初赛(服务器+互联网+U盘)》

评论:0   参与:  0