自动混淆 cm-edt 项目的 js 代码

自动混淆 cm-edt 项目的 js 代码

如果你 fork 了 cm 的 edt 项目,且没有任何修改,那么本文可以略过,cm 的库已经自带了自动同步和混淆的工作流 yml 文件。如果你跟我一样对代码进行了修改,可能会导致自动同步出错,明文 js 不能保持最新,也就无法自动混淆,那么本文可以解决这一问题。

自动拉取最新 明文源码 js 文件

首先 fork cm 的 edt 项目

在自己的仓库的 .github/workflows/ 目录新建一个文件,命名为 files-sync.yml,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
name: Upstream File Sync

permissions:
contents: write

on:
schedule:
- cron: "0 0 * * *" # 每天执行
workflow_dispatch:

jobs:
sync_latest_from_upstream:
name: Sync specific file from upstream repo
runs-on: ubuntu-latest
if: ${{ github.event.repository.fork }}
env:
FILE_TO_SYNC: 明文源码.js # 定义特定文件的全局变量

steps:
# 步骤 1: 检出目标仓库
- name: Checkout target repo
uses: actions/checkout@v3

# 步骤 2: 添加上游仓库为远程仓库
- name: Add upstream repo
run: |
git remote add upstream https://github.com/cmliu/edgetunnel.git
git fetch upstream

# 步骤 3: 强制覆盖或创建本地文件
- name: Force update or create file from upstream
run: |
git checkout upstream/main -- "$FILE_TO_SYNC" || true
echo "强制更新或新建本地文件 $FILE_TO_SYNC 完成"

# 步骤 4: 检查是否有更改并提交
- name: Commit changes
run: |
if ! git diff --quiet HEAD "$FILE_TO_SYNC"; then
git config --global user.name "GitHub Actions Bot"
git config --global user.email "actions@github.com"
git add "$FILE_TO_SYNC"
git commit -m "强制覆盖或更新 $FILE_TO_SYNC"
git push
else
echo "没有检测到文件更改,跳过提交"
fi

按自己的需求修改源代码

如果你会 js,可以自行修改代码,或按 我的教程 进行 csv 节点名称格式化的修改。我的仓库 已经进行过修改,其中的 明文源码2.js 文件即是。下文代码 js 文件名以 明文源码2.js 为例,如果你修改后的文件名不是这个,请自行修改 yml 文件中对应的文件名。

自动混淆修改后的 明文源码2.js

在自己仓库的 .github/workflows/ 目录新建 obfuscator2.yml 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
name: Obfuscate js2

permissions:
contents: write

on:
push:
paths:
- 明文源码2.js # 根据变量定义的文件名,需要手动指定
workflow_dispatch:

jobs:
obfuscate_and_update_worker:
name: Obfuscate js2
runs-on: ubuntu-latest

env:
SOURCE_FILE: 明文源码2.js # 原始 JavaScript 文件
OUTPUT_FILE: jiami2.js # 混淆后的输出文件

steps:
# 步骤 1: 检出仓库代码
- name: Checkout repository
uses: actions/checkout@v3

# 步骤 2: 设置 Node.js 环境
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18

# 步骤 3: 安装混淆工具
- name: Install obfuscation tool
run: |
npm install -g javascript-obfuscator

# 步骤 4: 对 $SOURCE_FILE 进行混淆加密并生成 $OUTPUT_FILE
- name: Obfuscate ${{ env.SOURCE_FILE }}
run: |
javascript-obfuscator $SOURCE_FILE --output $OUTPUT_FILE \
--compact true \
--control-flow-flattening true \
--control-flow-flattening-threshold 1 \
--dead-code-injection true \
--dead-code-injection-threshold 1 \
--identifier-names-generator hexadecimal \
--rename-globals true \
--string-array true \
--string-array-encoding 'rc4' \
--string-array-threshold 1 \
--transform-object-keys true \
--unicode-escape-sequence true
echo "已生成混淆后的 $OUTPUT_FILE 文件"

# 步骤 5: 检查 $OUTPUT_FILE 是否更新
- name: Check if ${{ env.OUTPUT_FILE }} is updated
run: |
git status
ls -l $OUTPUT_FILE

# 步骤 6: 提交并推送更改
- name: Commit and push changes
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git add $OUTPUT_FILE
git commit -m "更新混淆后的 $OUTPUT_FILE 文件" || echo "无更改,跳过提交"
git push

手动运行该 工作流 action,会在仓库根目录自动生成一个 jiami2.js 文件,这就是混淆后的你修改过的 js 代码

后续只要 明文源码2.js 文件的内容发生变更,github action 会自动更新 jiami2.js 文件,使用 jiami2.js 文件文件到 cf 以 worker 方式部署即可。

更为简单的方式

如果你的修改需求和我一样,仅仅需要统一格式化 csv 变量生成的节点名称,那么可以直接 fork 我的仓库,获取最新的我修改好的 明文源码2.js 文件。该仓库保持与 cm 仓库的自动同步(仅同步 明文源码.js 文件)

#github #节点