# 更新后某电视频 APP 去广告破解

参考 52pj 大佬教程:https://www.52pojie.cn/thread-1814917-1-1.html

教程中样本软件版本是 1.5.1, 本博客基于更新后的版本 1.6.1 部分操作不一样 大致思路一样的

比较逆天的就是真机启动闪退 只好用模拟器了

# 破解思路

想在 APP 免费看片,有两种路径 一种是看广告,一种是邀请人数也就是推广,这里用的是通过去广告的方法实现免费看片

# 广告分析

许多广告的 SDK 文档百度能搜 就不列举了

image-20230907135215523

jadx 一开就能看见一堆广告相关

# 去广告

广告 SDK 少的话 就直接在文档里找关键的方法 改返回值即可

这个软件就是广告比较多的

关键字:initsdk、loadad、initad 等

SDK 的初始化基本上都在启动类

image-20230907141405616

activity 活动记录先

image-20230907141549356

image-20230907143037411

image-20230907143226970

查找用例可以发现这里 这些一系列方法都是 SDK 的初始化 因为是 void 方法于是把这个 d 方法中间的代码都删了即可 (或加一个 return-void)

image-20230907145107792

VIP 免广告

image-20230907172042361

关键方法:getFree_time ()

# 去除签名校验

(没管签名校验就用算法助手直接 hook)

# 法一 (简单): 注释掉 exit 的地方 (hook)

直接搜 app kill 即可找到三个退出的地方

# 法二 (手撕!): 找到验证 MD5 摘要的地方,在 smail 代码进行一个方法重写让他得到的字符串与校验所需的 MD5 值一样

image-20230907192124173

if 判断找到 obj 参数和 saiFunUtils.f8000c 参数,后者是 app_id 查找后就是 zidian

equals 的值是image-20230907192701068

image-20230907192956888

13AB01332853FA65AD5C3BA49950A45C 32 位字符串 猜测为 MD5 摘要

image-20230907193215342

找到这个第一个参数的方法,看到 getPackageName () 方法 (多半就涉及到签名信息了)

image-20230907194544672

继续 ctrl + 鼠标左键寻找到这里有 signature 的 f 方法

结合上述以及算法助手 hook 打印 f 方法日志 可以得知这个 w 方法就是获取包的 MD5 摘要再和你的对比

于是 MT 管理器修改 f 方法的 smail 代码

.method public static f()Ljava/util/List;
    .registers 2
    .annotation build Landroidx/annotation/NonNull;
    .end annotation

    .annotation system Ldalvik/annotation/Signature;
        value = {
            "()",
            "Ljava/util/List<",
            "Ljava/lang/String;",
            ">;"
        }
    .end annotation

    .line 1
    new-instance v0, Ljava/util/ArrayList;

    invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V

    const-string v1, "F9:6C:E9:5F:D5:47:BE:DF:81:15:E3:71:8A:10:54:45" 
    #创建了一个新的 ArrayList 实例,然后向列表中添加了一个字符串常量 "F9:6C:E9:5F:D5:47:BE:DF:81:15:E3:71:8A:10:54:45"

    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    return-object v0
.end method

# 大坑

经过大佬的分析,该 APP 的签名校验分为 java 层和 native 层 (反射获取签名信息), 改 MD5 只通过了 java 层,仍然会播放失败!(反射介绍:https://www.jianshu.com/p/6277c1f9f48d)

image-20230907190446500

所有导出函数已被混淆 (知识补充:https://blog.csdn.net/jltxgcy/article/details/109012006)

image-20230907190901893

JNI 也被改过 故 so 文件分析困难

大佬的话是说通过其他的一些工具分析出这个 so 其实是通过反射来获取签名的信息 (b 站问了大佬大佬说其他工具是指 funelf,github 上一搜就有)

image-20230907191521875

分析日志可知可以通过 PM 代理的方法代理它的签名信息

手动用 PM 代理是不会的,可以用 MT 管理器自带的去除签名校验功能 (原理其实就是 PM 代理)

# 闪退问题

一开始就要去签名校验,然后才能改包!

# 成功!广告一去,可以看奥本海默了!

image-20230907204120189

布局优化什么的还没搞,直接点观看广告 是不会弹广告的 就是在广告 SDK 初始化的时候让他直接 return-void 了,关键还是签名校验部分吧

这里挂一个百度网盘链接,需要就直接下载吧

6ZO+5o6l77yaaHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWNjNW10Z3Q4eWdaVkduVmlsZXB4YWc/cHdkPXl2eGUgCuaPkOWPluegge+8mnl2eGUgCi0t5p2l6Ieq55m+5bqm572R55uY6LaF57qn5Lya5ZGYVjXnmoTliIbkuqs=