hackThacker/awesome-reverse-engineering

GitHub: hackThacker/awesome-reverse-engineering

一个展示如何通过逆向工程和Smali字节码注入技术,将老旧的安卓应用成功现代化并兼容至Android 16的完整实战项目。

Stars: 0 | Forks: 0

<<<<<<< HEAD # Vedabase Android 现代化项目 本项目主要针对旧版 **Vedabase** Android 应用进行了成功的逆向工程、现代化和补丁应用,确保其与最新的 Android 版本(最高至 Android 16)完全兼容。 ## 🚀 主要成就 ### 1. 现代化 Android 兼容性 (API 34+) * **Target SDK 更新:** 应用的 `targetSdkVersion` 已更新至 **33** (Android 13)。这在提供现代系统性能的同时,避开了 API 34 严格的运行时接收器限制,从而确保了在 Android 14、15 和 16 上的稳定性。 * **架构:** 确认应用逻辑为纯 Java,这使其原生兼容所有现代 ARM64-v8a 设备。 ### 2. 分区存储与数据库修复 * **问题:** 在 Android 11+ 上,旧版文件访问受到限制。无法通过绝对路径读取 1.1GB 的 `.ivd` 文件。 * **发现:** 分析表明,**`.ivd` 格式实际上是一个标准的 SQLite 数据库**。 * **精准补丁:** 将 Dalvik 字节码 注入到 `MainActivity.onCreate` 中。应用现在会自动检测是否运行在 Android 11+ 上,并提示用户授予**“所有文件访问权限”** (`MANAGE_EXTERNAL_STORAGE`),从而保留了原有的高性能渲染管线。 ### 3. 欢迎界面现代化 为了提供更简洁的用户体验,欢迎界面的字符串已直接在 Smali 源文件 (`u.smali`) 中进行了更新: * **更新头部:** 与 `Intro001.htm` 中的现代介绍文本相匹配。 * **移除旧版链接:** 删除了失效的故障排除和说明部分。 * **新底部文本:** * **文字:** "This apk is modified For the latest devices upto android 16" * **署名:** "modified by:" (已链接至 GitHub) * **URL:** `https://github.com/hackthacker` ## 📂 项目结构 * `vedabase_latest_clean.apk`:最终已签名、对齐且可用于生产的 APK。 * `decompiled_apk/`:完整且已打补丁的源项目(Smali + 资源)。 * `tools/`:所需的实用工具 (`Apktool`, `uber-apk-signer`)。 * `BUILD-GUIDE.md`:用于重新构建项目的分步命令指南。 * `INSTALL-FIX-REPORT.md`:安装错误的详细技术诊断报告。 * `README-Reverse-Engineering.md`:发现阶段的技术文档。 ## 🛠️ 重新构建项目 要从修改后的源代码构建 APK,请运行以下命令(详见 `BUILD-GUIDE.md`): 1. **编译:** `java -jar tools\apktool.jar b decompiled_apk -o vedabase_latest_clean.apk` 2. **签名与对齐:** `java -jar tools\uber-apk-signer.jar --apks vedabase_latest_clean.apk --allowResign --overwrite` ## ✅ 最终状态 # 该项目已**100% 成功**。应用能够正常安装,请求必要的权限,并在最新的 Android 硬件设备上完美渲染 Vedabase 的内容。
# 📖 Android 逆向工程与现代化

License Stars Forks Issues


这是什么为什么有这个仓库SDK 变更涵盖主题使用工具构建环境设置如何重新构建适用对象仓库状态许可证支持

## 📋 目录 - [这是什么](#-what-is-this) - [为什么有这个仓库](#-why-this-repo) - [SDK 版本变更](#-sdk-version-changes) - [涵盖主题](#-topics-covered) - [使用工具](#-tools-used) - [构建环境设置](#-build-environment-setup) - [如何重新构建](#-how-to-rebuild) - [适用对象](#-who-is-this-for) - [仓库状态](#-repo-stats) - [许可证](#-license) - [支持](#-support) ## 🔍 这是什么 这款 **Android** 应用是一个庞大的离线吠陀经典阅读器,构建在一个 **1.1 GB 专有的 `.ivd` 数据库文件**之上。该应用最初发布时针对的是 **Android 4.3 Jelly Bean (API 18)**,由于三个复合性问题——分区存储的强制执行、未签名 APK 的拒绝安装以及已弃用的文件 I/O API——导致该应用在现代 Android 版本上完全无法运行。 本项目完全在 **Smali (Dalvik 字节码)** 层面对 APK 进行了**端到端逆向工程**。无需反编译的 Java 源代码。我们将精准的补丁注入到了 `MainActivity.onCreate` 中,更新了 `AndroidManifest.xml` 中的权限声明,并直接在 `.smali` 文件中使欢迎界面的字符串现代化——最终生成了一个完全签名、zipaligned(对齐处理)且可用于生产的 APK,能够在 **Android 16 (API 35)** 上完美运行。 ### 🧠 核心发现 在分析过程中,我们发现专有的 `.ivd` 文件格式实际上是一个被重命名了扩展名的**标准 SQLite 数据库**。这消除了对任何自定义解析器的需求,并允许原封不动地保留现有的高性能渲染管线。 ## 💡 为什么有这个仓库 | # | 问题 | 根本原因 | 实施的解决方案 | |---|---|---|---| | 1 | 在 Android 11+ 上启动时应用直接崩溃 | 分区存储强制执行机制阻止了所有旧式 `File()` 绝对路径读取 | 通过 Smali 将 `MANAGE_EXTERNAL_STORAGE` 运行时权限请求注入到 `MainActivity.onCreate` 中 | | 2 | 1.1 GB `.ivd` 数据库完全无法读取 | 操作系统阻止了在 API 30+ 上通过旧式绝对路径进行访问 | 逆向工程了 `.ivd` 格式,确认其为标准 SQLite;修补了文件访问路径解析 | | 3 | APK 拒绝在现代设备上安装 | 包未签名,被 API 26+ 的 Android 包管理器拒绝 | 使用 `apksigner` 进行签名(v1 + v2 方案)+ 使用 Android Build Tools 34.0.0 进行 zipaligned 对齐处理 | | 4 | `targetSdkVersion` 严重过时 | 原始 API 18 会触发导致不稳定的旧版兼容性垫片机制 | 更新至 `targetSdkVersion 33` 获得现代运行时行为,同时避开严格的 API 34 限制 | | 5 | 欢迎界面布满失效链接 | 在 `.smali` 内的 `const-string` 值中硬编码了旧版故障排除 URL | 重写了所有受影响的 `const-string` 条目——更整洁的头部、移除了死链、添加了署名信息 | | 6 | ARM64 兼容性未知 | 源架构未作说明 | 确认为纯 Java 逻辑——零原生 `.so` 库——原生兼容所有 ARM64-v8a 设备 | ## 📱 SDK 版本变更 | 属性 | 原始 APK | 修改后的 APK | |---|---|---| | **Min SDK 版本** | `14` Android 4.0 Ice Cream Sandwich | `14` 保留(维持最大设备覆盖范围) | | **Target SDK 版本** | `18` Android 4.3 Jelly Bean | `33` Android 13 Tiramisu | | **编译 SDK** | 未知 / API 19 之前版本的构建工具链 | Build Tools `34.0.0` | | **最高兼容至** | Android 4.3(在 Android 5.0+ 上实际已失效) | ✅ **Android 16 (API 35)** 已全面验证 | | **原生库** | 仅 ARMv7 | 无需——纯 Java,支持所有 ABI | | **APK 签名方案** | 未签名 | 通过 `apksigner` 采用的 v1 (JAR) + v2 (APK 签名块) 方案 | | **存储权限** | 未声明 | 在 API 30+ 上运行时请求 `MANAGE_EXTERNAL_STORAGE` | ## 📚 涵盖主题 - 使用 **APKTool** 进行 Android APK 结构分析与反编译 - **Smali / Dalvik 字节码** 读取、理解操作码以及编写精准补丁 - **Scoped Storage (API 30+)** 运行时 `MANAGE_EXTERNAL_STORAGE` 注入到现有字节码中 - 专有文件格式逆向工程——识别出隐藏在 `.ivd` 中的 **SQLite** - 跨 Android API 代的 `targetSdkVersion` 和 `minSdkVersion` 策略 - 使用 `apksigner` 进行 APK **签名**(v1 + v2 签名方案) - 使用 `zipalign` 进行 APK **对齐**,以优化内存映射 I/O - 使用 `keytool` 生成调试 **keystore** - 使用 **JADX** 进行 Java 源码反编译和交叉参考 - 多版本 Android 兼容性测试(Android 11 到 16) - Smali 字符串修补——`const-string`、`\n`、`\'` 转义序列、多行格式化 - `AndroidManifest.xml` 权限和 SDK 属性修改 - 通过直接进行 Smali 和资源修补来实现欢迎界面 UI 的现代化 - 使用 `apksigner verify` 验证 APK ## 🛠️ 使用工具 | 工具 | 版本 | 用途 | 下载 | |---|---|---|---| | **APKTool** | `v2.10.0` | 反编译 APK -> Smali + XML 资源;重新编译回未签名的 APK | [apktool_2.10.0.jar](https://github.com/iBotPeaches/Apktool/releases/download/v2.10.0/apktool_2.10.0.jar) | | **uber-apk-signer** | `v1.3.0` | 一条命令完成 APK 签名和 zipalign;支持 v1/v2/v3 方案 | [uber-apk-signer-1.3.0.jar](https://github.com/patrickfav/uber-apk-signer/releases/download/v1.3.0/uber-apk-signer-1.3.0.jar) | | **JADX** | `v1.5.0` | 将 APK 反编译为可读的 Java 源码,用于静态分析和交叉参考 | [jadx-1.5.0.zip](https://github.com/skylot/jadx/releases/download/v1.5.0/jadx-1.5.0.zip) | | **apksigner** | `Build Tools 34.0.0` | 具有精确 v1/v2 方案控制的底层 APK 签名工具 | 包含在 Android Build Tools 中 | | **zipalign** | `Build Tools 34.0.0` | 将 APK 条目对齐在 4 字节边界上,以提升运行时内存效率 | 包含在 Android Build Tools 中 | | **Android SDK Manager** | `cmdline-tools r11` | 安装和管理 Android Build Tools 及平台组件 | [commandlinetools-linux](https://developer.android.com/tools/sdkmanager) | | **keytool** | `JDK 21.0.9 LTS` | 生成用于 APK 签名的 RSA-2048 调试 keystore | 包含在 JDK 中 | | **OpenJDK** | `21.0.9 LTS` | APKTool、uber-apk-signer、apksigner 和 keytool 的运行环境 | [adoptium.net](https://adoptium.net/temurin/releases/?version=21) | | **Zed Editor** | 最新版 | 用于修改 Smali 字节码和 XML 资源的主要编辑器 | [zed.dev](https://zed.dev/) | | **Android Studio** | 最新版 | 模拟器测试、ADB 设备管理和 logcat 调试 | [developer.android.com/studio](https://developer.android.com/studio) | ## ⚙️ 构建环境设置 在 **Ubuntu 22.04 / Debian** 或 **Windows 上的 WSL2** 上的完整环境设置。 ### 第 1 步 安装 Java 21 LTS ``` sudo apt-get update && sudo apt-get install -y wget unzip curl # 安装 OpenJDK 21 sudo apt-get install -y openjdk-21-jdk # 验证 java -version # 预期:java version "21.0.9" 2025-10-21 LTS ``` ### 第 2 步 下载 APKTool v2.10.0 ``` # 下载 APKTool wrapper 脚本 wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool \ -O /usr/local/bin/apktool chmod +x /usr/local/bin/apktool # 下载 APKTool JAR v2.10.0 wget https://github.com/iBotPeaches/Apktool/releases/download/v2.10.0/apktool_2.10.0.jar \ -O /usr/local/bin/apktool.jar chmod +x /usr/local/bin/apktool.jar # 验证 apktool --version # 预期:2.10.0 ``` ### 第 3 步 下载 uber-apk-signer v1.3.0 ``` wget https://github.com/patrickfav/uber-apk-signer/releases/download/v1.3.0/uber-apk-signer-1.3.0.jar \ -O /usr/local/bin/uber-apk-signer.jar # 验证 java -jar /usr/local/bin/uber-apk-signer.jar --version # 预期:uber-apk-signer v1.3.0 ``` ### 第 4 步 下载 JADX v1.5.0(用于静态分析) ``` wget https://github.com/skylot/jadx/releases/download/v1.5.0/jadx-1.5.0.zip \ -O /tmp/jadx.zip unzip /tmp/jadx.zip -d /opt/jadx export PATH="/opt/jadx/bin:${PATH}" # 验证 jadx --version # 预期:1.5.0 ``` ### 第 5 步 安装 Android 命令行工具和 Build Tools 34 ``` wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip \ -O /tmp/cmdline-tools.zip mkdir -p /opt/android-sdk/cmdline-tools unzip /tmp/cmdline-tools.zip -d /opt/android-sdk/cmdline-tools mv /opt/android-sdk/cmdline-tools/cmdline-tools \ /opt/android-sdk/cmdline-tools/latest # 接受许可并安装 Build Tools 34 yes | /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager "build-tools;34.0.0" # 添加到 PATH export PATH="/opt/android-sdk/build-tools/34.0.0:${PATH}" # 验证 zipalign --version apksigner --version ``` ### 第 步 生成调试 Keystore ``` keytool -genkey -v \ -keystore debug.keystore \ -storepass android \ -alias androiddebugkey \ -keypass android \ -keyalg RSA \ -keysize 2048 \ -validity 10000 \ -dname "CN=Android Debug,O=Android,C=US" ``` ## 🔨 如何重新构建 在环境设置完成且 `decompiled_apk/` 目录包含所有已应用的补丁后: ### 方案 A 使用 uber-apk-signer(推荐——一条命令即可完成签名和对齐) ``` # 步骤 1:将 Smali + 资源重新编译回未签名的 APK apktool b decompiled_apk -o vedabase_unsigned.apk # 步骤 2:在单个命令中进行签名和 Zipalign java -jar /usr/local/bin/uber-apk-signer.jar \ --apks vedabase_unsigned.apk \ --allowResign \ --overwrite # 输出:vedabase_unsigned-aligned-signed.apk ``` ### 方案 B 手动使用 apksigner + zipalign(精细化控制) ``` # 步骤 1:重新编译 apktool b decompiled_apk -o app-unaligned.apk # 步骤 2:Zipalign zipalign -p -f 4 app-unaligned.apk app-aligned.apk # 步骤 3:使用显式的 v1 + v2 方案进行签名 apksigner sign \ --ks debug.keystore \ --ks-pass pass:android \ --v1-signing-enabled true \ --v2-signing-enabled true \ app-aligned.apk # 步骤 4:验证签名 apksigner verify --verbose app-aligned.apk ``` ### 安装到设备 ``` adb install app-aligned.apk # 或用于重新安装 adb install -r app-aligned.apk ``` ## 🎯 适用对象 ``` ✅ Android reverse engineers studying real-world Smali patching ✅ Security researchers analyzing legacy APK structures and storage patterns ✅ Devotees requiring Vedabase to run on Android 11, 12, 13, 14, 15, or 16 ✅ Developers learning scoped storage migration without Java source access ✅ Students studying APK decompilation, bytecode injection, and re-signing ✅ Engineers learning the full APKTool → patch → sign → verify pipeline ✅ Anyone studying proprietary file format identification (SQLite inside .ivd) ❌ Not for commercial redistribution of the patched APK ❌ Not a replacement for the official Vedabase platform or website ❌ Not for bypassing DRM, copy protection, or proprietary licensing ``` ## 📊 仓库状态

Last Commit Repo Size Top Language Java Version APKTool uber-apk-signer JADX Build Tools

## 📄 许可证 本项目基于 **MIT License** 授权——详见 [LICENSE](LICENSE) 文件了解详情。
标签:Android 16兼容, Android适配, Android逆向, APK修改, APK反编译, APP破解, Dalvik字节码, JS文件枚举, MANAGE_EXTERNAL_STORAGE, Scoped Storage, Smali注入, SQLite数据库, 二进制分析, 云安全运维, 云资产清单, 代码剖析, 内核监控, 后端开发, 安卓开发, 目录枚举, 移动安全, 系统底层, 软件现代化, 逆向工程