这个是用AI去除广告的软件  目前还是存在看5-6小时  会出现广告  只能清除数据缓存  有没有大佬告诉下该怎么解决
文件太大了 丢不上来  自己动下手指吧
==========================================================================
红果免费漫剧 7.4.0.32 —— MT管理器手机端去广告详细教程
(追剧时"下一集"插播广告 / 章末广告 永久去除,含防云端覆盖)
==========================================================================

【适配版本】红果免费漫剧 7.4.0.32(arm64)
【所需工具】MT管理器 v2.12 及以上(无需 root)
【难    度】★★★☆☆(跟做即可,全程手机操作,约 15 分钟)
【原 理】  广告由两条链路加载:①自家"excitingvideo/联盟"广告 SDK(插屏),
          ②云端配置下发"每 N 集插一条"的开关和阈值。
          本教程:a.直接让插屏广告加载立即失败(走官方"无广告填充"降级,
          播放器自动跳过广告播下一集);b.改死云端配置的接收字段,
          服务端下发任何值都匹配不上,杜绝"过几小时广告又回来"。

【补丁清单】共 7 个,分布在 5 个 dex 里:
  补丁1  classes8   广告总开关恒为关闭
  补丁2  classes20  插屏判定强制走"开关未开启"分支
  补丁3  classes23  云端配置字段改名(自家阅读内核版)
  补丁4  classes20  云端配置字段改名(tomato 番茄内核版)
  补丁5  classes23  配置类本地默认值改为关闭
  补丁6  classes11  插屏广告工厂:加载立即失败(核心)
  补丁7  classes13  联盟广告插屏接口:直接回调无广告(核心)

--------------------------------------------------------------------------
第 0 步  备份与打开
--------------------------------------------------------------------------
1. 把 红果免费漫剧_7.4.0.32.apk 放到手机下载目录(或直接提取已安装的:
   MT管理器左侧抽屉 → 应用 → 找到红果 → 长按 → 提取安装包)。
2. 打开 MT管理器,找到该 apk,单击 → 选择「编辑」(部分版本为:长按 →
   打开方式 → 编辑),进入 APK 内部目录。
3. 建议先做防闪退保险:在 APK 编辑界面点右上角「功能」→「去除签名校验」
   → 方案默认 → 确定。字节系应用一般不强校验签名,但做了无害。

--------------------------------------------------------------------------
第 1 步  打开 DEX 编辑器
--------------------------------------------------------------------------
在 APK 根目录能看到 classes.dex、classes2.dex …… classes23.dex。
点击 classes8.dex → 选择「DEX编辑器」。
(提示:如果想一次搜多个 dex,可以长按多个 dex → 用「DEX编辑器(多开)」。)
以后每个补丁都是同样三步:搜索类名 → 打开类 → 找到方法改代码。

注意:
· smali 里若看到 .line / .prologue 开头的行是调试信息,不用管也不要删,
  下面代码块只对应真正的指令行;
· 逗号、空格、寄存器 v0/v6、p0/p1、数字 0x0/0x4 必须逐字符一致,
  字母 O 和数字 0、字母 l 和数字 1 不要抄错;
· 每改完一个类点「保存」,MT 会自动重新编译该 dex,报错就说明抄错了。

--------------------------------------------------------------------------
第 2 步  补丁1 —— 广告总开关恒为关闭(classes8)
--------------------------------------------------------------------------
1. 打开 classes8.dex,搜索类名:ExperimentUtil
2. 打开 com.dragon.read.reader.ad.experiment.ExperimentUtil
3. 类内查找方法:G9G66 (这是个返回广告开关的静态方法)
4. 原代码:

    .method public static G9G66()Z
        .locals 1
        ......(中间几行不用动)
        if-eqz v0, :cond_0
        iget-boolean v0, v0, Lcom/dragon/read/base/ssconfig/model/ShortSeriesAdConfig;->shortVideoAdEnable:Z
        return v0
        :cond_0
        const/4 v0, 0x1
        return v0
    .end method

5. 改两处:
   ① 把 iget-boolean 那一整行替换为:

        const/4 v0, 0x0

   ② 把 :cond_0 下面的 const/4 v0, 0x1 改为 const/4 v0, 0x0
6. 改后效果(两个 return 前都是 0x0,即永远返回"广告关闭"):

        const/4 v0, 0x0
        return v0
        :cond_0
        const/4 v0, 0x0
        return v0

--------------------------------------------------------------------------
第 3 步  补丁2 —— 插屏判定强制走"开关未开启"分支(classes20)
--------------------------------------------------------------------------
1. 打开 classes20.dex,搜索类名:QqqQqQ9 (是个混淆名,注意大小写)
2. 打开类 QqqQqQ9.Q9G6
3. 类内搜索字符串:switch_disabled
   能看到附近有一行中文「短剧中插广告总开关未开启」,就说明找对了。
4. 从 switch_disabled 往上翻约 10 行,找到这样的结构:

        :cond_4
        :goto_2
        if-nez v6, :cond_5

5. 在 :goto_2 和 if-nez 之间插入一行:

        const/4 v6, 0x0

   改后为:

        :cond_4
        :goto_2
        const/4 v6, 0x0
        if-nez v6, :cond_5

   这样 v6 恒为 0,代码必定跳进"总开关未开启"的关闭分支,
   后面的请求插屏广告逻辑全部跳过。

--------------------------------------------------------------------------
第 4 步  补丁3 / 补丁4 —— 云端配置字段改名(classes23 + classes20)
--------------------------------------------------------------------------
这两个补丁是防"过几小时广告又回来"的关键:服务端配置是 JSON,
客户端靠 @SerializedName 注解里的 key 去匹配。key 改了,
服务端下发什么都匹配不上,本地值永远生效。

补丁3:
1. 打开 classes23.dex,搜索类名:ShortSeriesAdConfig
2. 打开 com.dragon.read.base.ssconfig.model.ShortSeriesAdConfig
3. 类内搜索:short_video_ad_enable
4. 找到字段注解:

    .field public shortVideoAdEnable:Z
        .annotation runtime Lcom/google/gson/annotations/SerializedName;
            value = "short_video_ad_enable"
        .end annotation
    .end field

5. 只把 value 引号里的内容改为:

            value = "short_video_ad_enable_off"

   注意:别误改下面的 short_video_ad_expired_time 等其他行。

补丁4:
1. 打开 classes20.dex,搜索类名:ShortSeriesAdConfig
2. 打开 com.bytedance.tomato.onestop.config.model.ShortSeriesAdConfig
3. 同样把 value = "short_video_ad_enable" 改为
   value = "short_video_ad_enable_off"

--------------------------------------------------------------------------
第 5 步  补丁5 —— 配置类本地默认值改为关闭(classes23)
--------------------------------------------------------------------------
1. 还是在补丁3那个类里(ShortSeriesAdConfig),找到构造方法 <init>
   (方法列表里名字叫 <init> 的那个)。
2. 类内搜索:shortVideoAdEnable
   在 <init> 里有一行赋值:

        iput-boolean v1, p0, Lcom/dragon/read/base/ssconfig/model/ShortSeriesAdConfig;->shortVideoAdEnable:Z

   (它上面一行是 ...->seriesRerankTimeInterval:J 的 iput-wide,
    可以用来确认位置)
3. 在这行【上面】插入一行:

        const/4 v1, 0x0

   (因为 0x1 被复用,必须在这里单独清零,不能改别处)

--------------------------------------------------------------------------
第 6 步  补丁6 —— 插屏广告工厂加载立即失败(classes11,核心)
--------------------------------------------------------------------------
1. 打开 classes11.dex,搜索类名:InterstitialAdFactory
2. 打开 com.ss.android.excitingvideo.interstitial.InterstitialAdFactory
3. 找到方法:requestInterstitialAd (插屏广告的统一请求入口)
4. 在方法里定位这两行(它们之间隔着十几行):

   起点行:new-instance v1, Lye/QqQ;
   终点行:invoke-virtual {v1}, Lye/GQG66Q;->g6Gg9GQ9()V

5. 把【起点行~终点行(含这两行本身)】整段删除,在原位置粘贴以下内容:

        new-instance v1, Lcom/ss/android/excitingvideo/exception/RequestException$InterstitialRequestException;
        const/4 v2, 0x4
        const-string p1, "no ad (patched)"
        invoke-direct {v1, v2, p1}, Lcom/ss/android/excitingvideo/exception/RequestException$InterstitialRequestException;-><init>(ILjava/lang/String;)V
        invoke-static {v1}, Lkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object;
        move-result-object v1
        invoke-static {v1}, Lkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object;
        move-result-object v1
        invoke-interface {v0, v1}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V

6. 千万注意:
   · 方法开头 new-instance v0, Lkotlinx/coroutines/CancellableContinuationImpl;
     那几行【不要动】;
   · 方法结尾 invoke-virtual {v0}, ...->getResult() 之后的部分【不要动】;
   · 只删"起点行~终点行"这一段。
   改完效果:不发起任何广告网络请求,直接按 SDK 原本的失败路径回调,
   播放器收到失败后走官方"无广告填充"降级 → 自动跳过广告播下一集。

--------------------------------------------------------------------------
第 7 步  补丁7 —— 联盟插屏接口直接回调无广告(classes13,核心)
--------------------------------------------------------------------------
1. 打开 classes13.dex,搜索类名:MUnionAdRequestService
2. 打开 com.ss.android.union_core.spi.MUnionAdRequestService
3. 找到方法:loadFeedInterstitialAd
4. 把整个方法(从 .method 到 .end method)替换为:

.method public loadFeedInterstitialAd(Landroid/content/Context;Lcom/ss/android/union_api/load/MUnionSlot;Lcom/ss/android/union_api/load/MUnionInterstitialAdListener;)V
    .locals 2

    const/4 v0, 0x4
    const-string v1, ""

    invoke-interface {p3, v0, v1}, Lcom/ss/android/union_api/load/MUnionAdListener;->onerror(ILjava/lang/String;)V

    return-void
.end method

   (这个方法整段只有上面这么多行,放心全选替换。
    错误消息特意用空字符串 "",原因见下方"重要提醒"。
    同类里的 loadRewardAd 千万【不要动】,那是"看视频解锁/得金币",
    动了会导致解锁功能异常。)

【重要提醒】classes13 这个 dex 的方法引用已经顶到 65535 上限(dex 的
64K 限制),改动它时【绝对不能】新增类、新增方法或新增字符串常量,
否则保存后该 dex 会编译成残废文件(表面看着正常,装上必闪退,
而且 MT 不会报错!)。所以:错误消息一律用现成的 "" ;别把其他类
粘进来;补丁6 的代码是加在 classes11 的(它有余量),别搞混 dex。
改完 classes13 后建议验证一下:文件大小和改前应非常接近(差几百
字节以内)。

--------------------------------------------------------------------------
第 8 步  保存、打包、签名、安装
--------------------------------------------------------------------------
1. 7 个补丁全部改完并保存后,一路按返回键退出。
2. MT 会弹出「APK 已修改,是否保存并更新?」→ 确定,等待自动打包
   (这个包很大,140MB+,耐心等,期间别切走)。
3. 打包完成后生成新的 apk 文件(默认在原 apk 同目录)。
4. 长按新 apk → 「签名」→ 方案选 V2(或 V1+V2 都勾)→ 确定等待完成。
5. 先卸载手机上的原版红果(签名不同不能覆盖安装,会丢登录状态,
   红果支持手机号验证码重登,书架进度云端同步会回来)。
6. 安装新 apk,打开即用。

--------------------------------------------------------------------------
常见问题
--------------------------------------------------------------------------
Q1:保存 dex 时编译报错?
    99% 是抄错。重点核对补丁6/7:寄存器名(v0 v1 v2 p1 p3)、
    0x0 和 0x4、方法名的每个字符;确认没把方法开头/结尾误删。

Q2:安装时提示"解析包错误"或安装失败?
    打包没完成就安装了,或者签名没做完。重新走第 8 步。

Q3:打开闪退?
    ①确认做过「去除签名校验」;②补丁6 删多/删少了,重新核对起止两行;
    ③重点检查补丁7:classes13 引用池已顶格(详见第 7 步的"重要提醒"),
    只要往它里面新增过任何类/方法/字符串,整个 dex 就废了,装上必闪退——
    严格按教程用 "" 空字符串,不要自作主张写别的提示文字;
    实在不行先只保留补丁1~5(配置层)测试,再逐个加回 6、7。

Q4:用几天后广告又出现了?
    不会。补丁3/4/5 已把云端配置链路改死,服务端下发不进来;
    补丁6/7 是代码级短路,跟云端无关。若真还有广告,看看广告形式:
    "看视频得金币/解锁"的激励视频位是特意保留的(补丁说明第 7 步),
    集间自动插播的插屏广告才是本教程的目标。

Q5:以后版本升级了怎么办?
    类名都是混淆/固定的,新版本里用类名全局搜索重新定位即可,
    补丁思路完全一样(找 shortVideoAdEnable / InterstitialAdFactory /
    MUnionAdRequestService)。

--------------------------------------------------------------------------
免责声明:本教程仅用于个人学习研究 Android 逆向技术,修改后的安装包
仅供本人使用,请勿二次分发或用于商业用途,支持请使用官方版本。
===================================================