0%

在 ipv6 only 的服务器搭建 websocket 代理服务,用 Cloudflare 的 Workers 做反代连接,客户端可自选 Cloudflare CDN 的 ipv4 ip 连接。
因为 Workers 不允许 ip 直连,所以要有一个域名。

SS-Rust 的配置:

1
2
3
4
5
6
7
8
9
10
{
"server":"127.0.0.1", # 如果SS直接对外开放,这里应该改为监听ipv6地址,端口改成443
"server_port":14114,
"password":"",
"method":"none", # 改为不加密,可减轻某些设备的负担
"mode":"tcp_and_udp",
"plugin":"v2ray-plugin",
"plugin_opts":"server;path=/d1145141919810b", # path 应该尽可能长
"dns":"8.8.8.8"
}

Nginx 的配置:

1
2
3
4
5
6
7
8
9
10
11
server {
listen [::]:80;
server_name fakehost.name; # 这里设置为域名
location /d1145141919810b { # 这里的路径要和SS配置里的path一致
proxy_pass http://127.0.0.1:14114; # 设置SS监听的地址
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}

Workers 的配置:

1
2
3
4
5
6
7
8
9
10
11
addEventListener("fetch", event => {
event.respondWith(
fetch(
new Request(
"http://fakehost.name/d1145141919810b",
event.request
)
)
)
})

配置好后,客户端的 address 可以用自选 Cloudflare CDN 的 ipv4 ip,port 填 443,连接模式选 tls,hostname 填 Workers 获得的 host,path 随意。

鳄梨酱 = guacamole = OnePlus 7 Pro

选择:

从发布时就一直想买的手机,也有很多人推荐,一直拖到现在,终于从官网买回来了~
在这个大家都是打孔全面屏的时代,我宁愿不要全面屏(Xiaomi Redmi Note 4 就挺好的),也不愿意在显示区域打孔,还有要求可折腾,所以这次换手机的时候就不再考虑 Xiaomi 了。
看到了 OnePlus 7 Pro,解锁无门槛,看了 XDA,包也挺多,甚至还有 Kali NetHunter 的官方支持,下单了!

体验:

到手后,发现比 mido 重了挺多,屏幕是无打孔的曲面屏,指纹是屏下光学指纹,稍微有点不习惯,而且可能是我录制时为了兼顾不同角度方向,录制的指纹不太好,并不能像宣传那样秒解锁。
前置升降式摄像头,因为并不怎么用前置摄像头所以不做评价;后置 3 摄像头,分别是广角,普通,微距 3 个不同的摄像头,对于没用过当代旗舰的我来说,感觉太高端了。
有 NFC,可以刷公交卡,无法复制加密卡(App 限制),可以解密后复制卡号再加密,但厂商数据块并不能完全复制,部分门禁可能不认。

折腾:

然后就是惯例的解锁和刷入 twrp,因为 guacamole 使用了 A/B 分区方式,没有传统的 recovery 分区,recovery 已经包含在 boot 分区里了,所以应该使用 fastboot boot twrp.img 进入 twrp,然后刷入 twrp 的安装包。
如果想在刷机后保留 twrp 和 magisk 的话,需要按以下顺序刷入:
进入 twrp,刷入 ROM 包;
刷入 twrp 安装包;
刷入 magisk 安装包。
OTA 更新也是,只不过 OTA 更新的操作步骤是,在系统里写入更新后不要重启,在 magisk 刷入 trwp 后再安装 magisk。

更新到 Android 11 后,twrp 暂未支持解密分区,如果分区有加密,进入 twrp 会 bootloop。从 3.6.0 起已支持。
获取 root 的方法:
去官网下载全量包,解压拿到 payload.bin
使用 payload_dumperboot.img 解出来;
进入系统安装 magisk app,选择 boot.img 打补丁;
进入 fastboot 模式,刷入 fastboot boot boot.img
然后在 magisk app 里再次安装即可。

查看槽位:fastboot getvar current-slot
切换槽位:fastboot set_active a

系统:

H2OS:广告。google play 套件不完全。

OxygenOS:UI 类原生,但少了很多设置。Alipay 可以用指纹,Wechat 不可用。支持双 VoLTE 双 4G。

Pixel Experience:未深度测试使用。SIM 卡设置可能不正常,不支持指纹,不知道后续有没有更新修复。

Havoc:虽然有带 Gapps 的版本,但信号差。

所以暂时选择了 OOS。(以上内容仅代表发文时的状态,现在情况可能有所改变)
从类原生切换过来,还是有点不习惯。修改了部分设置。

关闭浮动通知:adb 执行 settings put global heads_up_notifications_enabled 0 或者通过 Quick Settings 关闭

删除部分应用:
删除 /data/india 文件夹
获取当前应用包名:dumpsys window | grep mCurrentFocus
显示用户列表:pm list users
卸载:pm uninstall --user 0 包名,恢复:cmd package install-existing 包名

1
2
3
4
work-life balance(com.oneplus.opwlb)
禅定模式(com.oneplus.brickmode)
一加账号(设置顶部那个烦人的东西,com.oneplus.membership,com.oneplus.account)
提示和帮助(com.oneplus.wifiapsettings)

2022/03/13 更新:
Magisk 发布更新,移除了 MagiskHide 功能,新的隐藏方式改为 Zygisk
找到了实现电量条的方式:安装 LSPosed 框架,再安装 GravityBox 找到电量栏功能。
一加公交卡不再需要去 APKMirror 下载,直接下载 OPPO 软件商店就可以更新。
或者可以从 H2OS 提取,解包拿到 system.img 提取 apk 安装就好。

2024/01/02 更新:
找到了进入工程模式的方法:
https://technastic.com/oneplus-secret-codes-hidden-settings/
https://community.oneplus.com/thread/1504461

先在拨号输入 *#06#,得到 IMEI 1,粘贴到 OnePlus Unlock Code Generator 生成解锁代码,然后输入 *#*#5646#*#*,在扫码界面直接返回,手动输入解锁码,解锁完成后,可以通过 *#808# 进入工程模式。
如果想扫码进入,可以生成内容为 op_eng://解锁码 的二维码使用。
在 工程模式 ->Charger (普通充电器) 中,多次点击 电池容量 栏,可以显示电池健康度。

之前 mido 刷的 AEX 经常出现卡死重启的问题,趁着有空,决定要升到 Android 10 了。
使用的 ROM:PixelExperience_Plus_mido-10.0-20200524-1251-OFFICIAL
使用的 Recovery:OrangeFox-R10.1_1-Stable-mido
使用的内核:3.18.140-Ethereal-28.0~Nuance
Root:Magisk
顺便逛了一下 XDA,发现了修改开机第一屏的方法

使用体验:
还是熟悉的感觉,因为自带了谷歌全家桶,不用刷 GApps 了。

网络去叉,还是和 8.1 的一样,使用以下命令:

1
adb shell settings put global captive_portal_https_url https://connect.rom.miui.com/generate_204

未设置前,使用 adb shell settings get global captive_portal_https_url 显示为 null,在 AEX 也是如此,据说系统语言选择为中文的时候默认是设置为 V2EX 的站点,在 AEX 用命令替换了无效,在 PE 替换倒是成功了。

目前没什么大问题,就这样。
哪天 mido 被淘汰了,也可以试试这个 Ubuntu Touch for Redmi Note 4X

最近在写 Arduino 的时候发现一种新的初始化方式,通过寄存器来控制端口,这种方法可以更快的完成端口初始化。

阅读全文 »

打开网页,Ctrl+Shift+C 调出开发者工具,点选需要按下的按钮或元素,查看 html 源码,找到多个元素的相同点
例如:

1
2
3
<button aria-label="按钮 1" type="button" class="Button VoteButton VoteButton--up">按钮 1</button>
<button aria-label="按钮 2" type="button" class="Button VoteButton VoteButton--up">按钮 2</button>
<button aria-label="按钮 3" type="button" class="Button VoteButton VoteButton--up">按钮 3</button>

可以看出,这些按钮的 class 是相同的,都是”Button VoteButton VoteButton–up”

打开 Console,输入:

1
document.getElementsByClassName("Button VoteButton VoteButton--up")

可以看到返回了一堆结果

接下来开始测试点击效果

1
document.getElementsByClassName("Button VoteButton VoteButton--up")[0].click()

如果没有意外,第一个按钮的点击事件已经被触发了

那么开始写批量脚本:

1
2
3
4
var buttons = document.getElementsByClassName("Button VoteButton VoteButton--up");
for (var i = 0; i < buttons.length; i++) {
buttons[i].click();
}

或者

1
2
3
while(document.getElementsByClassName("Button VoteButton VoteButton--up")[0] != null){
document.getElementsByClassName("Button VoteButton VoteButton--up")[0].click();
}

这就完成了,可以把页面上所有按钮都点一遍!