ISCC 练武初赛re+mobile wp
字数 2110 2025-08-29 22:41:02

ISCC Mobile CTF 逆向工程实战教学文档

1. 邦布出击 (APK逆向分析)

1.1 题目分析

  • 安装APK后,点击右下角按钮进入图鉴界面
  • 需要百度各种邦布种类并逐个尝试

1.2 解题步骤

  1. 获取Base64加密文本

    • 通过尝试不同邦布种类,可获得三段Base64编码的文本
    • 参考资源:绝区零WIKI_BWIKI
  2. Base64解码

    • 将三段Base64拼接后,循环解码三次
    • 得到明文(SQLCipher加密密钥)
  3. 数据库解密

    • 解压APK获取db文件
    • 使用SQLCipher解密,密钥为之前获得的明文
    • 注意:flag是假信息,关键在key和info中的"blowfish"提示
  4. Blowfish解密

    • 使用JADX反编译APK
    • 找到密文并通过Blowfish解密,得到DES加密的明文
  5. DES加密验证

    • APK逻辑:DES加密结果需与输入内容(去掉flag格式)匹配
    • 已知:明文、key和加密方式
    • IV获取方法:
      • 方法一:分析so文件中的IV生成逻辑(复杂)
      • 方法二:使用Frida hook native函数getiv输出IV

2. Mobile Detective (Native函数分析)

2.1 题目分析

  • 关键函数:stringFromJNI(native函数)
  • 使用IDA分析so文件中的xorEncrypt函数

2.2 加密流程

  1. 字符串转十六进制
  2. 输入与key异或后转为字符串
  3. 每4字符提取前2字符
  4. 按特定规律打乱字符串位置
  5. 替换特定位置字符

3. HolyGrail (Checkbox顺序破解)

3.1 题目分析

  • 多个checkbox,点击后在userSequence添加资源名称
  • 需按特定顺序点击才能进入验证flag页面

3.2 解题步骤

  1. 获取正确顺序

    • 通过百度或AI获取checkbox点击顺序
    • 使用Frida hook获取每个checkbox的参数
  2. 获取密文

    • 通过Frida hook传入特定顺序参数,输出返回密文
  3. 验证flag流程

    • 检查flag格式
    • 调用validateFlag方法:
      • getEncryptionKey
      • vigenereEncrypt
      • processWithNative(JNI函数)
      • b.a
  4. 解密思路

    • 使用Frida hook processWithNative函数
    • 发现字符加密结果与顺序无关
    • 生成所有字符加密结果进行匹配

4. WhereIsFlag (Native函数逆向)

4.1 解题步骤

  1. 解压APK获取so文件(lib/arm64-v8a)
  2. 使用IDA64打开,查找Java_开头的native函数
  3. 加密函数逻辑:
    • 输入倒序
    • 根据字符表查找输入字符(需动态调试获取)
    • 索引转换时有固定偏移(2)
  4. 从JADX获取目标密文(如iB3A7kSISR)

5. 小游戏 (XXTEA算法分析)

5.1 题目分析

  • 包含exe和两个txt(非打印字符)
  • txt内容实为函数二进制数据

5.2 解题步骤

  1. 动态调试,在关键点下断点
  2. 分析汇编代码,识别XXTEA算法
  3. 解密方法:
    • 手动分析解密逻辑编写代码
    • 或使用AI辅助
  4. 识别:
    • 较短常量为key
    • 较长常量为密文

6. 复杂加密 (手动分析技巧)

6.1 题目分析

  • raw文件包含JFIF文件头(图片)
  • 解密后得压缩包(含exe和enc文件)

6.2 解题方法

  1. 直接分析法

    • 忽略与输入无关的语句和函数
    • 对修改输入的语句下断点
  2. 加密函数分析

    • switch逻辑对奇偶索引字符做不同变换
    • 核心变量:v4(索引)和v5(控制case)
    • 通过v4&1判断奇偶
  3. 逆向解密

    • 原逻辑:flag.txt → exe加密 → enc
    • 现需从enc逆向flag

7. Faze (C++逆向技巧)

7.1 解题方法

  1. 断点法

    • 在sprintf下断点,查看目标字符串内容
    • 或在operator==下断点,查看比较数据
  2. 直接查看

    • 目标字符串在用户输入前已初始化
    • 跳转到rcx地址查看内容

8. Greeting (加密算法逆向)

8.1 加密逻辑

  1. 计算偏移:

    • 整数除法i/5
    • 等价于i%5
    • 最终偏移为0、1、2、3、4循环
  2. 加密操作:

    • 异或(i+0x5a)
    • 循环左移计算出的偏移量

8.2 解密脚本编写

  1. 对每个字节:
    • 先循环右移
    • 再异或(i+0x5a)
  2. 密文位置:0x014001B390

通用工具与技巧

  1. 反编译工具

    • JADX:APK反编译
    • IDA:so文件分析
    • pyinstxtractor:PyInstaller打包程序解包
  2. 动态分析工具

    • Frida:hook native函数
    • 动态调试器(IDA、GDB)
  3. 加密算法识别

    • 常见算法特征(XXTEA、Blowfish、DES等)
    • 动态调试获取关键参数
  4. 逆向思维

    • 从加密流程逆向解密流程
    • 关注数据流和控制流
    • 善用交叉引用和字符串搜索

本教学文档涵盖了ISCC Mobile CTF中多个逆向工程题目的详细解题思路和方法,重点包括APK逆向、native函数分析、加密算法识别与逆向、动态调试技巧等内容,可作为移动安全逆向工程的学习参考。

ISCC Mobile CTF 逆向工程实战教学文档 1. 邦布出击 (APK逆向分析) 1.1 题目分析 安装APK后,点击右下角按钮进入图鉴界面 需要百度各种邦布种类并逐个尝试 1.2 解题步骤 获取Base64加密文本 : 通过尝试不同邦布种类,可获得三段Base64编码的文本 参考资源:绝区零WIKI_ BWIKI Base64解码 : 将三段Base64拼接后,循环解码三次 得到明文(SQLCipher加密密钥) 数据库解密 : 解压APK获取db文件 使用SQLCipher解密,密钥为之前获得的明文 注意:flag是假信息,关键在key和info中的"blowfish"提示 Blowfish解密 : 使用JADX反编译APK 找到密文并通过Blowfish解密,得到DES加密的明文 DES加密验证 : APK逻辑:DES加密结果需与输入内容(去掉flag格式)匹配 已知:明文、key和加密方式 IV获取方法: 方法一:分析so文件中的IV生成逻辑(复杂) 方法二:使用Frida hook native函数getiv输出IV 2. Mobile Detective (Native函数分析) 2.1 题目分析 关键函数:stringFromJNI(native函数) 使用IDA分析so文件中的xorEncrypt函数 2.2 加密流程 字符串转十六进制 输入与key异或后转为字符串 每4字符提取前2字符 按特定规律打乱字符串位置 替换特定位置字符 3. HolyGrail (Checkbox顺序破解) 3.1 题目分析 多个checkbox,点击后在userSequence添加资源名称 需按特定顺序点击才能进入验证flag页面 3.2 解题步骤 获取正确顺序 : 通过百度或AI获取checkbox点击顺序 使用Frida hook获取每个checkbox的参数 获取密文 : 通过Frida hook传入特定顺序参数,输出返回密文 验证flag流程 : 检查flag格式 调用validateFlag方法: getEncryptionKey vigenereEncrypt processWithNative(JNI函数) b.a 解密思路 : 使用Frida hook processWithNative函数 发现字符加密结果与顺序无关 生成所有字符加密结果进行匹配 4. WhereIsFlag (Native函数逆向) 4.1 解题步骤 解压APK获取so文件(lib/arm64-v8a) 使用IDA64打开,查找Java_ 开头的native函数 加密函数逻辑: 输入倒序 根据字符表查找输入字符(需动态调试获取) 索引转换时有固定偏移(2) 从JADX获取目标密文(如iB3A7kSISR) 5. 小游戏 (XXTEA算法分析) 5.1 题目分析 包含exe和两个txt(非打印字符) txt内容实为函数二进制数据 5.2 解题步骤 动态调试,在关键点下断点 分析汇编代码,识别XXTEA算法 解密方法: 手动分析解密逻辑编写代码 或使用AI辅助 识别: 较短常量为key 较长常量为密文 6. 复杂加密 (手动分析技巧) 6.1 题目分析 raw文件包含JFIF文件头(图片) 解密后得压缩包(含exe和enc文件) 6.2 解题方法 直接分析法 : 忽略与输入无关的语句和函数 对修改输入的语句下断点 加密函数分析 : switch逻辑对奇偶索引字符做不同变换 核心变量:v4(索引)和v5(控制case) 通过v4&1判断奇偶 逆向解密 : 原逻辑:flag.txt → exe加密 → enc 现需从enc逆向flag 7. Faze (C++逆向技巧) 7.1 解题方法 断点法 : 在sprintf下断点,查看目标字符串内容 或在operator==下断点,查看比较数据 直接查看 : 目标字符串在用户输入前已初始化 跳转到rcx地址查看内容 8. Greeting (加密算法逆向) 8.1 加密逻辑 计算偏移: 整数除法i/5 等价于i%5 最终偏移为0、1、2、3、4循环 加密操作: 异或(i+0x5a) 循环左移计算出的偏移量 8.2 解密脚本编写 对每个字节: 先循环右移 再异或(i+0x5a) 密文位置:0x014001B390 通用工具与技巧 反编译工具 : JADX:APK反编译 IDA:so文件分析 pyinstxtractor:PyInstaller打包程序解包 动态分析工具 : Frida:hook native函数 动态调试器(IDA、GDB) 加密算法识别 : 常见算法特征(XXTEA、Blowfish、DES等) 动态调试获取关键参数 逆向思维 : 从加密流程逆向解密流程 关注数据流和控制流 善用交叉引用和字符串搜索 本教学文档涵盖了ISCC Mobile CTF中多个逆向工程题目的详细解题思路和方法,重点包括APK逆向、native函数分析、加密算法识别与逆向、动态调试技巧等内容,可作为移动安全逆向工程的学习参考。