吾爱破解论坛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 基础分析步骤
- 检查APK是否加固(本题两个APK均无加固)
- 查看包名、签名等基本信息
- 安装APK并了解基本功能逻辑
- 使用Jadx反编译查看源码
二、初级题一:圈小猫游戏分析
2.1 题目概述
- 游戏目标:围堵小猫使其无法移动
- 成功条件:围堵成功后播放视频并显示flag
2.2 静态分析
-
MainActivity分析:
- 主界面使用WebView加载本地HTML文件(
file:///android_asset/index.html) - 游戏逻辑主要在HTML和JavaScript中实现
- 主界面使用WebView加载本地HTML文件(
-
关键函数分析:
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
- 定位视频文件路径:
/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中
- 未修改APK时进入
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};
- flag生成机制:
- 需要验证APK签名信息
- 修改APK后签名验证失败,即使抽中也会得到错误flag
3.3 解题方法
方法一:诚实等待
- 不修改APK,等待积累足够宝石
- 进行抽奖,90抽内必出flag
- 这是最简单有效的方法
方法二:修改初始资源(不推荐)
- 修改
WishActivity中的初始宝石数量- 找到
0xa(十六进制10)改为更大值
- 找到
- 虽然可以快速抽奖,但因签名验证失败无法获取正确flag
方法三:直接解析flag
- 将字节数组
o转换为字符串 - 注意处理负值(Java字节范围为-128~127)
- 示例转换代码:
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 常见分析点
- 资源文件: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逆向分析的基本流程和方法,为进一步学习更复杂的逆向技术打下坚实基础。