Chr_小屋 - 教程
type: channel
link: https://blog.chrxw.com/tag/教程/
items: 【Xposed开发笔记】 去除NGA客户端开屏广告
items: 【油猴脚本教程】P1 开发者工具的使用 & JavaScript 基础教程
items: 使用GitHub Action自动编译OpenWrt固件
items: 【油猴脚本开发教程】文章索引
items: 【过期】京东炸年兽自动脚本【1.8】
items: 【过期】双十一京东任务自动脚本【0.6】
items: 【过期】11.11淘宝天猫喵币脚本【0.2】
items: DirectoryLister 3.5.0 使用教程
items: 安卓Hook框架Frida入门介绍
items: AutoJS脚本使用教程

【Xposed开发笔记】 去除NGA客户端开屏广告
type: item
date: 2023-01-19T22:42:00+08:00
description: 前言 消失大半年，其中一个原因是工作了，大部分时间在给公司做开发，业余时间在写外包赚米，另一个原因就是拖延症犯了，越拖越想拖 过年放了半个月假，稍微有点时间做点自己一直以来就很想做的事——给NGA去广告，当然，JS教程也会安排上的 [...]

【油猴脚本教程】P1 开发者工具的使用 & JavaScript 基础教程
type: item
date: 2022-08-08T23:37:00+08:00
description: P1 开发者工具的使用 与 JavaScript 基础教程 教程索引 视频链接 (上) 视频链接 (下) 开发者工具的使用 F12 或者 菜单 -> 更多工具 -> 开发者工具 调出 切换中文 更改语言后重新打开开发者工具生效 或者 界面简介 元素 HTML 原文 HTML节点的属性 控制台 在任意Tab按ESC可以在下方调出 源代码 浏览网站中的所有资源 调试代码 网络 抓包工具 应用 查看本地储存的内容 Cookie Session LocalStorage JavaScript 基础教程 一些 JavaScript 学习资源 MDN 文档： https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 廖雪峰： https://www.liaoxuefeng.com/wiki/1022910821149312 菜鸟教程： https://www.runoob.com/js/js-tutorial.html uTools 插件 基本特性 单线程 弱类型 / 动态类型 大小写敏感 ' ," 通用 不强制使用分号 (建议统一) 语法很灵活 运行时: v8, NodeJS 基础语法 注释 //单行注释 /* 多行注释 */ 变量与常量 赋值操作符 var let const //定义变量/常量 var a = 1; var b; let c = 1; let d; const e = 4; //a,b,c,d,e 1 undefined 1 undefined 4 console.log("a,b,c,d,e",a,b,c,d,e); //Uncaught SyntaxError: Missing initializer in const declaration const f; //赋新值 a = 2; c = 3; //Uncaught TypeError: Assignment to constant variable. e = 1; //重复定义 //undefined var a = 6; let c = 6; //Uncaught SyntaxError: Identifier 'a' has already been declared let a = 6; //Uncaught SyntaxError: Identifier 'a' has already been declared const a = 6; //常量覆盖 const e = 6; //e 6 console.log("e",e); //在子域中覆盖(ES6引入) var ts = 1; let he = 2; { var ts = "aaa"; let he = "yyy"; //ts,he aaa yyy console.log("ts,he",ts,he); } //ts,he aaa 2 console.log("ts,he",ts,he); var 定义一个 变量 let 定义一个仅在作用域内生效的 变量 const 定义一个 常量，一旦定义无法修改，但是可以覆盖定义 使用相同的操作符可以覆盖定义同名的变量，但是不建议这么使用 使用 let 覆盖定义时不影响父作用域的同名变量 强烈推荐优先使用 let 定义变量，如果值不需要改变，建议使用 const 定义成常量 函数提升 //函数提升 foo(); // "bar" function foo() { console.log("bar"); } //这种写法的函数不会被提升 bar(); // 类型错误：bar 不是一个函数 var bar = function() { console.log("bar2"); }; 作用域 { } 定义代码作用域 (ES6的内容) 使用 let 定义的变量，在子域可以访问父域的变量，但是父域不能访问子域的变量 函数中定义的内容外部无法访问 子域中定义的函数，父域无法访问 //顶级作用域(最外层的作用域) let x = 114; { //子作用域 let b = 514; //x,b 114 514 console.log("x,b", x, b); } //函数内部其实也是一种作用域 function xbz() { let c = 233; //x,c 114 233 console.log("x,c", x, c); //Uncaught ReferenceError: b is not defined console.log("b", b); } xbz(); //匿名函数同理 (() => { let d = 3.14; //x,d 114 3.14 console.log("x,d", x, …

使用GitHub Action自动编译OpenWrt固件
type: item
date: 2022-01-28T22:06:00+08:00
description: 前言 本教程基于 LEDE 项目 首先需要安装Linux虚拟机或者使用WSL虚拟环境，这里使用后者 正文 准备工作 首先自然是配置依赖环境 sudo apt -y update sudo apt -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync 因为要对LEDE固件做一些修改，所以我们需要去Folk一份源码 然后把刚刚Folk的仓库clone到本地 x> 请不要下载Zip存档，这样操作会丢失git配置，导致后续操作无法继续 # PS: 这里换成自己的仓库的地址 git clone https://github.com/chr233/lede !> 请确保处于大小写敏感的文件系统下，否则无法使用配置工具（NTFS和FAT都不行, EXT4可以） 然后使用命令就可以进入配置菜单了 make menuconfig 编译配置菜单说明（部分） Target System (Broadcom BCM27xx) #选择处理器架构 Subtarget (BCM2711 boards (64 bit)) #选择处理器 Target Profile (Raspberry Pi 4B/400/4CM (64bit)) #预制配置文件 Target Images #固件映像设置 ramdisk # 内存盘, 硬件内存充裕的话可以打开，有效提升性能 Compression # 压缩等级(none表示不压缩) Root filesystem archives #根文件系统存档类型 cpio.gz tar.gz Root filesystem images #根文件系统格式 ext4 #适用于大容量闪存,易于修改分区大小,没有恢复出厂设置的功能 squashfs #适用于小容量闪存，不可修改分区大小，有恢复出厂设置的功能 Gzip images #Gzip存档 Image Options Kernel partition size #内核分区大小，建议64M到256M，足够了 Root filesystem partition size #跟文件系统分区大小，根据闪存大小自行设定 Make /var persistent #持久化/var(开启后重启软路由/var下内容会保留) 以下设置一般无需修改 Enable experimental features by default #默认启用实验性功能 Global build settings #全局编译设置 Advanced configuration options (for developers) #高级选项(仅供开发者) Build the OpenWrt Image Builder #编译OpenWrt镜像编译器 Build the OpenWrt SDK #编译OpenWrt SDK Package the OpenWrt-based Toolchain #打包OpenWrt工具链 Image configuration #镜像选项 以下可以根据需要选择要加入的附加组件 i> M代表编译成ipk包，不内置在固件中，可以之后单独安装，*代表内置在固件中 Base system #基本组件 Administration #管理员工具 Boot Loaders #引导程序 Development #开发者工具 Extra packages #额外包 Firmware #固件工具 Fonts #字体 Kernel modules #内核模块 Languages #额外的语言(Python3,PHP,NodeJS等) Libraries #系统库 LuCI #LuCI插件(一般只需修改应用和主题) Collections #合集 Modules #模块 Applications #应用程序 Themes #主题 Protocols #协议支持 Libraries #运行库…

【油猴脚本开发教程】文章索引
type: item
date: 2021-10-19T18:24:00+08:00
description: 前言 之前写过一篇教程，那个时候经验有限，很多地方讲的不是很明白 所以这是一篇重制版教程 计划每周一更，每次30min左右，大纲讲完以后会讲解一些例程 教程大纲 大概会涉及到的内容，顺序未定 开发环境配置（P0 文章 视频） VS Code Git 使用基础 远程 Git 仓库 脚本分发（P0 文章 视频） Greasyfork 使用 使用 WebHook 自动更新 开发者工具简介（P1 文章 视频） 元素 控制台 源代码 网络 应用 JavaScript基础 （P1 文章 视频） 变量与常量 作用域 数据类型与类型转换 执行流 Window 对象 Document 对象 Node 对象 Element 对象 初识油猴脚本 (P2 文章 视频) 两个简单的脚本源码解析 油猴脚本组成 (P2 文章 视频) 元信息 脚本 DOM 元素操作 数据持久化 localStorage 自定义 CSS 油猴脚本组成 元信息 脚本 库 CSS选择器与XPath语法基础 DOM元素操作 Event事件 数据持久化 序列化与反序列化 自定义CSS 库的使用与开发 正则表达式基础 同步函数与异步函数和并发 网络请求（XHR/Fetch） 油猴API 开发实战…… 联系方式 有任何问题直接留言或者私信即可 博客留言（Chrxw.com） B站私信 （Chr_@5805394） 电子邮件（chr@chrxw.com）

【过期】京东炸年兽自动脚本【1.8】
type: item
date: 2021-01-18T10:02:00+08:00
description: 前言 本脚本仅供学习交流之用，使用者如何使用与本文作者无关。 AutoJS下载 & 教程 [post cid="1235" /] 脚本 大部分沿用之前的代码，初步测试没有问题，遇到问题欢迎留言反馈 //JD不定时热更新活动页，请关注脚本更新 //遇到问题请在发布页留言： //https://blog.chrxw.com/archives/2021/01/18/1455.html //Ver 1.8 2021.01.23 //By Chr_(chr@chrxw.com) //========================= //更新说明 //重写了任务完成判断方式,防止偶尔报错 //优化数组访问,应该不会再越界报错了 //修复若干bug //新支持浏览频道任务 //修复加购和参加会员任务的问题（需要打开开关） //修复出现限时任务时报错的问题 //========================= //功能配置 //自动加入会员（设为true启用) let auto_join_vip = false; //自动完成加购任务（设为true启用) let auto_add_cart = false; //延时时间倍率（倍数越大延时越久) let sleep_t = 1.0; //========================= auto.waitFor(); console.show(); toast('\n脚本开始运行\n请切换到任务页\nBy Chr_'); for (let i = 0; i < 10; i++) { //等待切换到任务页 if (className("android.view.View").text("我的爆竹").exists() || className("android.view.View").text("集爆竹").exists()) { break; } rsleep(1); } if (!className("android.view.View").textStartsWith("邀请好友助力").exists()) { advclick(className("android.view.View").text("集爆竹").findOnce()); } toast("\n即将开始工作\n中途需退出请按【音量+】终止"); sleep(1000); for (; ;) { let flag = false; let skip = false; let tasks = className("android.view.View").textStartsWith("邀请好友助力").findOnce().parent().parent().children(); for (let i = 0; i < tasks.length; i++) { if (tasks[i].childCount() == 5) { tasks[i].child(4).click(); rsleep(1); advback(); skip = true; } } if (skip) { continue; } for (let i = 0; i < tasks.length; i++) { if (tasks[i].length < 4) { for (let j = 0; j < tasks[i].childCount(); j++) { log(tasks[i].child(j).text()); } continue; } let desc; let title; try { desc = tasks[i].child(2).text(); title = tasks[i].child(1).text(); } catch (e) { log(e); continue; } let btn = tasks[i].child(3); log(i, desc); if (desc.search("8秒") != -1) { if (checks(btn, title)) { advclick(btn); view(); flag = true; } } else if (desc.search("浏览可得") != -1) { if (checks(btn, title)) { advclick(btn); view2(); flag = true; } } else if (desc.search("关注频道") != -1) { if (checks(btn, title)) { advclick(btn); view3(); flag = true; } } else if (auto_join_vip && des…

【过期】双十一京东任务自动脚本【0.6】
type: item
date: 2020-10-25T15:30:00+08:00
description: 前言 x> 双十一活动已经过期，本文仅作存档 本脚本仅供学习交流之用，使用者如何使用与本文作者无关。 AutoJS下载 & 教程 [post cid="1235" /] 全民营业脚本 i> 如果遇到问题请在下方评论 脚本 //遇到问题请在 https://chrxw.com 留言 //Ver 0.6 2020.10.31 //By Chr_(chr@chrxw.com) //========================= //功能配置 //自动加入会员（设为false禁用) var auto_join_vip = true; //自动完成加购任务（设为false禁用) var auto_add_cart = true; //========================= auto.waitFor(); // console.show(); toast('\n脚本开始运行\n请切换到任务页'); for (var i = 0; i < 10; i++) { //等待切换到任务页 if (className("android.view.View").text("收取金币").exists() || className("android.view.View").text("立即解锁").exists()) { log('break'); break; } rsleep(1); } if (!className("android.view.View").textStartsWith("邀请好友助力").exists()) { advclick(className("android.view.View").text("领金币").findOnce()); } toast("\n即将开始工作\n中途需退出请按【音量+】终止"); sleep(2000); for (; ;) { var flag = false; var objs = text("去完成").find(); for (var i = 0; i < 10; i++) { if (objs[i] != null) { obj = objs[i].parent(); if (obj.children() >= 8) { break; } } } var tasks = obj.children(); for (var i = 2; i < tasks.length; i += 4) { var txt = tasks[i].text(); log(txt, i); if (txt.search("8秒") != -1) { var btn = tasks[i + 1]; if (btn.text() == "去完成") { advclick(btn); view(); flag = true; } } else if (txt.search("浏览可得") != -1) { var btn = tasks[i + 1]; if (btn.text() == "去完成") { advclick(btn); view2(); flag = true; } } else if (auto_join_vip && txt.search("成功入会可得") != -1) { var btn = tasks[i + 1]; if (btn.text() == "去完成") { advclick(btn); view3(); flag = true; } } else if (auto_add_cart && txt.search("5个") != -1) { var btn = tasks[i + 1]; if (btn.text() == "去完成") { advclick(btn); view4(); flag = true; } } if (flag) { break; } } if (!flag) { toast("\n脚本运行完毕\n模拟浏览任务全部完成（大概）"); break; } } //模拟浏览（浏览会场任务） function view() { rsleep(3); rslide(10); // className("android.widget.Image").text("vk image").findOne(5000); rslideR(1); rsleep(3); advback(); } //模拟浏览（直接返回） function view2() { rsleep(2); back(); rsleep(2); } //模拟浏览（开卡） function view3() { rsleep(2); var btn = className("android.v…

【过期】11.11淘宝天猫喵币脚本【0.2】
type: item
date: 2020-10-20T23:44:00+08:00
description: 说明 x> 双十一活动已过期，本文仅作存档 x> 目前淘宝已经开始全面检测脚本了，使用脚步后喵币收益只有1%，非ROOT环境模拟真人比较困难，因此本项目停更，看看京东检测严格不严格，有没有机会写个脚本 使用教程 [post cid="1235" /] 脚本 //遇到问题请在https://chrxw.com留言 //Ver:0.2 By Chr_(chr@chrxw.com) //延时倍数，1.0为基准速度，2.0比基准速度慢一倍，其他同理，求稳建议改大点 var sleep_ctrl = 1.2; auto.waitFor(); var key = new Array("去浏览", "去围观", "去观看"); toast('\n脚本开始运行\n请手动打开任务页\n\n【长时间闲置将自动退出】\n也可以按【音量+】结束运行'); for (var t = 0; t < 20; t++) { if (className("android.view.View").text("赚喵币").findOne(3000)) { if (!className("android.view.View").text("累计任务奖励").exists()) { className("android.view.View").text("赚喵币").findOne().click(); } sleep(1000); toast("\n即将开始工作\n中途需退出请按【音量+】终止"); for (; ;) { var btn = null; className("android.view.View").text("累计任务奖励").waitFor(); for (var i = 0; i < key.length; i++) { if (text(key[i]).exists()) { btn = text(key[i]).findOne(); break; } else { i++; } } if (btn != null) { btn.click() view(); } else { var bc = btn = text('去完成').find(); var flag = false; for (var i = 0; i < bc.length; i++) { var btn = bc[i]; var txt = btn.parent().child(0).child(0).text(); if (txt.search("逛一逛") != -1) { flag = true; btn.click() view(); } } if (!flag) { toast("\n没有定位到按钮\n可能任务已经完成\n请切换到下一个APP"); rsleep(5); break; } } } } } toast("\n长时间闲置，脚本自动退出"); exit(); //随机延时 function rsleep(s) { while (s--) { var t = random(900, 1200) * sleep_ctrl; sleep(t); } } //模拟返回 function advback() { for (var i = 0; i < 3; i++) { // if (!className("android.view.View").desc("返回").exists()) { // rslideR(1); // rsleep(2); // continue; // } back(); className("android.view.View").textContains("累计任务奖励").findOne(3000) if (className("android.view.View").textContains("累计任务奖励").exists() | className("android.view.View").textContains("赚喵币").exists()) { return; } } } //随机划屏 function rslide(i) { while (i--) { var x1 = random(400, 900); var y1 = random(1200, 1900); var x2 = random(400, 900); var y2 = random(1000, 1200); swipe(x1, y1, x2, y2, random(100, 300)); rsleep(2); } } //随机划屏，反向 function rslideR(i) { while (i--) { var x1 = random(400, …

DirectoryLister 3.5.0 使用教程
type: item
date: 2020-09-21T20:15:00+08:00
description: 前言 DirectoryLister是一款非常小巧的PHP文件浏览器，适合搭建一个简单的个人文件站，之前的教程使用的版本为2.7.1，现在的最新版本为3.5.0，新增了文件夹说明、文件搜索等功能。 我的示例站点：链接 安装步骤 环境需求 PHP版本为 7.2 及以上 安装PHP的 zip、DOM、Fileinfo 扩展，前两个宝塔面板自带，只需安装Fileinfo 下载源码 官方网站 GitHub 本地镜像 @> 本站只提供3.5.0版本下载，最新版本请从官方渠道下载 安装 下载好以后，解压到网站根目录，将 .env.example 文件重命名为 .env 文件，然后用编辑器打开 @> Windows下如果无法重命名的话，可以使用命令 rename .env.example .env !> 如果修改了 .env 文件但是配置不生效，解禁PHP的 putenv 函数即可 .env 配置文件说明 # 调试模式开关 APP_DEBUG=false # 语言设置(zh-CN即简体中文) APP_LANGUAGE=zh-CN # # 深色模式开关(蓝白/紫黑) DARK_MODE=false # 是否在文件列表下方显示Readme.md文件(如果存在Readme.md文件) DISPLAY_READMES=true # 在文件列表上方显示Readme.md文件(需要DISPLAY_READMES=true) READMES_FIRST=false # 是否允许将整个目录打包成ZIP下载(搜索栏左侧会显示打包下载按钮) ZIP_DOWNLOADS=true # # Google Analyitcs设置(要使用的话设置成资源ID即可) GOOGLE_ANALYTICS_ID=false # GOOGLE_ANALYTICS_ID=UA-XXXXXXXXX-X # # MATOMO_ANALYTICS设置 MATOMO_ANALYTICS_URL=false MATOMO_ANALYTICS_ID=false # # 排序设置，可选值如下，排序方式区别见下 # type, natural, name, accessed, changed, modified SORT_ORDER=type # 逆序排序开关 REVERSE_SORT=false # # 隐藏app目录 HIDE_APP_FILES=true # 隐藏.git目录 HIDE_VCS_FILES=true # # 时间格式 DATE_FORMAT="Y-m-d H:i:s" # 时区设置（Asia/Shanghai即上海时间） TIMEZONE="Asia/Shanghai" # # 可以计算Hash的文件的最大尺寸(单位是字节Bytes) MAX_HASH_SIZE=1000000000 # # 主页标题，显示在网页左上角(默认为“目录起始页”) HOME_TEXT="文件下载" # 页面缓存设置，设为false禁用缓存(默认值为"app/cache/views") VIEW_CACHE="app/cache/views" 如果能正确显示网页，说明安装成功了: 定制 i> 修改后需要清除页面缓存后才能看到效果，默认缓存目录为 app/cache/ ，删掉整个目录即可 网站标题优化 将 Home 修改成中文 文件路径为 app\src\Controllers\DirectoryController.php 改成想要的值，比如“主页” 定制标题格式 文件位置在 app\views\layouts\app.twig {{ title }} 是占位符，用来显示当前目录的名称，其他的文本都可以任意改，如果使用特殊符号记得转义 常用符号转义值：" ",& &,< <,> > EXE图标显示空白解决方法 打开app\config\icons.php 把所有 fas fa window 替换成 fab fa windows 即可 @> 原因是新版的 Font Awesome 貌似需要Pro才有这个图标…… 中文字体优化 修改版 app.css 下载: 链接 文件路径为 app\assets\app.css 隐藏特定的文件 在网站根目录下新建一个 .hidden 文本文件，在里面写入希望隐藏的文件名或者路径名即可，支持正则表达式 页面自定义 页眉模板文件：app/views/components/header.twig 页脚模板文件：app/views/components/footer.twig CSS文件：app/assets/app.css 本地化文件：app/translations/zh-CN.yaml

安卓Hook框架Frida入门介绍
type: item
date: 2020-07-18T14:52:00+08:00
description: 前言 一些链接： Frida：主页链接 GitHub Frida-Demo：GitHub 本文使用的工程文件：GitHub (包含项目源码和用到的工具) 准备工作 Frida是一个全平台注入框架，使用JavaScript编写注入代码，可以很方便的实现动态Hook。这里用Frida-Demo这个程序来演示。 一台Root过的手机或者带有完整Root权限的模拟器。 电脑端环境配置 安装Frida pip install frida frida-tools 测试Frida frida --version 配置好ADB，与真机或者模拟器连接，常用的连接方式如下： # USB连接 adb usb # 网络连接 adb connect 192.168.x.x 手机端环境配置 获取Frida-Server: 下载链接 注意要下载frida-server开头的文件，末尾的arm、x86代表适用的平台，真机就选择arm，模拟器选择x86。 至于选择32位的还是64位的frida-server，主要取决于目标APP是32位还是64位的，根据需要选择。 设置Frida-Server 首先把Frida-Server传到手机上： # 请将【 】中的内容修改为文件所在路径 adb push 【frida-server-12.10.4-android-arm】 /data/tmp/frida-server adb push 【frida-server-12.10.4-android-arm64】 /data/tmp/frida-server64 然后打开一个Shell： adb shell 运行以下命令： su cd /data/tmp chmod 700 frida-server* ./frida-server -l 0.0.0.0 & 最后一行加了个&，代表把frida-server作为后台任务启动，这样即使我们Shell连接，frida-server也不会被终止。 测试Frida-Server 我们打开另一个命令行，输入以下命令： # 如果使用USB连接 frida-ps -U # 如果使用网络连接 frida-ps -R 如果能看到手机进程列表说明设置成功了。 安装Frida-Demo练习程序 下载地址：GitHub 安装过程就不赘述了。 准备开发环境 Frida使用JavaScript编写注入代码，我们选择Python作为加载器。 我使用的是VSCode+Python3.8作为开发环境，配置方法参见另一篇博文：[post cid="1296" /] 也可以选择PyCharm，看个人喜好了。 首先新建一个run.py作为加载器，内容如下： import frida # PS: 现在的Frida好像是根据进程名称而不是包名来识别 # 如果提示attach失败就改成进程名,也就是Frida Demo再试试 process_name = 'infosecadventures.fridademo' # 发送信息回调函数 def on_message(message, data): if message['type'] == 'send': print(f"[*] {message['payload']}") else: print(message) if __name__ == '__main__': try: device = frida.get_usb_device() except: device = frida.get_remote_device() if not device: print("* 连接到Frida Server失败") else: process = device.attach(process_name) # 加载JS脚本 js = open('hook.js', encoding='utf-8').read() script = process.create_script(js) script.on('message', on_message) script.load() # 输入任意值结束 input() script.unload() 然后在相同的目录下新建一个hook.js来编写注入代码 console.log("脚本载入成功"); Java.perform(function() { //在这里编写Hook函数 }); 注入实战 我们打开Frida-Demo 如图，Frida Demo一共有3个模块，从左到右依次是【PIN密码爆破】【绕过root检测】【加密算法破解】。 我们先用工具分析一下代码，这个演示程序的代码没有经过混淆，而且去除了不必要的代码，很容易看。 我使用的是Jadx，把frida-demo.apk拖进去即可…

AutoJS脚本使用教程
type: item
date: 2020-05-22T12:23:00+08:00
description: 安装AutoJS 官方网站：【链接】，已经不提供AutoJS下载了，新版为AutoJS Pro，收费 本地下载：【链接】 开启无障碍服务 导入脚本 如果是文件形式，点击导入，然后选择下载的JS文件即可 如果是代码形式，点击文件，新建一个脚本，然后把代码粘贴进去即可 推荐设置 打开稳定模式、音量上键停止脚本。