『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 11337|回复: 11

[进阶教程] 小米多模网关锁定更新新方案

[复制链接]

1

主题

31

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
金钱
191
HASS币
0
发表于 2021-2-5 10:18:44 | 显示全部楼层 |阅读模式
本帖最后由 gogogo2000 于 2021-2-5 14:51 编辑

前几天入手小米多模网关,拆机降级到自定义固件1.4.6后使用升级锁(Firmware update lock)尝试锁定固件不让升级,结果没用。开关永远是关闭状态的,并且测试发现真的能升级…………那一升级不就凉凉了……

研究了大神的升级锁的原理后发现实际是使用chattr +i指令锁定了/data/firmware.bin和/data/firmware_ota.bin两个文件使他不可写入来实现的,但由于某些网络原因,新busybox下载失败,于是寻找其他解决方案。
仔细观察进程列表会发现有个叫firmware_ota的进程,这个就是网关的升级OTA进程了(1.4.7后消失,应该是改名了),只要杀死该进程即可阻止升级了,然而……这进程有守护……
init-+-awk
     |-basic_app---{basic_app}
     |-daemon_app.sh-+-Lumi_Z3GatewayH-+-Lumi_Z3GatewayH
     |               |                 `-2*[{Lumi_Z3GatewayH}]
     |               |-homekitserver---2*[{homekitserver}]
     |               |-2*[logger]
     |               |-mijia_automatio
     |               |-tail
     |               |-zigbee_agent
     |               `-zigbee_gw---2*[{zigbee_gw}]
     |-daemon_miio.sh---sleep
     |              `---firmware_ota 


对的,就是这个daemon_miio.sh,而且你不能杀死他,因为他还负责了别的进程例如homekitserver的守护,没了他,那些进程崩溃就起不来了。
守护位于/user/app/bin/daemon_miio.sh,直接划重点:
        if [ "`ps -ww | grep firmware_ota | grep -v grep`xx" == "xx" ];then
            $APP_PATH/firmware_ota 2>&1 | logger -t "<OTA>" &
            echo "firmware_ota --- dead ---reboot"
        fi
看到了吧,这个守护设计非常简单,他只检测进程列表中有没有firmware_ota这几个字而已,要欺骗很简单。

在/data下创建nofirmware_ota,内容为
#!/bin/sh
while (( true ))
do
  killall firmware_ota
  sleep 30
done
处于谨慎的目的,循环杀死ota进程,实际上在第一次杀死后,他就不会重生了。为什么呢?因为我们这个杀进程的shell中也含有firmware_ota几个字,守护进程认为ota进程还活着就不会重启了~
在/data/run.sh中加入nofirmware_ota的自启动,可以保证在网关重启后第一时间杀死ota进程并不会重生。
#!/bin/sh

/data/nofirmware_ota &

重启测试,完美解决升级。


评分

参与人数 2金钱 +32 收起 理由
+ 20 厉害了word楼主!
咸味土豆 + 12 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

4

主题

341

帖子

2622

积分

金牌会员

Rank: 6Rank: 6

积分
2622
金钱
2281
HASS币
0
发表于 2021-2-5 10:55:59 | 显示全部楼层
进米家把自动升级关了不就好了
回复

使用道具 举报

0

主题

173

帖子

1403

积分

金牌会员

Rank: 6Rank: 6

积分
1403
金钱
1230
HASS币
0
发表于 2021-2-5 11:33:57 | 显示全部楼层
我的顯示正常,沒有測試過是否能正常阻擋


Xnip2021-02-05_11-32-53.png
回复

使用道具 举报

1

主题

31

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
金钱
191
HASS币
0
 楼主| 发表于 2021-2-5 12:33:38 | 显示全部楼层
Solita 发表于 2021-2-5 10:55
进米家把自动升级关了不就好了

小米的东西你关掉自动升级可不是绝对的,说不定哪天就升级了,或者某天手滑在固件升级那边点了一下全部更新,他没有提供取消的按钮的
回复

使用道具 举报

1

主题

31

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
金钱
191
HASS币
0
 楼主| 发表于 2021-2-5 12:34:41 | 显示全部楼层
本帖最后由 gogogo2000 于 2021-2-5 13:16 编辑
jasonlai79 发表于 2021-2-5 11:33
我的顯示正常,沒有測試過是否能正常阻擋

问题解决,需要 https://busybox.net/downloads/binaries/1.21.1/busybox-mipsel ​​​​​​​​​​​​​​​​这个版本的busybox提供了chattr。和固件版本无关,这是Gateway v3插件动态下载的。
回复

使用道具 举报

3

主题

334

帖子

2018

积分

金牌会员

Rank: 6Rank: 6

积分
2018
金钱
1684
HASS币
0
发表于 2021-2-5 19:18:45 来自手机 | 显示全部楼层
nodered一个流的事
回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

发表于 2021-2-9 18:45:27 | 显示全部楼层
楼主太机智了!就喜欢这种钻研的精神!
回复

使用道具 举报

0

主题

11

帖子

132

积分

注册会员

Rank: 2

积分
132
金钱
121
HASS币
0
发表于 2021-2-20 21:00:10 | 显示全部楼层
楼主牛。这个方法好,解了心头患。
回复

使用道具 举报

21

主题

428

帖子

2431

积分

金牌会员

Rank: 6Rank: 6

积分
2431
金钱
1998
HASS币
20
发表于 2021-2-23 15:41:58 | 显示全部楼层
改版米家自带屏蔽升级没有?
* enabled 'telnetd'
* disabled gen password
* removes password if exists
* mosquitto listens external interface (port openned)
* run on startup '/data/run.sh'
* added 'curl'
* added 'dropbear' (to start add in '/data/run.sh' line '/bin/dropbear -R -B')
* replaced 'silabs_ncp_bt' with modified version (works without internet)
* added 'sftp-server' for dropbear
* added 'socat', 'ser2net', 'htop', 'tcpdump', 'ldd', 'strace', 'gdbserver'
* created '/dev/tty' (some programs need it)
* added '/usr/share/terminfo' (some programs need it)
* added mod version to '/etc/rootfs_fw_info'
* added greeting info (fw version, ip, mac, token and etc)
* added '/data/bin' in $PATH and '/data/lib' in $LD_LIBRARY_PATH
* created symlink '/.profile' to '/data/.profile (useful for alias and etc)
回复

使用道具 举报

1

主题

31

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
金钱
191
HASS币
0
 楼主| 发表于 2021-3-8 14:44:19 | 显示全部楼层
AnyLine 发表于 2021-2-23 15:41
改版米家自带屏蔽升级没有?
* enabled 'telnetd'
* disabled gen password

改版固件是没有屏蔽升级的,屏蔽升级都是第三方脚本的功劳。例如最常见的Gatewayv3中的脚本会下载busybox,然后调用chattr来屏蔽等。

光是刷固件不能屏蔽更新。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-15 04:23 , Processed in 0.296410 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表