Clock-Skew/Cyrus

GitHub: Clock-Skew/Cyrus

将 Metasploit 反弹 shell payload 自动注入第三方 Android APK 的模块化 Bash 工作流。

Stars: 10 | Forks: 2

# Cyrus ![Cyrus 终端演示](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/268be319cb094039.gif) [![Shell](https://img.shields.io/badge/Shell-Bash-4EAA25?style=for-the-badge&logo=gnubash&logoColor=white)](https://www.gnu.org/software/bash/) [![平台](https://img.shields.io/badge/Platform-Linux-FCC624?style=for-the-badge&logo=linux&logoColor=111111)](https://www.linux.org/) [![Android](https://img.shields.io/badge/Target-Android-3DDC84?style=for-the-badge&logo=android&logoColor=white)](https://developer.android.com/) [![Apktool](https://img.shields.io/badge/APK-Reverse_Engineering-FF6F00?style=for-the-badge)](https://apktool.org/) [![Metasploit](https://img.shields.io/badge/Metasploit-Framework-2596CD?style=for-the-badge)](https://www.metasploit.com/) [![Java](https://img.shields.io/badge/Runtime-Java-ED8B00?style=for-the-badge&logo=openjdk&logoColor=white)](https://openjdk.org/) **Cyrus** 是一个基于 Linux 的 Android APK 安全实验工作流,用于授权测试和研究。它将一系列常见的 Android 评估任务封装到一个菜单驱动的 Bash 界面中:反编译 APK,生成受控的 Android Meterpreter payload,将 payload 组件合并到反编译的 APK 中,重新构建未签名的工件,并启动匹配的 Metasploit handler。 该项目有意保持小巧且便于审查。每个主要操作都位于 `modules/` 下的独立 shell 模块中,因此工作流可以被审计、修改或分步运行,而不会隐藏底层工具的使用情况。 ## 目录 - [Cyrus 的功能](#what-cyrus-does) - [安全与授权](#safety-and-authorization) - [仓库结构](#repository-layout) - [工作流如何协同工作](#how-the-workflow-fits-together) - [要求](#requirements) - [设置](#setup) - [用法](#usage) - [输出](#outputs) - [为重新构建的 APK 签名](#signing-the-rebuilt-apk) - [网络与 Handler 说明](#network-and-handler-notes) - [故障排除](#troubleshooting) - [当前限制](#current-limitations) - [致谢](#credits) ## Cyrus 的功能 Cyrus 自动化了授权的 Android APK payload 实验中重复的机械操作: - 扫描 `APPS/` 中的 APK 文件,并使用 `apktool` 反编译选定的目标。 - 使用操作者提供的 `LHOST` 和 `LPORT` 值生成 Metasploit Android payload APK。 - 反编译生成的 payload,并将 `com/metasploit/stage` smali 包复制到目标 APK 树中。 - 当 payload manifest 中的权限不存在于目标 manifest 时,将其合并到目标 manifest 中。 - 将 payload 服务和启动接收器组件添加到目标 manifest 中。 - 尝试修补目标启动器 activity,以便在找到兼容的 smali 结构时,从 `onCreate()` 启动 payload 服务。 - 可选择将 payload 包从 `com/metasploit` 重命名为经过验证的 `com/` 命名空间。 - 将修改后的 APK 重新构建到 `output/unsigned.apk`。 - 从菜单中启动匹配的 Metasploit multi-handler。 - 提供清理操作以重置生成的输出。 Cyrus **不**会签名 APK、安装 Android 平台工具、安装 Metasploit、安装 `apktool`、生成 keystore,也不保证 payload 能在所有 Android 版本或应用结构上执行。 ## 安全与授权 仅在您可以明确证明已获授权的环境中 Cyrus: - 个人实验室设备 - 内部拥有的测试应用程序 - 培训靶场 - 经授权的渗透测试 - 漏洞赏金目标(确切的测试活动在范围内且被允许) 在使用 Cyrus 之前,请确认: - APK 和设备归您所有或已明确批准用于测试 - Android 设备与 handler 之间的网络路径已获授权 - 生成的工件不会在测试环境之外分发 - 任何发现均通过适当的内部、客户或程序流程进行报告 本仓库仅用于教育和防御性安全研究。您有责任遵守当地法律、程序规则、客户协议和平台政策。 ## 仓库结构 ``` Cyrus/ ├── APPS/ # User-created input directory for test APKs ├── output/ # Generated working directory, rebuilt artifacts, payload files ├── modules/ │ ├── decompile.sh # APK selection and apktool decompile step │ ├── generate_payload.sh # msfvenom Android payload generation │ ├── inject.sh # smali copy, manifest merge, launcher hook attempt │ ├── encode.sh # package rename / smali namespace rewrite │ ├── rebuild.sh # apktool rebuild to output/unsigned.apk │ ├── metasploit.sh # Metasploit handler launch │ ├── cleanup.sh # output directory reset │ ├── antivirus_killer.sh # legacy/experimental module, not loaded by cyrus.sh │ └── obfuscapk.sh # local Obfuscapk integration draft, not loaded by cyrus.sh ├── cyrus.sh # Main interactive menu ├── Con2.gif # Demo animation retained for the project README ├── preview.png # Static preview asset └── Screenshot From 2025-10-09 12-27-13.png ``` 在刚克隆的仓库中可能不存在 `APPS/` 和 `output/`。Cyrus 会自动创建 `output/`。当您准备好添加实验 APK 时,请创建 `APPS/`。 ## 工作流如何协同工作 Cyrus 是对成熟外部工具的封装,而不是自定义的 Android 构建系统。 | 阶段 | 菜单操作 | 主模块 | 主要外部工具 | 结果 | | --- | --- | --- | --- | --- | | 1 | 反编译 APK | `modules/decompile.sh` | `apktool` | 目标 APK 解压至 `output/decompiled_apk/` | | 2 | 生成 Payload | `modules/generate_payload.sh` | `msfvenom` | Payload APK 写入 `output/payload.apk` | | 3 | 注入 Payload | `modules/inject.sh` | `apktool`, shell 工具 | Payload smali 和 manifest 条目合并至目标树 | | 4 | 混淆 Payload | `modules/encode.sh` | shell 工具 | `com/metasploit` 引用重命名为 `com/` | | 5 | 重新构建 APK | `modules/rebuild.sh` | `apktool`, Java 运行时 | 未签名的 APK 写入 `output/unsigned.apk` | | 6 | 启动 Metasploit | `modules/metasploit.sh` | `msfconsole` | 启动使用选定的主机/端口的匹配 handler | | 7 | 清理 | `modules/cleanup.sh` | shell 工具 | 删除并重新创建生成的输出 | 该工作流有意设计为顺序执行。除非您正在调试特定阶段,否则请按顺序运行这些步骤。 ## 要求 Cyrus 专为 Linux 环境(例如 Kali、Debian、Ubuntu 或类似发行版)设计。 必需的命令行工具: - `bash` - `apktool` - `java` - `msfvenom` - `msfconsole` - `find`、`awk`、`sed`、`grep`、`cp`、`mv` 以及标准的 GNU/Linux shell 实用工具 推荐的运行时版本: - OpenJDK 11 或 17 - Kali/Debian 当前打包的 Metasploit Framework - Apktool 2.8.x 或更新版本 验证您的环境: ``` apktool -version java -version msfvenom --version msfconsole --version ``` ## 设置 克隆仓库: ``` git clone git@github.com:Clock-Skew/Cyrus.git cd Cyrus ``` 如果需要,使启动器可执行: ``` chmod +x cyrus.sh ``` 为实验 APK 创建输入目录: ``` mkdir -p APPS ``` 将授权的测试 APK 放入 `APPS/`。 启动 Cyrus: ``` ./cyrus.sh ``` ## 用法 从上到下使用菜单: 1. `反编译 APK` 2. `生成 Payload` 3. `注入 Payload` 4. `混淆 Payload (smali 重命名)` 5. `重新构建 APK (未签名)` 6. `启动 Metasploit` 7. `清理` 8. `退出` 推荐的操作者流程: 1. 将一个已授权的 APK 添加到 `APPS/`。 2. 运行 `./cyrus.sh`。 3. 反编译该 APK 并确认已创建 `output/decompiled_apk/`。 4. 使用设备可访问的 `LHOST` 和选定的 `LPORT` 生成 payload。 5. 将 payload 注入到反编译的 APK 中。 6. 可选择使用小写后缀(例如 `cyrus_lab`)重命名 payload 包。 7. 重新构建 APK。 8. 使用您自己的签名工作流对生成的 `output/unsigned.apk` 进行签名。 9. 启动 handler,仅在授权环境中进行测试。 ## 输出 常见生成路径: ``` output/ ├── decompiled_apk/ # Decompiled target APK tree ├── payload.apk # Generated Android payload APK ├── payload_smali/ # Decompiled payload APK tree └── unsigned.apk # Rebuilt unsigned target APK ``` 生成的输出是一次性的。使用清理菜单选项可以在全新运行之前重置工作区。 ## 为重新构建的 APK 签名 Cyrus 在生成 `output/unsigned.apk` 后停止。Android 通常在安装前需要已签名的 APK。 使用适合您实验的签名工作流。如果工具和 keystore 已存在,示例命令如下: ``` apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey \ --ks-pass pass:android --key-pass pass:android output/unsigned.apk apksigner verify output/unsigned.apk ``` 传统的 `jarsigner` 工作流可能在较旧的测试条件下有效,但 `apksigner` 是首选的 Android 签名工具。 ## 网络与 Handler 说明 生成的 payload 和 handler 之间的 `LHOST` 和 `LPORT` 必须一致。 对于局域网内测试: - 使用主机的局域网 IP 作为 payload 的 `LHOST` - 在启动 Metasploit handler 时使用相同的 `LPORT` - 确认 Android 测试设备能在该端口访问主机 对于路由或 VPN 实验测试: - 使用 Android 测试设备从其网络位置可以访问的地址 - 考虑防火墙规则、NAT、VPN 路由和端口转发 - 如果 payload 回调地址发生更改,请重新生成 payload 保持 handler 的暴露范围尽可能小,测试结束后不要让监听器继续运行。 ## 故障排除 ### 没有列出 APK 创建 `APPS/` 并在其中至少放置一个 `.apk` 文件。 ``` mkdir -p APPS ``` ### 依赖检查失败 在继续之前安装或修复缺失的工具。Cyrus 会在启动期间报告缺失的 `apktool`、`msfvenom` 或 `java`,但不会为您安装软件包。 ### 注入失败,因为 payload 文件缺失 按顺序运行步骤。`注入 Payload` 需要: - `output/decompiled_apk/AndroidManifest.xml` - `output/payload.apk` ### 因 manifest 错误导致重新构建失败 从干净的输出树开始并重新运行工作流。XML 合并问题通常是由不兼容的 manifest 状态或之前的部分运行引起的。 ### 包重命名后因 smali 错误导致重新构建失败 使用安全的包后缀: - 小写字母 - 数字 - 下划线 - 不能以数字开头 示例:`cyrus_lab` ### Handler 启动但没有出现会话 请检查: - 从 Android 测试设备可以访问 payload 的 `LHOST` - payload 的 `LPORT` 与 handler 端口匹配 - 主机防火墙允许所选端口上的入站流量 - 应用在安装后已启动 - 测试设备和主机处于预期的网络路径上 ## 当前限制 - Cyrus 不会为重新构建的 APK 签名。 - Cyrus 不安装依赖项。 - Cyrus 不保证与每个 APK、Android 版本、资源表或启动器 activity 结构兼容。 - 启动器自动启动补丁有意跳过某些 smali 模式,而不是强行进行不安全的编辑。 - `antivirus_killer.sh` 是旧版/实验性的,且未被 `cyrus.sh` 加载。 - `obfuscapk.sh` 是一个带有机器特定路径的本地集成草稿,且未被 `cyrus.sh` 加载。 - 目前未包含正式的自动化测试套件。 ## 开发说明 该项目是刻意保持简单的 Bash 脚本。在进行更改时: - 保持模块小巧可读 - 保留清晰的前置条件检查 - 避免隐藏有助于故障排除的工具输出 - 将生成的文件保留在 `output/` 下 - 避免提交 APK、payload、keystore、私人客户端文件或生成的工件 提交前有用的检查: ``` bash -n cyrus.sh modules/*.sh git status --short ``` ## 致谢 - 灵感来源于 dana-at-cp 的 [`backdoor-apk`](https://github.com/dana-at-cp/backdoor-apk)。 - 建立在 iBotPeaches 及其贡献者的 [Apktool](https://apktool.org/) 之上。 - 使用了 Rapid7 和社区的 [Metasploit Framework](https://www.metasploit.com/) 工具。 - 感谢更广泛的 Android 逆向工程和安全研究生态系统。 ## 许可证 目前未包含许可证文件。在添加许可证之前,默认保留所有权利。
标签:Android安全, Apktool, APK反编译, APK渗透, Cyrus, JS文件枚举, Linux工具, Meterpreter, Shell脚本, 云资产清单, 反取证, 后门生成, 嗅探欺骗, 安全评估, 应用安全, 数据展示, 权限维持, 目录枚举, 移动安全, 移动端后门, 端口探测, 红队, 网络控制, 逆向工程