iPhone 全程搞定:抓包 → Muse 写插件 → GitHub 推送,开屏广告消失

26 条回复
226 次浏览

起因

我手机上装了 Loon,大多数去广告插件都装好,但总有覆盖不到的。平时就自己抓包,在电脑上给 Codex 分析后写对应的插件,最后推送自己的 GitHub 仓库。
昨晚辅导小孩时打开作业帮,开屏广告就来了,漏网之鱼啊!这次不想开电脑了,想试试让 Muse 全包了。

全流程

  1. Loon 开抓包,打开作业帮,等开屏广告结束后,把 HAR 导出
  2. 把 HAR 文件发给 Muse,加一句"帮我写个去广告插件"
  3. Muse 后台开始干活:
    • 解析 74 条请求的抓包,逐条定位广告链路
    • 找到广告下发接口:羽克广告平台的 com/adx/impress(返回 data.list 广告数组,无广告时 ishavead: "0")
    • 找到弹窗开关:plutov2/app/popstatus 的 needPopup 字段
    • 纯上报接口直接拦掉:imp/monitor、generalreport、sdkbl、nlogtj、gtactivity
    • 护住业务接口:httpdns、AB 实验、AI 推荐接口一个不碰
    • 按我仓库的格式写好 ZuoYeBang.lpx + ZuoYeBang_ad_remove.js(Rule / Rewrite / Script / MITM 四段),JS 还做了语法校验
  4. 我说"推送到我的仓库" → Muse 把两个文件 推送到仓库,发回 raw 安装链接
  5. 手机点链接安装插件,杀掉作业帮重开,试了几次——开屏广告消失 👍

两点优势

  1. 全程手机操作:抓包、发文件、装插件、测试都在 iPhone 上完成,电脑都没开。
  2. 后台全自动:从我发 HAR 到收到安装链接,中间我什么都没干——分析、写插件、语法校验、推 GitHub 全是 Muse 在后台完成的。

最后

这个帖子也是 Muse 写的。doge_flower懒人福音。smirk

  • 附言 1

    image

卡皮巴拉
OP

生成的插件是个 ipx 文件,推送到 github 仓库后,就可以用 raw 链接在 loon 里安装了。

走个面

AI 审查为什么没给你关起来?关键他还不开源,抓起来给我狠狠的电!

都听我说!

帖子都是它写的,那你对评论的互动 是它 还是 你?

卡皮巴拉
OP

吃是吃一点的——抓包文件都扔 Muse 工作区了,一份几 MB,插件才几 KB。攒一百个 App 的插件也就几十 MB,还不如手机里一张照片大。真堆起来了他自己会删旧抓包,总之管饱,不用担心!

------本回复由 Muse 生成。doge_ninja

卡皮巴拉
OP

交出代码,否则要被电死~~force_smile

ZuoYeBang.lpx

复制
#!name=作业帮去广告
#!desc=移除作业帮广告位与弹窗,屏蔽羽克广告平台上报;基于 HAR 抓包分析(syh.yukeweb.com / plutov2/app/popstatus)
#!icon=https://raw.githubusercontent.com/fmz200/wool_scripts/main/icons/apps/github_00.png
#!date=20261010
#############################################

[Rule]
# 行为埋点上报(纯上报,无业务功能)
DOMAIN-SUFFIX,nlogtj.yukeweb.com, REJECT
DOMAIN-SUFFIX,nlogtj.zuoyebang.cc, REJECT
# 广告归因
DOMAIN-SUFFIX,gtactivity.zuoyebang.com, REJECT

[Rewrite]
# 羽克广告平台:曝光监测 / 创意展示上报 / SDK 黑名单(纯上报,直接拒绝)
^https?:\/\/syh\.yukeweb\.com\/com\/(imp\/monitor|adx\/generalreport|adx\/sdkbl) reject

[Script]
# 广告下发接口:清空 data.list,模拟服务端"无广告"响应(ishavead=0)
http-response ^https?:\/\/syh\.yukeweb\.com\/com\/adx\/impress script-path=https://raw.githubusercontent.com/aaren22/kill-ios-ad/main/ZuoYeBang_ad_remove.js, requires-body=true, timeout=60, tag=作业帮-广告列表
# 弹窗控制接口:强制 needPopup=0
http-response ^https?:\/\/pluto\.zuoyebang\.com\/plutov2\/app\/popstatus script-path=https://raw.githubusercontent.com/aaren22/kill-ios-ad/main/ZuoYeBang_ad_remove.js, requires-body=true, timeout=60, tag=作业帮-弹窗控制

[MITM]
hostname = syh.yukeweb.com, pluto.zuoyebang.com

ZuoYeBang_ad_remove.js

复制
/*
 * 作业帮去广告
 *
 * 原理(基于 HAR 抓包分析,App 包名 com.baidu.homework,iOS 14.52.0):
 * 1. 作业帮广告由自有羽克广告平台下发:POST syh.yukeweb.com/com/adx/impress
 * 响应体 data.list 为广告素材数组;无广告时服务端返回 "ishavead":"0" 且 list 为空。
 * 此处将 list 强制清空,模拟"无广告"响应,App 不展示广告位。
 * 2. 弹窗由 POST pluto.zuoyebang.com/plutov2/app/popstatus 控制,
 * 响应体 data.needPopup 为 1 时弹弹窗;强制改写为 0。
 * 3. 纯上报类请求(曝光监测、行为埋点、广告归因)在 .lpx 中直接 REJECT,
 * 不经过本脚本。
 */

const requestUrl = String(($request && $request.url) || "");

function handleImpress() {
    const body = $response && $response.body;
    if (!body) {
        $done({});
        return;
    }
    try {
        const resp = JSON.parse(body);
        if (resp && resp.data && Array.isArray(resp.data.list)) {
            const n = resp.data.list.length;
            resp.data.list = [];
            console.log("[作业帮] 已清空广告列表 (原 " + n + " 条): " + requestUrl);
        } else {
            console.log("[作业帮] impress 响应无广告列表,保持原样");
        }
        $done({ body: JSON.stringify(resp) });
    } catch (e) {
        console.log("[作业帮] impress 解析失败: " + e.message);
        $done({});
    }
}

function handlePopstatus() {
    const body = $response && $response.body;
    if (!body) {
        $done({});
        return;
    }
    try {
        const resp = JSON.parse(body);
        if (resp && resp.data && resp.data.needPopup !== 0) {
            resp.data.needPopup = 0;
            resp.data.tips = "";
            console.log("[作业帮] 已关闭弹窗 (needPopup -> 0)");
        } else {
            console.log("[作业帮] 本次无弹窗 (needPopup=0)");
        }
        $done({ body: JSON.stringify(resp) });
    } catch (e) {
        console.log("[作业帮] popstatus 解析失败: " + e.message);
        $done({});
    }
}

if (/\/com\/adx\/impress/i.test(requestUrl)) {
    handleImpress();
} else if (/\/plutov2\/app\/popstatus/i.test(requestUrl)) {
    handlePopstatus();
} else {
    $done({});
}

发表一个评论

R保持