APP逆向入门-某违规app分析
字数 1060 2025-08-22 12:23:00

APP逆向分析实战教学:某违规APP分析

1. 初步分析

1.1 应用基础信息

  • 应用未加固,便于逆向分析
  • 启动Activity为Splash0Activity
  • 广告Activity为AdvertActivity,位于启动Activity之后

1.2 广告跳过方法

  1. 定位广告Activity代码
  2. 找到关键判断逻辑:
    if (position >= this.data.size())
    
  3. 修改方案:将此判断条件取反
  4. 修改后可能触发官方检测机制

2. 反检测机制绕过

2.1 签名校验检测

  • 检测函数位于MainActivity中的checkpackage函数
  • 关键检测代码:
    checkoutPackageName(activity) && 
    activity.getString(R.string.app_signature).equals(getSignature(activity))
    
  • 检测内容:
    • 包名是否匹配
    • 签名是否匹配

2.2 绕过方案

  1. 方案一:修改if判断逻辑取反
  2. 方案二:定位调用checkPackage()的位置并注释掉相关smali代码

3. 登录机制分析

3.1 登录Activity

  • 登录Activity名称为LoginActivity
  • 登录需要:
    • 手机号
    • 密码
    • 验证码

3.2 登录API分析

  • 登录函数:goLoginByPhone
  • 自定义注解:
    @MethodInfo(name = "user/loginbyphone")
    
  • 表示该方法是用于通过手机号码进行登录的操作

3.3 网络请求基础

  • ApiServices中找到baseUrl定义
  • 这是所有网络请求的基础URL

4. 免登录实现尝试

4.1 登录状态判断

  • 关键函数:Util.isLogin()
  • 实现代码:
    public static boolean isLogin() {
        return APP.getInstance().getUserInfo() != null;
    }
    

4.2 修改方案

  1. != null改为== null
  2. 效果:可以跳过登录提示,但部分功能无法使用
    • 原因:部分功能需要用户身份信息(如VIP状态)

5. VIP功能破解

5.1 VIP相关函数

  • 主要涉及四个函数:
    • 两个getter函数
    • 两个setter函数

5.2 修改方案

  1. 将两个setter函数修改为非0值
  2. 或者修改判断是否为VIP的函数:
    • 方案一:修改判断逻辑
    • 方案二:直接修改返回值

5.3 smali代码修改示例

初始错误修改:

const-string v0, "1"
iput-object v0, p0, Lcom/re/ng/juu/entity/bean/UserInfo;->vip_grade:Ljava/lang/String;

正确修改:

const-string p1, "1"
iput-object p1, p0, Lcom/re/ng/juu/entity/bean/UserInfo;->vip_grade:Ljava/lang/String;

6. 注意事项

  1. 测试环境:

    • 应在可控环境中进行测试
    • 不要泄露个人隐私信息
    • 使用测试账号进行登录
  2. 法律合规:

    • 该分析内容已举报给有关部门
    • 仅用于学习逆向工程技术
    • 不得用于非法用途

7. 技术要点总结

  1. 基础分析工具:

    • MT管理器的activity记录器
    • Jadx反编译工具
  2. 关键修改技术:

    • 条件判断取反
    • 函数调用注释
    • smali代码修改
  3. 分析流程:

    • 从manifest文件入手
    • 跟踪activity流程
    • 定位关键函数
    • 分析网络请求
    • 修改关键逻辑
  4. 常见问题解决:

    • 签名校验绕过
    • 广告跳过
    • 免登录实现
    • 会员功能破解
APP逆向分析实战教学:某违规APP分析 1. 初步分析 1.1 应用基础信息 应用未加固,便于逆向分析 启动Activity为 Splash0Activity 广告Activity为 AdvertActivity ,位于启动Activity之后 1.2 广告跳过方法 定位广告Activity代码 找到关键判断逻辑: 修改方案:将此判断条件取反 修改后可能触发官方检测机制 2. 反检测机制绕过 2.1 签名校验检测 检测函数位于 MainActivity 中的 checkpackage 函数 关键检测代码: 检测内容: 包名是否匹配 签名是否匹配 2.2 绕过方案 方案一 :修改if判断逻辑取反 方案二 :定位调用checkPackage()的位置并注释掉相关smali代码 3. 登录机制分析 3.1 登录Activity 登录Activity名称为 LoginActivity 登录需要: 手机号 密码 验证码 3.2 登录API分析 登录函数: goLoginByPhone 自定义注解: 表示该方法是用于通过手机号码进行登录的操作 3.3 网络请求基础 在 ApiServices 中找到 baseUrl 定义 这是所有网络请求的基础URL 4. 免登录实现尝试 4.1 登录状态判断 关键函数: Util.isLogin() 实现代码: 4.2 修改方案 将 != null 改为 == null 效果:可以跳过登录提示,但部分功能无法使用 原因:部分功能需要用户身份信息(如VIP状态) 5. VIP功能破解 5.1 VIP相关函数 主要涉及四个函数: 两个getter函数 两个setter函数 5.2 修改方案 将两个setter函数修改为非0值 或者修改判断是否为VIP的函数: 方案一:修改判断逻辑 方案二:直接修改返回值 5.3 smali代码修改示例 初始错误修改: 正确修改: 6. 注意事项 测试环境: 应在可控环境中进行测试 不要泄露个人隐私信息 使用测试账号进行登录 法律合规: 该分析内容已举报给有关部门 仅用于学习逆向工程技术 不得用于非法用途 7. 技术要点总结 基础分析工具: MT管理器的activity记录器 Jadx反编译工具 关键修改技术: 条件判断取反 函数调用注释 smali代码修改 分析流程: 从manifest文件入手 跟踪activity流程 定位关键函数 分析网络请求 修改关键逻辑 常见问题解决: 签名校验绕过 广告跳过 免登录实现 会员功能破解