脱壳并修改APP内容实现去广告
字数 1998 2025-08-19 12:41:50
Android APP脱壳与去广告修改技术详解
一、前言
在渗透测试和安全研究中,修改APP内容主要用于:
- 绕过弹窗和前端逻辑限制
- 分析应用内部机制
- 去除广告等干扰元素
二、APP基础分析与脱壳
2.1 初步分析
工具准备:
- APK Messenger
- GDA (Graphical Dalvik Analyzer)
分析要点:
- 使用多个查壳工具交叉验证(单一工具可能误判)
- 注意区分32位和64位版本
2.2 脱壳流程
2.2.1 使用BlackDex脱壳
- 根据手机CPU架构选择对应版本的BlackDex
- 直接选择目标APK进行自动脱壳
- 脱壳后通常会得到多个dex文件
文件处理:
- 对比原始APK和解压后的dex文件大小
- 删除与原始大小相同的dex文件(这些可能是未加密部分)
- 保留大小不同的dex文件(这些是加密部分)
2.2.2 修复dex文件
使用NP管理器:
- 打开修复功能
- 选择"全部修复"选项
2.2.3 查找真实入口
方法一:使用baksmali
java -jar baksmali-2.5.2.jar d cookie_3561024.dex
搜索关键字段:
.field static className:Ljava/lang/String;
分析赋值部分:
- 找到类似
com.nursinghome.monitor.base.MyApp的真实入口类名
2.2.4 修改AndroidManifest.xml
- 使用apktool反编译APK
- 定位到
AndroidManifest.xml - 修改
application元素的android:name属性为真实入口类名
2.2.5 重新编译与清理
- 使用apktool重新编译APK
- 删除加固相关文件:
- 0O等混乱命名的文件
- tencent_stub
- tosversion
- 名称包含shell的so文件
- 替换dex文件:
- 删除原始classes.dex
- 将修复后的dex重命名为classes.dex系列
2.2.6 重新签名
使用NP管理器:
- 选择APK文件
- 执行签名功能
- 安装签名后的APK
三、静态审计与动态分析
3.1 必备知识
关键概念:
- Intent:Android中的跳转指令,
activity.startActivity(intent)实现Activity跳转 - Activity:全屏广告通常以Activity形式存在
- 资源定位:通过
R.string.name或布局文件中的@string/name定位代码
3.2 静态审计流程
工具推荐:
- Jadx(查看Java代码)
- JEB(高级反编译与调试)
审计步骤:
-
评估混淆程度:
- 查看主包下类名混淆情况
- 搜索关键词如"Ad"、"广告"等
-
定位广告Activity:
- 搜索类名包含"Ad"的Activity
- 示例:
AdActivity
-
分析跳转逻辑:
- 在广告Activity中搜索
startActivity - 通常会有两处跳转:登录和主页面
- 在广告Activity中搜索
-
查找入口Intent:
- 全局搜索
new Intent(this, xxActivity.class) - 或直接搜索
xxActivity.class
- 全局搜索
3.3 动态分析技巧
环境准备:
- 优先使用真机(模拟器可能有不兼容问题)
- 开启开发者选项中的"等待调试器"功能
使用JEB调试:
- 找到目标代码位置
- 解析跳转到SMALI
- 设置断点(Ctrl+B)
- 附加到目标进程
- 使用"跳过"和"进入"跟踪执行流程
四、代码修改与绕过广告
4.1 修改策略
常见方法:
- 直接修改计时器时间为0
- 修改跳转条件判断
- 替换入口Intent
4.2 具体实施
示例:修改广告计时器
- 使用apktool反编译APP
- 搜索目标方法(通过函数名或字符串引用)
- 分析SMALI代码:
- 定位寄存器赋值
- 将计时值改为
0f(float类型的0)
SMALI修改示例:
const v4, 0x40a00000 # 原值5.0f
改为
const v4, 0x0 # 修改为0f
4.3 验证效果
修改前后对比:
- 修改前:有5秒广告展示
- 修改后:广告界面立即跳过
五、工具清单
| 工具名称 | 用途 | 备注 |
|---|---|---|
| APK Messenger | 查壳 | 需多工具交叉验证 |
| GDA | 查壳与分析 | 图形化Dalvik分析器 |
| BlackDex | 脱壳 | 需匹配CPU架构 |
| NP管理器 | dex修复/签名 | 安卓端工具 |
| apktool | APK反编译/回编译 | 命令行工具 |
| baksmali | dex反编译 | 官方工具 |
| Jadx | 静态分析 | Java代码查看 |
| JEB | 动态调试 | 高级逆向工具 |
六、注意事项
- 法律合规:仅用于授权测试和研究
- 版本匹配:工具需与APP架构一致
- 备份原则:修改前保留原始文件
- 签名验证:修改后必须重新签名
- 真机优先:动态分析尽量使用真机
通过以上完整流程,可以系统性地完成Android APP的脱壳、分析和内容修改工作。