文章总结: 本文记录了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 = struct.pack('<4i', -1401439825, 215362084, -1386142476, 1230097010)key = struct.pack('<4I', 0x67452301, 0xEFCDAB89, 0x67452301, 0xEFCDAB89)mask = bytes([(3 * i + 127) & 0xFF for i in range(16)])
decrypted = AES.new(key, AES.MODE_ECB).decrypt(ciphertext)password = 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, 0x104u, lParam);wcscat_s(Destination, 0x104u, L".vhd"); // ← 输出文件后缀为 .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 sys
def rc4_init(key_bytes): S = list(range(256)) j = 0 for i in range(256): j = (j + S[i] + key_bytes[i % len(key_bytes)]) % 256 S[i], S[j] = S[j], S[i] return S
def rc4_crypt(data, S): output = [] i = j = 0 for byte in data: i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] k = S[(S[i] + S[j]) % 256] output.append(byte ^ k) return bytes(output)
def decrypt_file(input_path, output_path, password): with open(input_path, 'rb') as f: encrypted_data = f.read()
key = password.encode('utf-8') S = rc4_init(key) decrypted_data = rc4_crypt(encrypted_data, S)
output_final_path = output_path + '.vhd' with open(output_final_path, 'wb') as f: f.write(decrypted_data)
print(f"Decrypted successfully!") print(f"Output: {output_final_path}") return output_final_path
if __name__ == "__main__": if len(sys.argv) != 4: print("Usage: python decrypt.py <input_file> <output_file> <password>") print("Example: python decrypt.py encrypted_file output PleaseRunAsAdmin") sys.exit(1)
input_file = sys.argv[1] output_file = sys.argv[2] password = sys.argv[3]
decrypt_file(input_file, output_file, password)
挂载恢复的磁盘
筛选李安弘虚拟币收款地址对应的收款记录,计算一下即可
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云影安全实验室 《2026FIC初赛(服务器+互联网+U盘)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论