第一届OpenHarmony CTF专题赛RE题解
字数 1522 2025-09-01 11:26:17
OpenHarmony CTF专题赛RE题解教学文档
1. easyre题目解析
1.1 文件处理
- HAP文件本质是ZIP格式,可重命名为.zip后解压
- 需要反编译其中的abc文件获取源码
1.2 反编译工具选择
- 推荐使用jadx-dev-all工具进行反编译
- 也可使用其他反编译工具,但可能存在反编译不完全的情况
1.3 解题步骤
-
第一部分flag分析:
- 逻辑位于index文件中
- 加密过程:
- 首先加上自身长度
- 然后反转字符串
- 逐字符减去索引值(i)
- 再次反转
- 解密方法:使用密文正向运行该程序
- 第一部分flag:
universityofoxford arkts
-
第二部分flag分析:
- 位于flag目录下
- 当x_2_2.count达到1000000时输出flag
- flag生成逻辑:
- 调用getH2函数,实际上是decodeToString函数
- 在coder中实现:
- 调用x_1_8进行标准base解码
- 调用x_1_7进行字符串反转
- 解密方法:按照相同逻辑解密magic字符串
- 第二部分flag:
38bad98fa3074dd6adc8cc434f22c48b4d4
2. Secret题目解析
2.1 手势锁解密
-
锁验证逻辑:
- 从
@normalized:Y&&&libsecret.so&.mjs加载验证逻辑 - 检查函数位于libsecret.so中
- 使用XXTEA加密算法,密钥为"what"
- 密文为"is"(注意小端序)
- 从
-
解密方法:
- 使用IDA的get_wide_dword()函数提取数据
- 实现XXTEA解密算法
2.2 图片解密
-
文件处理:
- 资源文件中包含enc加密文件
- 需要解密该文件并上传
-
加密流程:
- 使用魔改SM4算法加密
- 轮密钥生成过程有修改
- 32轮迭代
- 额外异或了TEA的delta常量
- 最后进行Base64编码
- 使用魔改SM4算法加密
-
解密步骤:
- 首先解Base64
- 编写魔改SM4解密脚本
- 注意轮密钥生成和异或delta的修改
- 再次解Base64得到图片文件
- 上传解密后的图片获取flag
3. 加密算法分析
3.1 RC4魔改分析
-
修改点:
- S盒生成仅使用i变量
- 加密时将异或操作改为加法操作
-
解密方法:
- 逆向实现修改后的RC4算法
- 注意密钥替换逻辑(初始为假密钥,onPageShow时替换为"OHCTF2026")
3.2 Base64魔改分析
- 明显的换表逻辑
- 需要识别并使用正确的编码表进行解码
3.3 RSA分析
- 参数:
- e = 7
- N = 75067(可直接分解)
- 分解结果:
- p = 271
- q = 277
- 计算私钥d:
- φ(N) = (p-1)(q-1) = 270276
- d ≡ e⁻¹ mod φ(N)
4. 工具推荐
-
反编译工具:
- jadx-dev-all(推荐)
- 其他反编译工具可能存在不完整反编译问题
-
因数分解工具:
- yafu(适用于小N值分解)
-
分析工具:
- IDA Pro(用于分析.so文件)
- DevEco Studio模拟器(用于运行测试程序)
5. 解题技巧总结
-
文件格式识别:
- HAP文件实际上是ZIP格式
- 加密文件可能隐藏在资源文件中
-
加密算法识别:
- 注意标准算法的修改点(如RC4、SM4的修改)
- 关注密钥替换逻辑
-
逆向分析:
- 优先分析明显的验证逻辑
- 关注交叉引用和函数调用关系
-
密码学攻击:
- 小N值的RSA可直接分解
- 魔改算法需要仔细分析修改点
-
数据提取:
- 注意字节序问题(小端/大端)
- 使用合适工具提取密文数据
通过以上详细分析,可以系统性地解决OpenHarmony CTF中的逆向工程题目,特别是针对各种魔改加密算法的识别和解密。