移动应用逆向:APK 与 IPA
Android 的 APK 和 iOS 的 IPA 是两大移动应用分发格式,对其逆向分析在安全研究、合规检测和产品分析方面有重要价值。
一、APK 文件结构
APK(Android Package Kit)本质是 ZIP 压缩包,包含以下核心文件:classes.dex(Dalvik Executable)包含编译后的 Dalvik/ART 字节码;AndroidManifest.xml(二进制 XML)声明权限、组件和配置;resources.arsc 是编译后的资源索引表;lib/ 目录存放原生库(armeabi-v7a、arm64-v8a、x86);META-INF/ 目录包含签名信息。APK 使用 apksigner 进行 JAR 签名,V2/V3 签名方案覆盖整个 APK 文件。
二、Android 逆向工具
APKTool 是目前最常用的 APK 逆向工具,可以反编译 AndroidManifest.xml 和资源文件,将 classes.dex 反编译为 smali 汇编代码。JADX 可以直接将 classes.dex 反编译为 Java 源代码,输出可读性高。dex2jar 将 DEX 字节码转换为 JAR 格式,配合 JD-GUI 查看 Java 源码。Frida 对 Android 的动态插桩支持完善,可以 Hook Java 和 Native 层方法。Objection 是 Frida 封装的运行时探索工具。
三、iOS IPA 结构
IPA(iOS App Store Package)同样是 ZIP 压缩包。Payload/ 目录包含 .app 应用包,其中包含 Mach-O 可执行文件、Info.plist(元数据配置)、CodeResources(代码签名)、embedded.mobileprovision(配置文件)和资源文件。Mach-O 文件是 iOS 逆向的主要目标,使用 ARM64 指令集。IPA 使用 Apple 的 FairPlay DRM 加密,实际逆向的是解密后的应用二进制文件。
四、iOS 逆向工具
iOS 逆向需要越狱设备或开发签名。越狱工具(unc0ver、Checkra1n)提供 root 访问权限。dumpdecrypted 或 frida-ios-dump 从内存中 dump 解密后的 IPA。class-dump 提取 Objective-C 运行时头文件信息。Hopper Disassembler 和 IDA Pro 支持 ARM64 反汇编和反编译。Theos 提供越狱开发工具链,用于编写 Tweak(通过 Cydia Substrate 或 Substitute Hook 任意方法)。
五、混淆与防护
移动应用普遍采用混淆和加固技术。Android 方面,ProGuard/R8 重命名类和方法为无意义短名;DexGuard 增加控制流混淆和字符串加密;企业级加固(360、腾讯加固)对 DEX 文件整体加壳,在运行时脱壳执行。iOS 方面,LLVM Obfuscator 提供控制流扁平化和指令替换。应对方案:对于加固 APK,先使用脱壳工具(Frida-Dump、DexHunter)从内存中 dump 原始 DEX;对于混淆,通过模式匹配和运行时追踪还原函数功能。
六、安全检测合规
移动应用逆向在合规检测中应用广泛:检测敏感权限声明与实际使用的一致性;验证 HTTPS 证书校验是否被绕过(SSL Pinning);检查是否存在硬编码密钥和 Token;检测第三方 SDK 的数据收集行为;验证本地数据存储安全性(SharedPreferences、SQLite 明文存储)。逆向工程在合法合规框架下为移动应用安全提供了重要保障手段。