面向 APK/AAB 流水线的 Android 加固工具包,提供 Rust 打包器、DEX/native payload 加密与壳运行时引导。
静态预览图: docs/prototype.png
English README | GUI 使用说明 | 最新发布
- 以目标 APK 作为最终基底,尽量保留原始资源与 Manifest。
- 将
classes*.dex与lib/**/*.so打包加密为统一 payload,并在运行时解密加载。 - 同时支持 CLI 自动化(CI/CD)与桌面 GUI 操作(Tauri)。
- 安装依赖:Python 3、Rust、JDK 17+、
apktool、Android build-tools(apksigner)。 - 执行加固:
python3 pack.py --target /path/to/your/app.apk --output protected.apk
- 安装并验证输出 APK。未传签名参数时,CrabShell 会使用 debug keystore 自动签名。
| 维度 | 状态 | 说明 |
|---|---|---|
| 输入格式 | APK ✅ / AAB |
AAB 能力取决于 bundletool 转换链路和目标应用兼容性。 |
| Android 运行时 | API 24+ ✅ | API 26+ 使用内存 DEX 加载(InMemoryDexClassLoader)。 |
| 签名 | Debug 自动签名 ✅ / 自定义签名 ✅ | 支持 --no-sign 交给外部流程签名。 |
| 桌面 GUI 打包 | macOS/Linux/Windows ✅ | 由 .github/workflows/release.yml 构建。 |
- AES-256-GCM 加密:每次构建生成随机 32 字节密钥,加密原始 DEX 与 native 库。
- Gen 2 内存加载:Android 8.0+(API 26+)使用
InMemoryDexClassLoader从内存直接加载 DEX,不落盘。 - 旧系统兼容:Android 7.x(API 24/25)自动回退到文件加载模式。
- Multi-DEX 支持:自动处理多 DEX 应用。
- Native 库保护:加密并隐藏
.so,仅在运行时按需解密到受保护缓存目录。 - 基础反调试:JNI 层调试器检测(如
TracerPid)。 - 一键自动化:
pack.py统一处理密钥生成、构建、打包、签名。
项目主要由两部分组成:
-
Packer(主机侧):Rust + Python 流程。
- 以目标 APK 作为最终基底(保留原资源与 Manifest)。
- 将目标
classes*.dex与lib/**/*.so加密为assets/kapp_payload.bin。 - 注入 bootstrap loader dex 与
libshell.so。 - 重新签名输出 APK。
-
Shell(Android 侧):壳应用与运行时加载器。
- 使用标准 Android 入口(
Application.attachBaseContext)。 - 加载 Rust native 库(
libshell.so)。 - 从
assets/kapp_payload.bin定位并解密 payload。 - 在运行时加载原应用代码。
- 使用标准 Android 入口(
- Rust:安装 Rust
- Android NDK:用于构建 shell 的 native 库。
- 推荐版本:NDK 26.x
- 安装
cargo-ndk:cargo install cargo-ndk - 添加目标:
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
- Python 3:用于自动化脚本。
- JDK 17+:用于 Android Gradle 构建。
- apktool:用于目标 Manifest 补丁与重建。
- Android build-tools:
apksigner(必需),zipalign(推荐)。
不想每次都传完整参数时,可创建 kapp-config.json:
{
"target": "my-app.apk",
"output": "protected.apk",
"keystore": "release.jks",
"ks_pass": "password",
"key_alias": "alias",
"no_sign": false
}然后执行:
python3 pack.py- 构建镜像:
docker build -t crabshell .- 运行打包:
docker run --rm -v $(pwd):/app -v /path/to/my-app.apk:/target.apk crabshell \
python3 pack.py --target /target.apk --output /app/protected.apk- 克隆仓库:
git clone https://github.com/kexuejin/crabshell.git
cd crabshell- 执行打包:
python3 pack.py --target /path/to/your/app.apk --output protected.apk首次执行会编译 Rust 与 Gradle 工程,耗时可能较长。
- 指定签名(可选):
python3 pack.py \
--target app.apk \
--keystore my-release-key.jks \
--ks-pass pass:secret \
--key-alias my-alias若未提供签名参数,脚本默认使用 Android debug keystore(~/.android/debug.keystore)自动签名;若不存在会自动生成。
- 跳过签名(可选):
python3 pack.py --target app.apk --output protected.apk --no-sign未签名 APK 通常无法直接安装到设备。
- 构建 Packer:
cd packer && cargo build --release- 构建 Shell:
cd loader/app/src/main/rust
cargo ndk -t arm64-v8a -t armeabi-v7a -o ../jniLibs build --release
cd ../../../..
./gradlew assembleRelease工作流文件:.github/workflows/build.yml
core-build(Ubuntu):运行verify.sh,验证非 GUI 主流程(packer + loader)。gui-package(矩阵):在桌面三平台构建 Tauri GUI 并上传产物:- macOS:
CrabShell.app+CrabShell_*.dmg - Linux:
.deb+.AppImage - Windows:
.msi+ NSIS.exe
- macOS:
release.yml(GUI 发布流程):- tag 触发:
v* - 或手动触发:
workflow_dispatch(参数:tag、prerelease) - 发布
.dmg、.deb、.AppImage、.msi、.exe到 GitHub Releases - 发布资产命名为:
CrabShell-<tag>-<original-file-name>
- tag 触发:
本工具仅用于学习与研究。请勿用于非法用途。作者不对任何滥用行为负责。
MIT License,详见 LICENSE。
