首届CCF智能汽车大赛(CCF IVC 2025) 汽车安全攻防赛writeup
字数 2232 2025-09-01 11:26:02
CCF智能汽车大赛(CCF IVC 2025)汽车安全攻防赛Writeup教学文档
1. 扭曲爱德华曲线加密系统(Crypto Curve)
1.1 题目分析
题目实现了一个基于扭曲爱德华曲线(Twisted Edwards Curve)的加密系统,主要包含以下功能:
- 曲线点加法(Add)
- 标量乘法(C_multiplication)
- 密钥生成(get_key)
- 共享密钥生成(get_shared_secret)
1.2 解题思路
-
理解曲线运算:
- 扭曲爱德华曲线的加法公式为简化形式,在特定模下运算
- 题目给出的Add函数实现了这种运算
-
映射到乘法群:
- 通过映射f(P)将曲线上的点映射到乘法群
- 这个映射具有同态性质:f(nP) = f(P)^n
-
计算离散对数:
- 公钥A是生成元G的倍数:A = n_a*G
- 通过映射f,将曲线上的离散对数问题转化为乘法群上的离散对数问题
- 在乘法群中可以使用Pohlig-Hellman算法计算离散对数
-
恢复共享密钥:
- 共享密钥是n_a*B的x坐标
- 使用标量乘法计算S = C_multiplication(B, n_a)
- 取S的x坐标作为共享密钥
-
解密flag:
- 用共享密钥生成AES密钥
- 解密密文C
1.3 解题代码
# 需要根据具体曲线参数实现
# 主要步骤:
# 1. 将曲线点映射到乘法群
# 2. 在乘法群中解离散对数
# 3. 计算共享密钥
# 4. AES解密
2. NFSR流密码(nfsr)
2.1 题目分析
这是一个经典的多次NFSR(非线性反馈移位寄存器)流密码题目。
2.2 解题思路
- 分析NFSR的结构和反馈函数
- 利用已知明文或密文特性恢复初始状态
- 重建密钥流
2.3 解题代码
# 需要根据具体NFSR实现
# 主要步骤:
# 1. 分析NFSR结构
# 2. 恢复初始状态
# 3. 生成密钥流解密
3. Web Easylogin
3.1 题目分析
原题参考:https://blog.csdn.net/C_c9527/article/details/141907106
3.2 解题思路
-
哈希长度扩展攻击:
- 获取初始token
- 使用工具hash_ext_attack生成新的hash值
- 密钥长度为13(uniqid()生成13位数字)
- 扩展字符可以任意选择
-
构造新token:
- 得到新的明文和哈希后
- 根据原本的token格式,需要base64编码然后拼接
- 注意先URL解码再base64编码
3.3 解题步骤
-
使用工具生成攻击数据:
python hash_ext_attack.py -
构造新token:
Z3Vlc3SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAcA==.632dadad9db512bb42ee5c5101e50f85 -
提交得到flag:
flag{ba10357c-ef0f-4089-93b6-69fa342e03fd}
4. Serp
4.1 题目分析
- 使用dirsearch扫描发现.git泄露
- 使用GitHack工具获取源码
4.2 解题步骤
-
扫描目录:
dirsearch -u http://target -
获取源码:
python GitHack.py http://target/.git/ -
分析源码构造攻击链
-
实施攻击获取flag
5. IOV VIN
5.1 题目分析
-
流量包分析:
- 包含蓝牙连接和传输的十六进制数据
- 成功的数据为:
6435303662323636643532656334303563626434303961363132653464633735643236353661393131346166326231663266383363303731653266306532646437396464
-
APK分析:
- 入口点定位
- 发现VIN码加密处理过程
- 加密函数在native层的so文件中
5.2 加密过程
- 获取输入字符串
- 使用密钥:"MySecretKey123!@#"
- 调用enhancedEncrypt函数加密
- 使用bytesToHex将结果转为十六进制
5.3 解题步骤
- 逆向分析so文件找到加密函数
- 编写解密脚本
- 解密流量包中的十六进制数据
- 获取flag:
flag{202483734649767676649}
6. MISC GPS
6.1 解题步骤
- 打开GPX文件
- 查找异常轨迹点
- 在文件中查找相近坐标
- 分析坐标差异获取flag
7. OTA-流量
7.1 题目分析
-
车联网流量包包含:
- init文件
- download文件
- handshake文件(JSON格式)
-
handshake内容示例:
{ "session_key": "AES密钥", "other_data": "..." }
7.2 解题步骤
- 分析handshake文件确定加密方式为AES-CBC
- session_key对应AES的key
- 编写解密示例:
from Crypto.Cipher import AES # 使用session_key作为key cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = cipher.decrypt(encrypted_data)
8. RE ezapk
8.1 题目分析
- 使用Jadx反编译APK
- 发现flag可能是车辆访问凭证
- 加载myappication so文件
8.2 加密分析
- 使用魔改RC4加密:
- 非标准S盒
- 6字节固定密钥
- 密文与rodata中的26字节模板比对
- 匹配则返回"VEHICLE_ACCESS_GRANTED"
8.3 解题步骤
- 使用IDA反编译so文件
- 分析RC4实现:
- S盒位置:xmmword_F1E0 → F2D0 (共256字节)
- RC4密钥:11 22 33 44 55 66
- 注意反向RLE(游程编码)处理
- 解密得到原始凭证:
解释:flag{ccan_cccneeeede_careeee!?}- c2 → cc
- c3 → ccc
- e4 → eeee
9. Algorithm
9.1 解题步骤
- 动态调试获取flag数据
- 将16进制数据转换为字符串
10. PWN pwn-3
10.1 漏洞分析
- 典型栈溢出漏洞
- vuln()函数中定义128字节缓冲区buf[128]
- 使用read()读取0x100(256)字节,明显溢出
- 提供libc-2.27.so,可能启用tcache机制
- 程序未开启PIE(地址随机化)
10.2 利用思路
- 使用IDA找到所需地址
- 构造ROP链
- 利用栈溢出控制程序流
10.3 解题脚本
from pwn import *
# 根据实际地址编写利用代码
# 主要步骤:
# 1. 构造溢出payload
# 2. 布置ROP链
# 3. 获取shell或直接读取flag
总结
本writeup涵盖了CCF IVC 2025汽车安全攻防赛中的多个题目,涉及密码学、Web安全、逆向工程、二进制利用等多个领域。关键点包括:
- 扭曲爱德华曲线的数学特性和加密系统分析
- 哈希长度扩展攻击的实际应用
- 信息泄露(.git)的利用
- 蓝牙协议和VIN码加密分析
- RC4算法的魔改与逆向
- 经典栈溢出漏洞的利用
每个题目都需要结合具体场景和提供的线索进行分析,综合运用各种安全技术解决问题。