吾爱破解论坛2024春节解题领红包之Android题
字数 1705 2025-08-22 12:23:00

Android逆向分析入门教学:从吾爱破解2024春节解题实践

一、Android逆向基础准备

1.1 工具准备

  • MT管理器/NP管理器:用于查看APK文件结构、修改smali代码、查看文件内容等
  • Jadx:将APK反编译为Java代码,便于分析逻辑
  • Android设备或模拟器:用于安装和测试修改后的APK

1.2 基础分析步骤

  1. 检查APK是否加固(本题两个APK均无加固)
  2. 查看包名、签名等基本信息
  3. 安装APK并了解基本功能逻辑
  4. 使用Jadx反编译查看源码

二、初级题一:圈小猫游戏分析

2.1 题目概述

  • 游戏目标:围堵小猫使其无法移动
  • 成功条件:围堵成功后播放视频并显示flag

2.2 静态分析

  1. MainActivity分析

    • 主界面使用WebView加载本地HTML文件(file:///android_asset/index.html)
    • 游戏逻辑主要在HTML和JavaScript中实现
  2. 关键函数分析

    • extractDataFromFile(String filePath):从视频文件中提取flag数据
    • 调用时机:视频播放完成后(OnCompletionListener)
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        YSQDActivity.this.tv.setText(YSQDActivity.extractDataFromFile(YSQDActivity.this.filePath));
    }
});

2.3 解题方法

方法一:直接提取flag

  1. 定位视频文件路径:/data/data/<package_name>/files/目录下
  2. 使用MT管理器以文本方式打开MP4文件
  3. 搜索flag{格式字符串直接获取flag

方法二:修改游戏难度

  1. 修改HTML文件中的initialWallCount参数(如从默认值改为80)
  2. 增加初始障碍物数量,使围堵小猫更容易
  3. 成功围堵后触发视频播放和flag显示

方法三:绕过游戏逻辑(未成功)

  1. 尝试修改smali代码,改变调用YSQDActivity的条件
  2. 修改if-eq p1, v0判断条件或删除判断
  3. 本方法未成功,因涉及更复杂的调用逻辑

三、初级题二:抽奖游戏分析

3.1 题目概述

  • 游戏机制:等待时间积累"宝石",10个宝石可抽奖一次
  • 90抽保底出金(flag)
  • 出题者提示:诚实等待抽奖可获得flag

3.2 静态分析

  1. 关键代码逻辑
    • 未修改APK时进入honest分支,较容易抽中flag
    • flag存储在静态字节数组o
public static byte[] o = {86, -18, 98, 103, 75, -73, 51, -104, 104, 94, 73, 81, 125, 118, 112, 100, -29, 63, -33, -110, 108, 115, 51, 59, 55, 52, 77};
  1. flag生成机制
    • 需要验证APK签名信息
    • 修改APK后签名验证失败,即使抽中也会得到错误flag

3.3 解题方法

方法一:诚实等待

  1. 不修改APK,等待积累足够宝石
  2. 进行抽奖,90抽内必出flag
  3. 这是最简单有效的方法

方法二:修改初始资源(不推荐)

  1. 修改WishActivity中的初始宝石数量
    • 找到0xa(十六进制10)改为更大值
  2. 虽然可以快速抽奖,但因签名验证失败无法获取正确flag

方法三:直接解析flag

  1. 将字节数组o转换为字符串
  2. 注意处理负值(Java字节范围为-128~127)
  3. 示例转换代码:
byte[] o = {86, -18, 98, 103, 75, -73, 51, -104, 104, 94, 73, 81, 125, 118, 112, 100, -29, 63, -33, -110, 108, 115, 51, 59, 55, 52, 77};
String flag = new String(o, StandardCharsets.UTF_8);
System.out.println(flag);

四、逆向技巧总结

4.1 常见分析点

  1. 资源文件:HTML、图片、视频等可能包含关键信息
  2. 字符串搜索:直接搜索flag{等格式字符串
  3. 网络权限:无网络权限的APK通常flag存储在本地
  4. 关键监听器:如OnCompletionListener等事件触发点

4.2 修改技巧

  1. smali修改

    • 定位关键判断语句(如if-eq
    • 修改或删除判断条件
    • 需重新编译签名APK测试效果
  2. 资源修改

    • 修改HTML/XML中的初始参数
    • 修改图片等资源文件

4.3 注意事项

  1. 签名验证机制可能导致修改后功能异常
  2. 动态加载的资源可能需要运行时分析
  3. 简单的题目往往flag直接存储在代码或资源中

五、扩展学习

5.1 推荐学习资源

  • 吾爱破解《安卓逆向这档事》教程系列
  • Jadx、MT管理器官方文档
  • smali语法学习资料

5.2 进阶方向

  1. 加固APK的分析与脱壳
  2. 动态调试技术(Frida、Xposed等)
  3. 原生库(so文件)逆向分析
  4. 协议分析与加密算法逆向

通过这两个初级题目的实践,可以掌握Android逆向分析的基本流程和方法,为进一步学习更复杂的逆向技术打下坚实基础。

Android逆向分析入门教学:从吾爱破解2024春节解题实践 一、Android逆向基础准备 1.1 工具准备 MT管理器/NP管理器 :用于查看APK文件结构、修改smali代码、查看文件内容等 Jadx :将APK反编译为Java代码,便于分析逻辑 Android设备或模拟器 :用于安装和测试修改后的APK 1.2 基础分析步骤 检查APK是否加固(本题两个APK均无加固) 查看包名、签名等基本信息 安装APK并了解基本功能逻辑 使用Jadx反编译查看源码 二、初级题一:圈小猫游戏分析 2.1 题目概述 游戏目标:围堵小猫使其无法移动 成功条件:围堵成功后播放视频并显示flag 2.2 静态分析 MainActivity分析 : 主界面使用WebView加载本地HTML文件( file:///android_asset/index.html ) 游戏逻辑主要在HTML和JavaScript中实现 关键函数分析 : extractDataFromFile(String filePath) :从视频文件中提取flag数据 调用时机:视频播放完成后( OnCompletionListener ) 2.3 解题方法 方法一:直接提取flag 定位视频文件路径: /data/data/<package_name>/files/ 目录下 使用MT管理器以文本方式打开MP4文件 搜索 flag{ 格式字符串直接获取flag 方法二:修改游戏难度 修改HTML文件中的 initialWallCount 参数(如从默认值改为80) 增加初始障碍物数量,使围堵小猫更容易 成功围堵后触发视频播放和flag显示 方法三:绕过游戏逻辑(未成功) 尝试修改smali代码,改变调用YSQDActivity的条件 修改 if-eq p1, v0 判断条件或删除判断 本方法未成功,因涉及更复杂的调用逻辑 三、初级题二:抽奖游戏分析 3.1 题目概述 游戏机制:等待时间积累"宝石",10个宝石可抽奖一次 90抽保底出金(flag) 出题者提示:诚实等待抽奖可获得flag 3.2 静态分析 关键代码逻辑 : 未修改APK时进入 honest 分支,较容易抽中flag flag存储在静态字节数组 o 中 flag生成机制 : 需要验证APK签名信息 修改APK后签名验证失败,即使抽中也会得到错误flag 3.3 解题方法 方法一:诚实等待 不修改APK,等待积累足够宝石 进行抽奖,90抽内必出flag 这是最简单有效的方法 方法二:修改初始资源(不推荐) 修改 WishActivity 中的初始宝石数量 找到 0xa (十六进制10)改为更大值 虽然可以快速抽奖,但因签名验证失败无法获取正确flag 方法三:直接解析flag 将字节数组 o 转换为字符串 注意处理负值(Java字节范围为-128~127) 示例转换代码: 四、逆向技巧总结 4.1 常见分析点 资源文件 :HTML、图片、视频等可能包含关键信息 字符串搜索 :直接搜索 flag{ 等格式字符串 网络权限 :无网络权限的APK通常flag存储在本地 关键监听器 :如 OnCompletionListener 等事件触发点 4.2 修改技巧 smali修改 : 定位关键判断语句(如 if-eq ) 修改或删除判断条件 需重新编译签名APK测试效果 资源修改 : 修改HTML/XML中的初始参数 修改图片等资源文件 4.3 注意事项 签名验证机制可能导致修改后功能异常 动态加载的资源可能需要运行时分析 简单的题目往往flag直接存储在代码或资源中 五、扩展学习 5.1 推荐学习资源 吾爱破解《安卓逆向这档事》教程系列 Jadx、MT管理器官方文档 smali语法学习资料 5.2 进阶方向 加固APK的分析与脱壳 动态调试技术(Frida、Xposed等) 原生库(so文件)逆向分析 协议分析与加密算法逆向 通过这两个初级题目的实践,可以掌握Android逆向分析的基本流程和方法,为进一步学习更复杂的逆向技术打下坚实基础。