
这个是用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 逆向技术,修改后的安装包
仅供本人使用,请勿二次分发或用于商业用途,支持请使用官方版本。
===================================================

