写一篇小笔记,记录一下第一次脱壳并逆向修改安卓应用的过程,为了避免麻烦,这里不会有被我逆向应用的信息。
为了把一个应用使用的一个库换成opencv,我这个连java都不会写的人硬着头皮消耗了一个月,甚至整个春节假期在做这个事情。
首先需要的一个工具是apktool [https://github.com/iBotPeaches/Apktool],它的作用是把应用安装包apk文件中的各个部分提取出来,变成一个apktool项目目录,且修改完之后我们也需要用它打包回apk。
以下是用ai生成的一个apktool反编译后目录的结构,另外此次逆向修改过程中也大量使用了ai,不然以我这第一次认识这些东西的知识储备,还得更久才能弄好。
your_app/ ├── AndroidManifest.xml # 应用主配置文件,声明组件、权限、包名等 ├── apktool.yml # APKTool 元数据,记录 SDK 版本、资源 ID 偏移、压缩规则等,用于重打包 ├── smali/ # 主 DEX 反编译出的 Dalvik 字节码(.smali),对应 Java/Kotlin 逻辑,如果没有选择反编译资源的话,则不会有这个目录,取而代之的是classes.dex文件 │ └── com/example/... # 按原始包名组织的类文件 ├── smali_classes2/ # (若存在)第二个 DEX 文件的 smali 代码,用于 multidex 应用 ├── smali_classes3/ # (若存在)第三个 DEX,依此类推 ├── res/ # 编译后的资源目录,已还原为可读 XML │ ├── layout/ # 界面布局文件(.xml) │ ├── values/ # 字符串(strings.xml)、颜色(colors.xml)、样式(styles.xml)等 │ └── drawable-*/ # 图片资源,按屏幕密度分类(如 drawable-xhdpi) ├── assets/ # (可选)原始资产目录,内容不被编译,通过 AssetManager 访问(如 .json、.db) ├── lib/ # (可选)原生库目录,包含 .so 文件 │ ├── arm64-v8a/ # 64 位 ARM 架构原生库 │ └── armeabi-v7a/ # 32 位 ARM 架构原生库(其他架构如 x86 等也可能存在) ├── original/ # (可选)原始 APK 中的 META-INF 目录,含签名文件(重打包时通常会被替换) └── [resources.arsc] # (注:此文件在反编译后不直接出现,其内容已解析并融入 res/ 目录中)
要修改应用的逻辑,则需要修改各个smali目录下的smali文件,这些是反编译出来的字节码文件。 继续阅读安卓应用脱壳逆向笔记