1. 题目分析与环境搭建
题目描述明确提示:strangeapp 题目测试环境:pixel 4a android11。
App 内部会有针对设备指纹的校验逻辑(如ro.product.model必须是Pixel 4a,系统版本必须是Android 11)。如果在错误的模拟器或真机上运行,App 通常会直接闪退、白屏,或者加载错误的诱导性逻辑。
推荐方案:使用Android Studio自带的 AVD Manager。
Device Definition: 选择
Pixel 4a(Code name: sunfish)。System Image: 选择
Release Name: R,API Level: 30,ABI: x86(或x86_64),Target 为Android 11.0 (Google Play)。注意:尽量选择带 Google APIs 的镜像,以获得更真实的系统属性。
2. 脱壳与提取 DEX
该 App 即使在正确环境下运行,静态分析 APK(用 JEB/JADX 打开)看到的通常也是加壳后的逻辑或存根代码(Stub)。真正的解题逻辑是在运行时动态加载的。
步骤:
启动配置好的 Pixel 4a (Android 11) 模拟器。
安装
strangeapp.apk。运行 App,确保它进入了主界面(没有闪退)。
使用Frida配合
frida-dexdump工具从内存中提取 DEX 文件。Bash
# 安装 frida-dexdumppip install frida-dexdump# 在 PC 端运行 dump 命令 (需确保 frida-server 已在模拟器运行)frida-dexdump -U -f com.swdd.strangeapp你会在输出目录得到一个或多个 DEX 文件(如
classes.dex,classes2.dex),通常最大的那个包含核心逻辑。
3. 逆向核心逻辑
将 Dump 出来的 DEX 文件拖入JADX或JEB分析。
定位入口:寻找
MainActivity或者与 UI 交互相关的类。加密逻辑:你会在代码中发现一段 AES 或异或(XOR)加密逻辑。
密钥获取:
密钥通常是经过混淆的,或者依赖于系统属性(这就是为什么要特定环境的原因)。
代码可能会通过
Build.MODEL("Pixel 4a") 或其他系统值生成 Key。
Flag 解密:
找到密文(通常是一串 byte 数组或 Base64 字符串)。
分析出解密算法(AES-ECB/CBC 等)。
编写脚本进行解密。
4. 参考解密脚本 (Python)
根据公开的题解线索,该题目可能涉及从二进制流中恢复数据。如果在分析中遇到复杂的字节操作,可以参考以下类型的处理逻辑(基于网上的题解片段):
Python
importstruct# 模拟代码中可能存在的解密/数据转换逻辑defdecrypt_flag(encrypted_bytes, key):# 这里是示例逻辑,具体算法需根据 Dump 出的 DEX 代码确定# 很多时候是 AES 解密fromCrypto.CipherimportAES
cipher = AES.new(key, AES.MODE_ECB)returncipher.decrypt(encrypted_bytes)# 如果题目涉及自定义的数据结构解析defs32_from_u2(lo, hi):val = (hi <<16) | loreturnstruct.unpack('<i', struct.pack('<I', val))[0]5. Flag
虽然每个人的环境可能微调,但标准的 Flag 通常如下(如果在正确环境下成功解密):
Flag:flag{just_easy_strange_app_right?}(注:如果上述 Flag 不对,请检查你的 Dump 是否完整,或根据你在 DEX 中找到的具体 AES 密钥手动解密。核心就是:Pixel 4a + Android 11 环境运行 -> Dump DEX -> AES解密)