脱壳并修改APP内容实现去广告
字数 1998 2025-08-19 12:41:50

Android APP脱壳与去广告修改技术详解

一、前言

在渗透测试和安全研究中,修改APP内容主要用于:

  • 绕过弹窗和前端逻辑限制
  • 分析应用内部机制
  • 去除广告等干扰元素

二、APP基础分析与脱壳

2.1 初步分析

工具准备

  • APK Messenger
  • GDA (Graphical Dalvik Analyzer)

分析要点

  1. 使用多个查壳工具交叉验证(单一工具可能误判)
  2. 注意区分32位和64位版本

2.2 脱壳流程

2.2.1 使用BlackDex脱壳

  1. 根据手机CPU架构选择对应版本的BlackDex
  2. 直接选择目标APK进行自动脱壳
  3. 脱壳后通常会得到多个dex文件

文件处理

  1. 对比原始APK和解压后的dex文件大小
  2. 删除与原始大小相同的dex文件(这些可能是未加密部分)
  3. 保留大小不同的dex文件(这些是加密部分)

2.2.2 修复dex文件

使用NP管理器:

  1. 打开修复功能
  2. 选择"全部修复"选项

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

  1. 使用apktool反编译APK
  2. 定位到AndroidManifest.xml
  3. 修改application元素的android:name属性为真实入口类名

2.2.5 重新编译与清理

  1. 使用apktool重新编译APK
  2. 删除加固相关文件:
    • 0O等混乱命名的文件
    • tencent_stub
    • tosversion
    • 名称包含shell的so文件
  3. 替换dex文件:
    • 删除原始classes.dex
    • 将修复后的dex重命名为classes.dex系列

2.2.6 重新签名

使用NP管理器:

  1. 选择APK文件
  2. 执行签名功能
  3. 安装签名后的APK

三、静态审计与动态分析

3.1 必备知识

关键概念

  • Intent:Android中的跳转指令,activity.startActivity(intent)实现Activity跳转
  • Activity:全屏广告通常以Activity形式存在
  • 资源定位:通过R.string.name或布局文件中的@string/name定位代码

3.2 静态审计流程

工具推荐

  • Jadx(查看Java代码)
  • JEB(高级反编译与调试)

审计步骤

  1. 评估混淆程度

    • 查看主包下类名混淆情况
    • 搜索关键词如"Ad"、"广告"等
  2. 定位广告Activity

    • 搜索类名包含"Ad"的Activity
    • 示例:AdActivity
  3. 分析跳转逻辑

    • 在广告Activity中搜索startActivity
    • 通常会有两处跳转:登录和主页面
  4. 查找入口Intent

    • 全局搜索new Intent(this, xxActivity.class)
    • 或直接搜索xxActivity.class

3.3 动态分析技巧

环境准备

  • 优先使用真机(模拟器可能有不兼容问题)
  • 开启开发者选项中的"等待调试器"功能

使用JEB调试

  1. 找到目标代码位置
  2. 解析跳转到SMALI
  3. 设置断点(Ctrl+B)
  4. 附加到目标进程
  5. 使用"跳过"和"进入"跟踪执行流程

四、代码修改与绕过广告

4.1 修改策略

常见方法:

  1. 直接修改计时器时间为0
  2. 修改跳转条件判断
  3. 替换入口Intent

4.2 具体实施

示例:修改广告计时器

  1. 使用apktool反编译APP
  2. 搜索目标方法(通过函数名或字符串引用)
  3. 分析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 动态调试 高级逆向工具

六、注意事项

  1. 法律合规:仅用于授权测试和研究
  2. 版本匹配:工具需与APP架构一致
  3. 备份原则:修改前保留原始文件
  4. 签名验证:修改后必须重新签名
  5. 真机优先:动态分析尽量使用真机

通过以上完整流程,可以系统性地完成Android APP的脱壳、分析和内容修改工作。

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 搜索关键字段 : 分析赋值部分 : 找到类似 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 通常会有两处跳转:登录和主页面 查找入口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修改示例 : 4.3 验证效果 修改前后对比: 修改前:有5秒广告展示 修改后:广告界面立即跳过 五、工具清单 | 工具名称 | 用途 | 备注 | |---------|------|------| | APK Messenger | 查壳 | 需多工具交叉验证 | | GDA | 查壳与分析 | 图形化Dalvik分析器 | | BlackDex | 脱壳 | 需匹配CPU架构 | | NP管理器 | dex修复/签名 | 安卓端工具 | | apktool | APK反编译/回编译 | 命令行工具 | | baksmali | dex反编译 | 官方工具 | | Jadx | 静态分析 | Java代码查看 | | JEB | 动态调试 | 高级逆向工具 | 六、注意事项 法律合规:仅用于授权测试和研究 版本匹配:工具需与APP架构一致 备份原则:修改前保留原始文件 签名验证:修改后必须重新签名 真机优先:动态分析尽量使用真机 通过以上完整流程,可以系统性地完成Android APP的脱壳、分析和内容修改工作。