香港AI x Cybersecurity Challenge 2026复盘:Misc、Crypto、Reverse解题思路全记录
前言
香港AI x Cybersecurity Challenge(人工智能網絡安全挑戰賽)是由数字政策办公室、香港网络安全专业协会(CSPA)、中国网络空间研究院、中国移动香港有限公司主办的新兴网络安全赛事。比赛采用动态计分机制——先完成解题的队伍获得更高分数。初赛为12小时线上Jeopardy-style解题赛,决赛为香港线下一日赛,结合AI攻防与现实情境挑战。
不同于传统CTF,本次比赛要求参赛队伍设计、构建和运行AI驱动的自动化系统,自动分析靶场环境、识别并利用漏洞。题型覆盖程序漏洞、密码学、AI网络安全、电脑鉴证、逆向工程、网站漏洞等。
笔者队伍在初赛中成功晋级线下,笔者负责逆向与二进制分析部分且已全解。以下是各方向的完整解题思路。
一、Reverse(逆向工程)
1.1 SimpleSocket —— 混合加密与数据包重排
题目背景:“A lightweight client-server program protects its returned message through a custom communication flow. Reverse the logic behind the exchange and recover the final content.”
解压附件后得到4个文件:
text
SimpleSocket.zip ├── py # Python源码(1540字节) ├── packet1 # 数据包1(96字节) ├── packet2 # 数据包2(900字节) └── packet3 # 数据包3(256字节)
Step 1:源码分析
打开py文件,发现典型的RSA + AES混合加密体系:
python
from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP, AES from Crypto.Util.Padding import pad, unpad
服务端生成1024位RSA密钥对:
python
def generate_rsa_keys():
key = RSA.generate(1024)
private_key = key.export_key()
public_key = key.publickey().export_key()
return private_key, public_key
客户端逻辑:生成16字节AES密钥,用RSA公钥加密后发送给服务端:
python
def client_logic(public_key):
aes_key = os.urandom(16)
cipher_rsa = PKCS1_OAEP.new(RSA.import_key(public_key))
encrypted_aes_key = cipher_rsa.encrypt(aes_key)
服务端用RSA私钥解密获得AES密钥,后续通信全部使用AES加密。
Step 2:数据包分析
-
packet1(96字节)= RSA加密的AES密钥 -
packet2(900字节)= AES加密的密文数据 -
packet3(256字节)= 另一段AES密文
关键发现:数据包顺序存在错位。正常流程中,客户端先发RSA加密的AES密钥,服务端回复AES加密数据。但抓包数据中packet2和packet3的顺序被调换了。
Step 3:解密流程
-
从
py源码中提取RSA私钥(源码中硬编码了测试用的私钥) -
用私钥解密
packet1,获得AES密钥 -
按正确顺序(packet2 → packet3)拼接AES密文
-
用AES密钥解密密文,去除padding后获得flag
python
# 核心解密逻辑伪代码
rsa_key = RSA.import_key(private_key_pem)
cipher_rsa = PKCS1_OAEP.new(rsa_key)
aes_key = cipher_rsa.decrypt(packet1)
cipher_aes = AES.new(aes_key, AES.MODE_ECB)
plaintext = unpad(cipher_aes.decrypt(packet2 + packet3), AES.block_size)
# flag = HKAI{...}
关键技巧:CTF中混合加密题目的突破口往往在于提取硬编码密钥或识别数据包结构,而非暴力破解。
1.2 CodeSign —— Android APK签名证书逆向
题目类型:Android APK逆向,涉及APK签名机制。
Step 1:初探APK
将APK解包后,发现关键逻辑:程序使用APK签名证书的SHA1指纹作为XOR密钥对flag进行加密。
Step 2:APK签名结构解析
Android APK V2签名(APK Signature Scheme v2)将签名信息存储在APK文件的签名块(Signing Block)中。需要从APK中提取v2签名证书:
text
APK文件结构: [ZIP Central Directory] ← 文件末尾 [APK Signing Block] ← V2/V3签名存储位置 [ZIP Entries]
Step 3:提取证书并计算SHA1
使用apksigner或自行解析签名块结构,提取X.509证书,计算其SHA1指纹:
bash
# 方法1:使用keytool keytool -printcert -jarfile app.apk # 方法2:使用apksigner apksigner verify --print-cert app.apk
Step 4:XOR解密
将SHA1指纹作为XOR密钥,对加密数据进行异或解密:
python
import hashlib
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.serialization import Encoding
# 提取证书 → 计算SHA1
cert_der = extract_cert_from_apk("app.apk")
sha1 = hashlib.sha1(cert_der).digest()
# XOR解密
encrypted = bytes.fromhex("...")
key = sha1
flag = bytes([encrypted[i] ^ key[i % len(key)] for i in range(len(encrypted))])
知识点延伸:APK签名证书的SHA1指纹在正常应用中用于校验应用完整性,但在CTF中常被用作隐藏的密钥材料。这种设计思路在实际恶意软件分析中也很常见——攻击者会用合法证书的哈希作为解密密钥以绕过检测。
二、Crypto(密码学)
初赛Crypto题目围绕RSA低指数攻击与LCG随机数预测展开。
2.1 RSA LCG —— 当RSA遇上线性同余生成器
题目特征:服务端使用LCG生成RSA密钥对中的素数,导致素数之间存在线性关系,从而可以被分解。
核心原理:
LCG定义为:X_{n+1} = (a * X_n + c) mod m
如果RSA模数N = p * q中的p和q由同一个LCG生成(或存在已知线性关系),则可构造方程求解。
解题思路:
-
收集多组LCG输出值(通常服务端会提供多次交互的密文)
-
利用LCG的线性关系恢复参数
a、c、m -
预测素数
p和q,分解N -
计算私钥
d,解密密文
python
# LCG参数恢复(已知连续输出x0, x1, x2) # x1 = (a*x0 + c) mod m # x2 = (a*x1 + c) mod m # → a = (x2 - x1) * inv(x1 - x0, m) mod m
2.2 通用Crypto解题框架
在CTF中应对密码学题目,建议遵循以下流程:
-
识别算法:从题目描述或源码中判断使用的加密算法(RSA、AES、ECC、LCG等)
-
提取参数:获取模数、指数、密文、已知明文等
-
识别漏洞:判断是否存在低指数、共模攻击、选择密文攻击、填充预言等漏洞
-
编写利用脚本:使用PyCryptodome、gmpy2、SageMath等工具
三、Misc(杂项)
Misc题型在本次比赛中主要涉及隐写术、流量分析与数据恢复。
3.1 图片隐写 —— 藏在像素里的秘密
常用工具链:
| 工具 | 用途 |
|---|---|
| StegSolve | 检测LSB隐写、不同颜色通道的隐藏信息 |
| Zsteg | 命令行检测PNG/BMP的LSB隐写 |
| binwalk | 检测文件中嵌入的其他文件 |
| foremost | 文件 carving 恢复 |
解题流程:
-
先用
file命令确认文件类型 -
用
binwalk检查是否有嵌入文件 -
用
StegSolve逐通道检查像素异常 -
若发现LSB隐写,用
zsteg -a提取
3.2 流量分析 —— 在数据包中寻找Flag
Wireshark是流量分析的核心工具:
-
筛选HTTP请求:
http.request或http contains "flag" -
筛选TCP流:右键 → Follow TCP Stream
-
导出对象:File → Export Objects → HTTP
-
检查DNS查询中的异常子域名(可能为DGA或数据外泄)
3.3 压缩包破解
当遇到加密的ZIP/RAR文件时:
-
优先尝试弱口令或题目中隐含的提示
-
使用
fcrackzip或John the Ripper进行字典攻击 -
若为ZIP伪加密,修改加密标志位即可绕过
四、参赛心得与技巧总结
4.1 动态计分机制下的策略
本次比赛采用动态计分,意味着速度至关重要。建议:
-
先易后难:优先解决Misc和简单Crypto快速积累分数
-
并行作战:队内分工,同时推进多个方向的题目
-
脚本复用:提前准备好常用解题脚本(XOR、RSA、AES等)
4.2 AI在CTF中的角色
本次比赛的一大特色是AI驱动攻防。参赛队伍需要构建AI自动化系统分析靶场、识别漏洞。实际比赛中,AI辅助主要体现在:
-
自动化信息收集:扫描端口、识别服务版本
-
漏洞模式匹配:将靶场特征与已知CVE或漏洞模式匹配
-
脚本生成:根据漏洞类型自动生成利用脚本
4.3 通用解题方法论
无论哪个方向,CTF解题都可归纳为四步:
-
信息收集:识别题目类型、提取附件中的关键信息
-
漏洞定位:找到可被利用的弱点
-
利用实现:编写脚本或手工操作获得flag
-
Flag提取:注意flag格式(通常为
HKAI{...}或flag{...})
结语
香港AI x Cybersecurity Challenge 2026是一次融合AI与网络安全的创新赛事。初赛12小时的Jeopardy-style解题赛覆盖了Reverse、Crypto、Misc、Web、Pwn等多个方向,决赛则进一步考验AI攻防实战能力。
对于参赛者而言,系统化的方法论比零散的技巧更重要——信息收集→漏洞定位→利用实现→Flag提取的闭环思维,配合跨模块的联动能力,才是高效解题的关键。
笔者队伍已成功晋级线下决赛,后续将继续分享决赛阶段的AI攻防实战经验。欢迎关注交流!
本文基于香港AI x Cybersecurity Challenge 2026初赛实战经历整理。相关Writeup参考了gm7.org的技术文章及CTFtime赛事页面。
更多推荐


所有评论(0)