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

标题: 小米音箱DIY指令探索(一) [打印本页]

作者: rainmote    时间: 2021-9-14 14:41
标题: 小米音箱DIY指令探索(一)
本帖最后由 rainmote 于 2021-9-14 14:43 编辑

有台小米音箱万能遥控版,型号是LX05A,探索如何进行自定义指令,比如控制kodi,iptv切换频道等。

如何利用串口TTL登陆shell环境?
经过探索我一共试过2种方法:
1. 利用SN计算密码
看到一篇帖子提到最新已经失效,我目前没遇到。
可以利用已知的几个uuid+自己的SN试试。
  1. import hashlib
  2. sn = '换成你的SN'
  3. def calc(uuid):
  4.     md5 = hashlib.md5()
  5.     md5.update(str(sn + uuid).encode())
  6.     s = md5.hexdigest()
  7.     print(s.lower()[:14])
  8.    
  9. calc('9C78089F-83C7-3CDC-BCC9-93B378868E7F')
  10. calc('B0168A6D-119A-F21A-DA58-980732F80A19')
  11. calc('5775B10D-15C0-7827-97B9-88EA07FCA97A')

  12. # 7745c21148c36d
  13. # a0ccbd2c6c2e46
  14. # 88e3bb3369a90c
复制代码


2. 利用uboot修改启动参数
这里启动需要登陆主要原因是/etc/inittab里面有
::askconsole:/bin/ash --login
把--login参数去掉就好了,当然我们没改固件当然没法直接改。
这里就需要先进入uboot,修改启动参数来实现。
小米uboot做了部分加固,默认启动按任意键进入uboot被屏蔽了。
经过探索,在uboot启动过程中可以不断发送stopgs来强制进入uboot,我是用coolterm这个串口工具提前输出好字符串一直回车发送成功进入。
进入之后,利用env print打印环境变量,发现有2个系统启动参数(小米音箱可能都是两个),可以发现setargs_first和setargs_second里面有init参数。
经过尝试,修改second启动参数来测试:
  1. setenv setargs_second setenv bootargs console=ttyS0,115200 root=/dev/nande rootwait init=/bin/ash cma= loglevel=8 partitions=env@nanda:kernel1@nandb:rootfs1@nandc:kernel2@nandd:rootfs2@nande:misc@nandf:private@nandg:crashlog@nandh:UDISK@nandi
复制代码
然后启动
  1. run setargs_second boot_second
复制代码
如果正常就会直接进入ash的shell环境中。

另外,uboot里可以把启动时delay 0修改为3,然后保存,下次就可以按任意键进入uboot了。


如何dump出rootfs文件系统?
进入系统,发现除了/data目录外,其他都是只读的,为了能ssh登陆或者取消登陆等,我们需要修改/etc/下面一些配置。
首先看下rootfs对应的设备
  1. / # cd /dev/by-name/
  2. /dev/by-name # ls -ltr
  3. lrwxrwxrwx    1 root     root            10 Jan  1  1970 rootfs2 -> /dev/nande
  4. lrwxrwxrwx    1 root     root            10 Jan  1  1970 rootfs1 -> /dev/nandc
  5. lrwxrwxrwx    1 root     root            10 Jan  1  1970 private -> /dev/nandg
  6. lrwxrwxrwx    1 root     root            10 Jan  1  1970 misc -> /dev/nandf
  7. lrwxrwxrwx    1 root     root            10 Jan  1  1970 kernel2 -> /dev/nandd
  8. lrwxrwxrwx    1 root     root            10 Jan  1  1970 kernel1 -> /dev/nandb
  9. lrwxrwxrwx    1 root     root            10 Jan  1  1970 env -> /dev/nanda
  10. lrwxrwxrwx    1 root     root            10 Jan  1  1970 crashlog -> /dev/nandh
  11. lrwxrwxrwx    1 root     root            10 Jan  1  1970 UDISK -> /dev/nandi
复制代码
我们找一个可以写的(且比较大的)目录,利用dd把rootfs2 dump出来
  1. /dev/by-name # df -h
  2. Filesystem                Size      Used Available Use% Mounted on
  3. rootfs                   24.0M     24.0M         0 100% /
  4. /dev/root                24.0M     24.0M         0 100% /
  5. tmpfs                    60.1M      6.7M     53.4M  11% /tmp
  6. tmpfs                   512.0K         0    512.0K   0% /dev
  7. /dev/by-name/UDISK       23.2M      2.2M     19.8M  10% /data
  8. /dev/by-name/UDISK       23.2M      2.2M     19.8M  10% /etc/shadow
  9. /dev/by-name # dd if=/dev/nande of=/tmp/rootfs2.img
复制代码
接着我们利用scp把rootfs2.img复制到其他电脑上,安装squashfs工具,利用unsquashfs来解压出来,比如把/etc/inittab改下,然后再用squashfs压缩回去
  1. unsquashfs -s old.img
复制代码
注意压缩的-b 262144是上面unsquashfs -s old.img命令输出的block size。


修改且打包好了,再用scp传会到/tmp目录,然后利用dd刷进去。
  1. dd if=/tmp/new.img of=/dev/nande bs=1024
复制代码
然后重启,进入uboot,切换到系统2启动起来。

如何抓https包?
抓https包核心就是把自签名证书导入到设备中,不校验(忽略)HTTP证书问题的请求就比较方便了。
把burp证书导出,利用openssl转成crt格式。
然后计算hash值
  1. openssl x509 -inform PEM -subject_hash -in burp.crt
复制代码
在把证书拷贝到/etc/ssl/certs,利用ln -sf burp.crt xxxxxx.0建立软连接。

证书安装完就可以转包了,可以利用电脑分享热点。
然后使用iptables把http/https流量镜像/转发到burp的8080端口,镜像用TEE模块
  1. iptables -t nat -A PREROUTING -p tcp -s 192.168.100.2 --dport 80 -j REDIRECT --to-port 8080
  2. iptables -t nat -A PREROUTING -p tcp -s 192.168.100.2 --dport 443 -j REDIRECT --to-port 8080
复制代码

跨机器用DNAT或者在设备上利用route命令修改默认网关为指定机器。


参考资料
https://www.freebuf.com/articles/endpoint/281185.html



作者: 囧    时间: 2021-9-15 08:35
楼主太牛了,曲高和寡啊!
作者: whxciotw    时间: 2021-9-15 10:53
膜拜大神
作者: lzzmn    时间: 2021-9-15 15:20
写的太好了。
完全看不懂
作者: firelion    时间: 2021-9-18 00:08
顶楼上                。
作者: johnnyit    时间: 2021-10-12 11:13

作者: maske2808    时间: 2025-6-24 06:00
大佬,请问你的lx05a还能ssh吗,求方案,我想在lv05a上做airplay,做好了也会出方案




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5