Ultranti

春寒料峭,冻刹年少。

Surge Module 用法尝试

Rhysn's Avatar 2020-04-14 toolsSurge

  1. 1. 基本概念
  2. 2. 编写模块

Surge 在最新的 iOS TF 版本中加入了 Module 的新玩法,具体介绍如下:

Module(模块)是一系列设置的集合,可用于覆盖当前配置的部分设定,有非常多的使用场景:

  • 微调不可编辑的配置的设定,如托管配置和企业配置。
  • 快捷的在不同工作环境中切换,比如临时开启对所有域名的 MitM 并调整过滤器。
  • 使用他人编写的模块以完成某些特定任务,比如,你的同事可以编写一个模块将应用的 API 请求重定向至测试服务器。
  • 如果你在多个设备间使用了同一份配置,有可能需要根据设备的使用场景进行微调。模块的开启状态是保存于当前设备的,可以用于在不同设备间的差异性修改。

基本概念

模块相当于给当前配置进行 Patch,其优先级高于配置本身的设置。有三种模块:

  • 内置模块:Surge 会预置一些模块,随着 Surge 自身更新。
  • 本地模块:放置配置文件根目录的 .sgmodule 文件
  • 安装的模块:从某个 URL 安装的模块

你可以同时开启多个模块,模块的开启状态保存于当前设备,不会进行同步。切换配置也不影响模块的开启状态。

编写模块

模块的内容和标准配置基本一致,目前支持调整以下段:

  • General,Replica

    有三种写法

    • key = value:直接覆盖原始值
    • key = %APPEND% value:在原始值的末尾进行追加(仅适用于适用逗号分隔的字段)
    • key = %INSERT% value:在原始值的开始进行插入(仅适用于适用逗号分隔的字段)
  • MITM
    仅支持操作 hostname 字段,同样支持上述三种写法。

  • Script,URL Rewrite,Header Rewrite,Host
    新加入的定义将会追加在原始内容的顶部。

  • Rule

    • 新配置的规则将被插入在最顶部
    • 规则只可以使用 DIRECT、REJECT、REJECT-TINYGIF 三个策略

同时,模块支持配置 name,desc 和 system 描述,请参照最后的样例。
(system 描述的可取值为 ios 和 mac,用于限制模块的使用范围)

根据 Module 的设定,我尝试编写了 MITI && Script 的 Cookies 获取部分内容,同时引入 jsDelivr CDN 加速链接,实现只在必要时刻启用 MITI 中间人攻击,减少长时间开启非必要 MITI 解密,或者反复修改配置文件的繁琐。

1
2
3
4
5
6
7
8
9
10
11
#!name=Get Cookies With Check In
#!desc=MITM && Script

[MITM]
hostname = %APPEND% api.m.jd.com, *.iqiyi.com, icbc1.wlphp.com:8444, mobwsa.ximalaya.com, daojia.jd.com
[Script]
JD_DailyBonus = type=http-request,pattern=https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean,script-path=https://cdn.jsdelivr.net/gh/NobyDa/[email protected]/JD-DailyBonus/JD_DailyBonus.min.js
iqiyi = type=http-request,pattern=https?:\/\/.*\.iqiyi\.com\/.*authcookie=,script-path=https://cdn.jsdelivr.net/gh/NobyDa/[email protected]/Surge/iQIYI-DailyBonus/iQIYI_GetCookie.min.js
icbc = type=http-request,pattern=^https:\/\/icbc1\.wlphp\.com:8444\/js\/api\/index\/signIn,requires-body=1,max-size=0,script-path=https://cdn.jsdelivr.net/gh/Rhysn/[email protected]/Scripts/ICBC/icbc_cookies_sign.min.js,script-update-interval=0
ximalaya = type=http-request,pattern=^https?:\/\/.*\/mobile\-user\/homePage\/.*,script-path=https://cdn.jsdelivr.net/gh/chavyleung/[email protected]/ximalaya/ximalaya.cookie.min.js
jddj = type=http-request,pattern=^https:\/\/daojia.jd.com/client(.*?)functionId=signin(.*?)userSigninNew,script-path=https://cdn.jsdelivr.net/gh/chavyleung/[email protected]/jddj/jddj.cookie.min.js

Ps:
具体 Surge 脚本实现全部来源于网络,可在对应 GitHub 仓库中查看,相关介绍可阅读对应 README 文档。

Author : Rhysn
This work is licensed under a CC BY-NC-SA 4.0 International License.
Link to this article : https://ultranti.com/article/surge_testflight_module/

This article was last updated on days ago, and the information described in the article may have changed.
Loading comments…