前言使用场景 - 境外卡保号为什么要用随身WiFi做短信转发配置随身WiFi服务器1. 随身WiFi购买2. 基础系统配置3. 安装Magisk并去除原有服务安装Magisk:教程有很多,不赘述了(如果是从咸鱼买,你可以让卖家帮你刷好)删除原有服务配置Xposed Dalvik Systemless解除系统云控(去除自动重启、自动飞行模式等)4. 配置各种服务:短信转发、SSH、ADB5. 配置Magisk自启动脚本:自动开启WiFi脚本踩坑随记(我干了啥)不用ARDC,基于screencap和input tap强行启用magisk把随身WiFi连上ARDC清除原有的服务配置随身WiFi短信转发让随身Wifi不自动开启热点让随身WiFi自动设置时间随身WIFI的SSH服务器
前言
使用场景 - 境外卡保号
- 例:Vodafone保活
- 需180天消费一次,如发送一次短信
- 180天充值一次
- 根据我之前用CMlink的经验,我绝对会忘,所以我肯定得长期挂着
为什么要用随身WiFi做短信转发
- 其他方案没法在卡多的情况下用
- 手机:
- 一个价格一般100左右,甚至更高
- 体积大
- 关屏的时候不好保活,长期充电容易过充
- 树莓派:
- 树莓派价格懂的都懂,模块价格也不低
- 高档的随身WiFi(如华为)
- 价格高
- 固件不开放,无法远程控制
- 随身WiFi的优点:
- 体积小:一个大号U盘
- 价格极低:(闲鱼20~30元不等,开车时则更便宜,可能会便宜到10~20元)
配置随身WiFi服务器
下面所有的相关文件均可在 https://github.com/NyaMisty/UFISmsTools 中下载
1. 随身WiFi购买
- 建议通过闲鱼购买UFI001C或UFI003的板子,刷机资源多,可玩性高
- 中芯微的方案虽然全网通,但不可以用ADB
- 本文使用UFI001C
2. 基础系统配置
- 安装Launcher:也有人叫6k桌面,在很多 “随身WiFi准备工具” 里面有
- 连接WiFi, 启用互联网时间
- 否则很多东西都用不了(因为TLS证书验证依赖于时间)
- 禁用移动数据,避免高昂流量费
- 经测试移动网络被关闭后不会自动启用
- 经测试移动网络被关闭后热点仍然可用
3. 安装Magisk并去除原有服务
安装Magisk:教程有很多,不赘述了(如果是从咸鱼买,你可以让卖家帮你刷好)
- 我用的是 “纸盒UFI系列全能刷机”
- 直接在fastboot刷入我对应型号的boot.img就可以了
- 刷完boot.img后装好Magisk apk即可
- 配置Magisk
- 连上WiFi,完整安装Magisk
- 设置magisk自动允许root请求
删除原有服务
- 删除/system/priv-app的cpeweb apk
- adb shell里面跑
su mount -o remount,rw / mount -o remount,rw /system rm /system/priv-app/cpeweb.apk
- (强迫症可选)删除/data/dalvik-cache的cpeweb odex
配置Xposed Dalvik Systemless
- 下载并安装Xposed Installer 2.6.1
- 这个版本支持4.4.4,并且安装包自带Xposed框架文件(新版需要链接官网下载,官网已经down)
- 安装Xposed框架
- 进入设置,切换安装方式为 Recovery 写入SD卡安装
- 然后安装xposed_dalvik这个Magisk模块
- 需要安装我的魔改版,否则ARDC会由于linker的warning message出现异常,无法识别输出
adb push xposed_dalvik-mistymod.zip /sdcard adb shell su -c magisk --install-module /sdcard/xposed_dalvik-mistymod.zip
adb reboot
解除系统云控(去除自动重启、自动飞行模式等)
- 新版的随身WiFi大量出现云控、自动飞行模式等
- johny.luo大佬(https://blog.csdn.net/jonhy_love/article/details/132757633)选择手动patch SystemUI.odex,这样做通用性比较差,而且odex修改相比dex更加困难
- 所以选择用Xposed来hook,禁用ElinkAutoTestService
- 安装
ElinkDisableMod.apk
,在Xposed中启用模块,然后重启即可 - 如果有hook不完全的地方,也可以自己进一步魔改,hook更多的逻辑
4. 配置各种服务:短信转发、SSH、ADB
- 配置短信转发:使用GitHub pppscn大佬的SmsForwarder
- 安装:最新版因为Gradle原因无法在随身Wifi上面跑,目前降级Gradle的PR已经合并,等待新版发布
- 配置:
- 通用设置:转发短信&通话(来电提醒)、去除重复(4s)、开机自启、增强保活
- 推送通道:必须使用https的通道,因为为了在Android4.4支持TLS1.2,pppscn做了很多黑魔法,HTTP不再可用
- Frpc
- 端口1是5000,短信转发自己的服务器
- 端口2是2222,ssh的端口
- 记住要在保存的时候勾选开机自启
- 配置SSH:使用SSHelper
- 最高使用11.4版本的(12.0前虽然支持4.4,但是sshd会启动失败,报符号错误)
- 记住要勾选开机自启
- 配置ADB:允许WiFi连接(或修改adb端口)
- 原有端口可能并不是5555而是10242,可以用这个方法改一下方便记
su mount -o remount,rw / mount -o remount,rw /system setprop persist.adb.tcp.port 5555
5. 配置Magisk自启动脚本:自动开启WiFi脚本
- 在/data/adb/service.d下面创建脚本(adb push传进去),并chmod 755
- enable_wifi.sh:在系统启动后自动打开WiFi,如果1分钟内都没有连接到则切换到热点状态
- 有些厂商脑子有问题,使用的是模拟点击的方法来启动热点,所以新版脚本加入了循环启动WiFi的逻辑
#!/system/bin/sh LOGF=/data/adb/enable_wifi.log rm -f $LOGF echo "Env info:" >> $LOGF export >> $LOGF SVC=/system/bin/svc wifiMode() { if [ -z $1 ]; then echo "Enabling Wifi..." fi $SVC data disable # avoid expensive data usage! service call wifi 29 i32 0 i32 0 # name=null, enable=false service call connectivity 40 i32 0 $SVC wifi enable $SVC wifi prefer } tetherMode() { echo "Enabling Tether..." $SVC data disable # avoid expensive data usage! $SVC wifi disable service call wifi 29 i32 0 i32 1 # name=null, enable=true service call connectivity 40 i32 1 # usb tether enable } checkWifi() { if ip a show wlan0 | grep inet | grep -v "scope link" | grep -v "169.254" >/dev/null; then echo "Has WiFi IP" return 0 else echo "No WiFi IP" return 1 fi } keepWifi() { while true; do wifiMode quiet sleep 2 done } mainFunc() { set -x if [ -z "$DEBUG" ]; then echo "Waiting for bootup!" sleep 60 fi for i in $(busybox seq 1 20); do # 1min not connected then go hotspot wifiMode; if checkWifi; then echo "Wifi Connected, good to go!" keepWifi & break fi if [ $i = 20 ]; then echo "Failed to connect to WiFi! Going to tether mode!" tetherMode; break fi sleep 3 done echo "Updating clock!" for i in $(busybox seq 1 20); do am broadcast -a android.intent.action.NETWORK_SET_TIME -f 536870912 sleep 2 done set +x fg } mainFunc >> $LOGF 2>&1
- autorestart_adb.sh:每5分钟重启一次adbd,避免WiFi连接闪断后,adb一直offline连不进来(一直提示offline,disconnect也没用)
- 配合这个脚本,出现offline时adb kill-server后再connect就行
#!/system/bin/sh while true; do sleep 300 # 5min adb keep alive setprop ctl.restart adbd done
踩坑随记(我干了啥)
不用ARDC,基于screencap和input tap强行启用magisk
把随身WiFi连上ARDC
- 找出随身wifi在我笔记本上连不上的原因
- 找出随身wifi一直重启的原因
- TypeC的问题
清除原有的服务
- 原有服务是cpeweb,会自启动、强行全屏
- 尝试pm disable,Launcher选择里面没有他了,但是service还在
- 最后发现是system app,mount rw后删除即可
配置随身WiFi短信转发
- Android 4.4报VerifyError
- Android 4.4要么没法用TLS,要么没法用HTTP
- 我的推送WebHook在CF上,手机不好开代理,用nginx配了一个走梯子的CF转发
让随身Wifi不自动开启热点
- 寻找WiFi自动打开的位置
- logcat中定位,发现setWifiEnabled提示均来自system_server进程
- 去rootfs中全局搜索找setWifiEnabled,发现除了cpeweb就是在frameworks里
- 在Frameworks里面找Wifi开启逻辑
- APKDB的工具没法直接把odex合并回dex
- 但frameworks里面还有jar,jar随便选了几个小的出来看发现是一样的
- 直接把所有jar提出来,用jadx打开,全局搜索发现在WifiManager初始化的时候会有个ElongXXX的Task,在里面会禁用WiFi并启用热点
- 由于嵌入在Framework里面,没法简单改
- 决定保留这段逻辑,然后在他跑完之后改
- 在启动后等待一段时间让他启动完成, 随后自动启用Wifi 如果WiFi一直链接失败(获取不到IP),则切换回热点模式
让随身WiFi自动设置时间
- 打开设置中对应开关
- 手动发送更新广播
随身WIFI的SSH服务器
- 配置SSH,4.4可以用sshelper,arachnoid.com/android/SSHelper/APK_release_archive/
- 但是很多版本不支持4.4
- 120 - 连接错误
- 115 - 连接错误
- 110 - 成功
- 114 - 成功
- 最后确认11.4是ok的
- 勾选自启动,配好密码