APK去广告编辑器(ApkAdRemoverEditor)开源声明
APK Ad Remover Editor · Open Source Declaration
一款面向逆向爱好者的专业级 APK 去广告 + 过签工具,基于 dexlib2 构建,采用字节码直接修补方案。 全程本地离线运行,不依赖任何云端服务,支持一键完成 解包 → 去广告 → 过签 → 体积优化 → 打包 → 签名 全流程。
一、项目信息
| 项目 | 信息 |
|---|---|
| 项目名称 | APK去广告编辑器(ApkAdRemoverEditor) |
| 当前版本 | v3.1(versionCode 31) |
| 开发语言 | Kotlin + Java |
| 运行平台 | Android 7.0+(minSdk 24) |
| 处理方式 | 全程本地离线处理,无需联网 |
| 开源协议 | MIT License(详见 LICENSE) |
| 版权声明 | © 2026 sillycat,保留所有权利 |
| 仓库地址 | https://github.com/sillycats/ApkAdRemoverEditor |
二、功能特性
2.1 过签能力(v3.0 新增)
- MT 管理器式 KillerApplication 注入过签:注入含 12 个内部类的钩子类为独立 DEX,改写目标应用 Application 父类,运行时反射替换
PackageInfo.CREATOR回填原包签名,覆盖绝大多数 Java 层签名校验 - 双模式过签:普通去除(仅注入钩子覆盖 Java 层校验)/ 原包去除(增强,额外嵌入
origin.apk+ 原生库,覆盖磁盘 APK 重新读取签名的原生层校验) - SO 智能注入:自动识别目标 APK 的 ABI 架构,仅写入已存在的目录(arm64-v8a / armeabi-v7a 等);无 lib 目录则全架构写入(含 x86 / x86_64)
- 钩子类名可自定义:KillerApplication 名称自由修改,内置 12 个内部类基于 dexlib2 自动同步重命名,避免特征被检测
- 注入参数全面可自定义:原包路径 / 解压路径 / So库名 / 钩子类名 / 签名信息 / 入口名称,留空自动读取真实值
- 不触碰业务方法:相比”置空校验方法”方案,不依赖脆弱的关键词/指纹臆测,不产生字节码置空导致的启动卡死,过签强度与 MT 管理器一致
- 崩溃防护:钩子 DEX 注入与 Application 父类改写均采用备份 + 原子写回 + 异常自动恢复
2.2 去广告核心能力
- 一键处理:解包、去广告、打包、签名全流程自动化,本地离线处理,无需网络
- 字节码直接修补:基于 dexlib2 直接修改 DEX 字节码,处理速度远超传统 smali 流程
- 18 类广告特征覆盖:SDK 库 / 权限 / 类 / 方法 / 资源 / URL / View / Activity / Service / Receiver 等,可自定义增删改查与一键重置
- AXML 深度处理:移除广告组件、广告权限声明、隐藏 Res 布局广告 View
- 方法级精准处理:广告类方法置空、广告链接置空、View 几何置空
- 会员功能解锁:强制返回 true/false,解锁会员功能并屏蔽广告判定逻辑
- 广告资源清理:自动清理广告 SDK 原生库 (.so)、assets 广告资源与根目录广告文件,精简包体
- Flutter 应用适配:解析 Dart AOT 快照并抹除 libapp.so 中的广告字符串特征
2.3 体积优化能力
- 数据复用优化:过签包(如 LSPatch 产物)复用原包数据段,最多减小约 50% 体积
- 重命名识别:原包被重命名为无后缀或任意后缀(如 assets/base、assets/base.dat)也能准确识别并复用优化
- DEX 体积优化:移除调试信息(行号/局部变量表),再减小 5%~15% 体积
- 智能压缩策略:大文件单次读取边读边算 CRC,消除重复 I/O
- ZIP 对齐:保证打包后 APK 可正常安装启动
2.4 稳定性与安全
- v1 + v2 双签名:兼容低版本设备,处理结果可直接安装
- DEX 崩溃防护:备份保护 + 原子写入 + 异常自动恢复,杜绝 DEX 损坏
- 低内存扫描:大 DEX 低内存安全扫描,超大 DEX 也能稳定处理不卡死
- 路径穿越防护:修复 Zip Slip 漏洞,杜绝恶意 APK 越界写文件
- 解压大小上限:防止恶意压缩包撑爆磁盘
2.5 使用体验
- 实时彩色日志:处理过程可视化,支持一键复制 / 清空
- Markdown 处理报告:自动生成,记录各阶段处理明细与体积对比
- 自动导出:处理完成自动导出到原包目录,并自动清理缓存
- 广告特征订阅:支持订阅导入与分享,快速同步更多去广告规则
- 内置更新弹窗:含进度条、百分比、版本号与文件大小
- 明暗双主题:跟随系统、白天、夜间三种模式自由切换
三、技术架构
| 模块 | 技术方案 | 核心说明 |
|---|---|---|
| DEX 修补引擎 | dexlib2 2.5.2 | 直接修改字节码,无需反汇编/回汇编 |
| 签名效验去除 | KillerApplication 注入 | MT 式钩子注入 + Application 父类改写 + 反射回填原包签名 |
| AXML 处理器 | 自研解析器 | 解析 AXML chunk 结构,移除广告组件与权限 |
| 数据复用优化 | ApkDataMultiplexing | 中央目录偏移复用原包数据段 |
| 签名模块 | apksig + V2V3SchemeSigner | v1/v2 双签名,优化后专用签名 |
| Flutter 适配 | Dart AOT 快照解析 | 抹除 libapp.so 广告字符串特征 |
| 打包模块 | 自研 ZIP 引擎 | 智能压缩 + 对齐 + 崩溃防护 |
四、核心原理解析
4.1 过签原理(KillerApplication 注入)
去除签名效验采用 MT 管理器式 KillerApplication 注入方案,而非”置空校验方法”:
- 钩子注入:把样本中的 KillerApplication 钩子类(含 12 个内部类)以独立 classesN.dex 注入目标 APK;
- 父类改写:改写目标应用 Application 的父类为 KillerApplication(按优先级选择 MultiDexApplication / 自定义 Application / 其他继承 Application 的类,兜底改写清单 application name);
- 运行时覆盖:应用启动时框架先加载 KillerApplication,其
<clinit>立即执行,用反射替换PackageInfo.CREATOR为自定义 Parcelable.Creator,使所有经 Parcel 反序列化的 PackageInfo 在返回给应用前被回填原包签名,同时清空 PackageManager 缓存,Android 9+ 通过 Unsafe + HiddenApiBypass 解除隐藏 API 限制; - 原包模式增强:额外嵌入
assets/SignatureKiIIer/origin.apk与原生库,使”从磁盘 APK 重新读取签名”(getPackageArchiveInfo / 原生校验)同样被覆盖。
相比”置空校验方法”,本方案不依赖脆弱的关键词/指纹臆测,不触碰被测应用任何业务方法,不产生字节码置空导致的启动卡死问题,过签强度与 MT 管理器一致。
4.2 数据复用优化原理
过签包(如 LSPatch 产物)在 assets/base.apk 内置原包,过签包中与原包完全相同的文件(res 目录、lib 目录等)会重复存储一份。优化时让过签包中央目录的数据偏移指向原包内的数据段,删除重复数据段,从而显著减小体积(最多约 50%)。
4.3 DEX 体积优化原理
DEX 的 debug info 段(行号、局部变量表、参数名)仅用于崩溃堆栈定位与调试器,运行时完全不需要。通过重建方法体并置空 debug items,dexlib2 写回时对应数据段被丢弃,可减小 5%~15% 体积,不影响运行功能。
4.4 重命名识别原理
按 ZIP 魔数(PK\x03\x04 等)识别嵌套子包,而非依赖文件后缀名。因此原包被重命名为无后缀或任意后缀(如 assets/base、assets/base.dat)时,仍能准确识别其 ZIP 容器结构并执行数据复用优化。
五、开源项目致谢
本应用基于以下开源项目构建并调用,在此向各位作者表示诚挚感谢与敬意:
| # | 项目 | 作者/组织 | 用途 | 协议 |
|---|---|---|---|---|
| 1 | ApkDataMultiplexing | L-JINBIN | APK 数据复用优化核心算法,已移植 DataMultiplexing / ZipMaker / ZipFile / V2V3SchemeSigner | 未标注许可证,仅供学习参考 |
| 2 | dexlib2 / smali / baksmali | JesusFreke | DEX 文件读写与 smali 反汇编/汇编工具链,去广告核心引擎 | BSD 3-Clause |
| 3 | apksig | AOSP | APK v1/v2/v3 签名实现,保证处理结果可安装 | Apache License 2.0 |
| 4 | BouncyCastle | bcprov/bcpkix | Java 加解密与证书生成库,用于生成签名证书 | MIT License |
| 5 | Guava | Java 集合与工具库,提供 dexlib2 所需的不可变集合 | Apache License 2.0 | |
| 6 | AndroidX | AOSP | core-ktx / appcompat / constraintlayout / recyclerview / lifecycle / coordinatorlayout | Apache License 2.0 |
| 7 | Material Components | Material Design 组件库,提供卡片、按钮、对话框等 UI 组件 | Apache License 2.0 | |
| 8 | Kotlin 标准库 | JetBrains | Kotlin 编程语言与标准库 | Apache License 2.0 |
| 9 | DTL-X | Gameye98 | 广告类名 / 方法名 / URL 特征规则参考来源,仅供特征参考与学习,未修改其二进制 | 仅供学习参考 |
| 10 | AAPT2 | AOSP | Android 资源编译与打包工具,用于 AXML / 资源处理 | Apache License 2.0 |
| 11 | ApkSignatureKillerEx | L-JINBIN | 过签核心参考:bin.mt.signature.KillerApplication 钩子类(含 12 个内部类)与 libSignatureKiIIer.so 原生库的来源项目,演示 MT 去除签名校验原理及其对抗方式 |
未标注许可证,仅供学习参考 |
以上项目的完整版权与许可文本,请访问对应主页查看。
六、参考内容与代码出处
本应用的实现过程中参考了以下公开的技术文档、开源教程与社区逆向资料,在此一并致谢,并说明出处:
6.1 过签(KillerApplication 注入去签名效验)
- 过签核心参考 L-JINBIN 开源项目 ApkSignatureKillerEx:
bin.mt.signature.KillerApplication钩子类(含 12 个内部类)与libSignatureKiIIer.so原生库即来源于该项目,其演示了 MT 去除签名校验功能的原理及一种对抗方式 - 主页: https://github.com/L-JINBIN/ApkSignatureKillerEx
- 原理参考:通过注入钩子 Application 改写父类,运行时反射替换
PackageInfo.CREATOR回填原包签名,覆盖 Java 层与原生层签名校验 - 钩子类重命名基于 dexlib2 的 DexRewriter / TypeRewriter 实现,参考 dexlib2 官方示例
- 过签包结构思路参考 LSPatch 项目: https://github.com/LSPosed/LSPatch
- 仅供学习研究,最终实现均为本项目自研
6.2 DEX 直接修补方案(基于 dexlib2)
- 参考 Facebook 曾开源的 android-dexdump 思路,以及 dexlib2 官方示例
- dexlib2 主页: https://github.com/JesusFreke/smali
- 借鉴其 API 文档与示例用法,自行实现广告类/方法/字符串的定位与改写
6.3 AXML 二进制格式解析(Android Asset Packaging)
- 参考 AOSP 的 XmlPullParser 与 AXML 二进制格式说明
- 出处: https://android.googlesource.com/platform/frameworks/base/+/core/res/
- 依据 AXML chunk 头、资源表 StringPool/ResourceMap 结构与公共逆向资料编写
6.4 Dart AOT 快照解析(Flutter libapp.so)
- 参考 Dart VM 源码 snapshot.h 与社区 Flutter 逆向资料
- snapshot.h 出处: https://github.com/dart-lang/sdk/blob/main/runtime/vm/snapshot.h
- 用于定位 libapp.so 内 Dart 快照头并提取/抹除广告字符串
6.5 广告特征规则整理
- 广告 SDK 包名 / 域名 / 类名关键词参考开源项目 DTL-X 的规则整理扩充
- 主页: https://github.com/Gameye98/DTL-X
- 参考其 adloader / 域名黑名单 / 方法关键词思路,结合主流广告 SDK 自行整理
6.6 APK v1 / v2 签名与对齐
- 参考 apksig 官方实现与 Android 文档中关于 ZIP alignment 的说明
- apksig: https://android.googlesource.com/platform/tools/apksig
- ZIP alignment: https://developer.android.com/studio/command-line/zipalign
6.7 数据复用优化(过签包体积优化)
- 参考 L-JINBIN 的 ApkDataMultiplexing 项目与 LSPatch 过签包结构
- 主页: https://github.com/L-JINBIN/ApkDataMultiplexing
- 思路来源: LSP 技术团队(过签包 + IO 重定向对抗整包校验)
- 原理: 通过中央目录数据偏移复用原包数据段,删除重复数据段实现体积优化
- 已移植其 DataMultiplexing / ZipMaker / ZipFile / V2V3SchemeSigner 实现
6.8 界面主题与排版
- 基于 Material Design 规范与 Material Components 组件库示例编写
- 规范: https://m3.material.io/
- 组件: https://github.com/material-components/material-components-android
以上内容仅作技术学习参考,最终实现均为本项目自研;涉及版权归原作者与作者所属机构所有。
七、编译环境
开发环境:
- Android Studio(建议最新稳定版)
- JDK 17+
- compileSdk 34 / minSdk 24 / targetSdk 34
核心依赖:
- dexlib2 2.5.2(DEX 字节码操作)
- apksig 8.1.0(APK 签名)
- BouncyCastle 1.70(证书生成)
- Guava 27.1-android(不可变集合)
构建命令:
./gradlew assembleRelease
八、使用指南
8.1 操作步骤
- 选择需要处理的 APK 文件(支持重命名为无后缀或任意后缀的 APK)
- 点击”开始处理”,自动完成解包、去广告、过签、体积优化、打包、签名
- 处理完成后自动导出到原包目录,并生成 Markdown 处理报告
- 处理结果可直接安装使用
8.2 更新日志
v3.0(当前版本)
- 新增 MT 管理器式 KillerApplication 注入过签,普通 / 原包双模式去除签名效验
- 过签 SO 智能注入,按目标 APK 已存在的 ABI 架构写入,无 lib 目录则全架构写入
- 钩子类名可自定义,内置 12 个内部类自动同步重命名;注入参数全面可自定义
- 移植 ApkDataMultiplexing 实现数据复用优化,最多减小约 50% 体积
- 识别重命名嵌套 APK,无后缀或任意后缀的原包也能准确识别
- 新增 DEX 体积优化,移除调试信息再减小 5%~15% 体积
- 优化后采用 V2V3SchemeSigner 专用签名,复用优化保持有效
- 关于页面补全开源项目与参考代码信息
v2.6
- 修复 Zip 路径穿越漏洞(Zip Slip)与解压大小上限
- 大文件打包单次读取、编辑读写异步化,性能大幅提升
- 暗色模式弹窗样式补齐、文件图标统一、体验细节打磨
九、隐私声明
本应用遵守最小化收集原则,高度重视并保护您的个人隐私:
- 本地离线处理:所有 APK 的解包、去广告、打包、签名均在您的设备本地完成,应用不会上传任何 APK 文件或内部数据到服务器。
- 联网行为透明:本应用仅在您主动点击”检查更新”时联网请求版本信息,其余时间不会在后台联网、收集或上传任何个人信息。
- 权限最小化:本应用不读取、不存储、不访问您的通讯录、相册、定位、短信、通话记录等敏感信息。
- 数据本地存储:应用的配置、处理特征等数据仅保存在您的设备本地,应用卸载后即被清除,不会留存任何云端记录。
- 第三方链接:关于与更新页面可能包含外部链接,点击后由第三方平台处理您的访问行为,建议您查阅相关第三方的隐私政策。
- 若您在使用过程中有任何隐私疑问、建议或顾虑,欢迎通过作者联系方式与我们沟通,我们将尽力解答。
十、免责声明
请在使用本应用前仔细阅读以下免责声明:
- 合法用途限制:本应用仅供学习、研究与个人合法用途使用。请勿对您不拥有版权、未获授权或受法律保护的应用进行修改与分发。
- 使用风险自担:使用本应用处理 APK 所产生的任何后果(包括但不限于:应用无法安装、闪退、功能异常、账号风险、数据丢失等)均由使用者自行承担。
- 商业使用责任:修改后的 APK 若用于商业用途或对外分发,请确保遵守相关应用的所有权、版权、商标及所在国家或地区的法律法规,由此产生的法律责任由使用者自担。
- 无担保声明:本应用按其现状提供,不附带任何形式的明示或默示担保。作者不对因使用或无法使用本应用而造成的任何直接或间接损失承担责任。
- 第三方内容:本应用引用的开源项目与广告特征规则均来自公开渠道,仅供技术参考,其版权归原作者所有。
- 条款变更:作者保留随时修改本免责声明的权利,更新后的内容将在新版本中生效。
- 同意条款:使用本应用即视为您已阅读、理解并同意以上全部条款。若不同意,请停止使用本应用。
十一、支持与反馈
- 如果本项目对你有帮助,欢迎 Star 支持!
- 有任何问题或建议,欢迎在评论区留言反馈
- 你的支持是我持续更新的最大动力!
十二、版权与许可证
本项目基于 MIT License 开源,版权归 sillycat 所有。
- 你可以:自由使用、修改、分发本项目(含商业用途),但需保留原始版权声明与许可文本
- 你不可以:使用本项目作者名义进行推广;对项目进行歪曲、误导性描述
- 无担保:本项目按”现状”提供,不附带任何形式的明示或默示担保
本项目所使用、调用、参考的第三方开源项目及其许可信息,详见 THIRD_PARTY_NOTICES.md。
十三、参与贡献
欢迎通过以下方式参与本项目:
- 报告问题:使用 Issue 模板 提交 Bug 或功能建议
- 提交代码:Fork 后提交 Pull Request,详见 CONTRIBUTING.md
- 社区交流:前往 Discussions 讨论
- 安全漏洞:请通过 SECURITY.md 描述的私有渠道报告,勿在公开 Issue 中披露
© 2026 小奶瓶 (sillycat) · 本项目基于 MIT License 开源 Powered by dexlib2 / apksig / AndroidX