minikube在大陆的安装困难

腾讯云轻量看到有免费送的活动,送一个月国内的北京地区1c2g,竟然还可以免费升级2c4g,于是准备用minikube搭个环境玩玩。

k8s.gcr.io 因为在谷歌那边被墙,安装过程提示

❗ This bare metal machine is having trouble accessing https://k8s.gcr.io

💡 To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/

说得好像设置代理节能解决一样……

配置代理当然是不行的,不是代理不行,curl -vv看到代理通路没问题,但是代理gcr.io会被TCP RST断链

最终还是这个文档比较救命,他有两个选项明确的提到了Chinese mainland users应该设置什么

最终成功安装的命令如下

minikube start –image-mirror-country=cn –image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

这个阿里云镜像有点隐蔽,没在官方镜像站提及,直接打开出empty response

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=11p4b5ks441rn

当智能喂食机停摆……第二篇

书接上一回:https://a-li.me/851.html

从配网代码的回调里面看到,在配网成功后,会通过EsptouchActivity的TCP_SEND和UDP_SEND来尝试向设备投递信息,tcp端口是2003,udp是2002,投递的内容是邮件地址,也就是用户账号

jd-gui里面tcp部分发送代码不能很好的反编译,但也能看个大概,并且可以通过udp的部分做对比参考,看起来并没有特别的封包格式,直接字符串投递过去,设备应该会回显这个email内容,app侧做一个简单对比来确认配置成功。

尝试通过go写这个tcp client 发送我的邮件地址过去设备,一开始没有成功,忘了他代码里面有个特别编码,在邮件地址前后增加两个冒号,添加后发送成功,设备成功回显,并且也有声音提示,抓包这边也开始看到数据包不断往来。

从路由器tcpdump的流量来看,设备想要通讯的域名是juzilink.com,但是一直dns失败,域名不存在,whois查询发现这个域名大概是1个月之前过期了……当前处于赎回宽限期

在路由上做一个域名劫持到我的笔记本之后,可以看到喂食器设备尝试通过udp7000端口进行通讯,并且在失败若干次之后会有类似于重启的操作重刷dhcp

同样的我们拿go做个简单的udp server,看看设备会发什么过来

初步看数据内容比较像经过base64编码,并且有一些拼接封包迹象。选段通过标准base64解密得到一些二进制内容,没有获得有效的信息。但是有意思的是,从udp server这边可以看到发包很频繁(按键触发后1秒1个,3分钟后降到2秒1个,后面会降到最长5秒1个的样子),可能为心跳包(也有可能有会话属性,只是因为我空实现没回包设备无限重试),从上面图也可以推断为心跳包,因为相邻每个包内容只有1个字符变化,怀疑原始数据就是时间戳之类的,而且从这个变化也可能可以反推出base64用的码表顺序。

然而实际上除了这个心跳之外,包括按设备上的按键,都没有触发有明显差异的数据包,更别说从控制中心下行的数据。所以控制中心和设备这侧的问题始终无法解决。

未完待续

当智能喂食机停摆……

国庆假期回家,如往常一样set好猫猫的饮用水、摄像头和喂食机,结果却发现喂食机App无法正常工作了,无法在列表中刷出我的喂食机设备。考虑到可以远程控制,必然有个官方后台服务做类似于控制中心的角色,感觉那个服务可能歇菜了。App已经不能在App Store搜索到,手机上的版本连全面屏都尚未适配。App中Copy Right是2016-2018,搜索到的官方公众号也在18年停更。木得办法着急出门只能让猫猫敞开吃了……

回来一查,这个小桔智能喂食机,中山厂家小桔互联出品,域名orangelink.cn 2021年到期,但已经找不到可以打开的主页,先给域名持有人罗先生的邮箱发个邮件问问(交叉对比的天眼查这家公司的法人信息)

话说还有点想让喂食机复活,有那么几个思路:

  1. 抓包理出机器和后台控制中心通讯使用的域名、协议等,倘若协议比较简单,可通过路由器dns host把原控制中心域名转发到自有服务器,再mock一个控制中心的实现即可。
  2. 如果网络协议难以分析,可以从app入手,可以拿android的安装包反编译看看有什么线索。
  3. 再不济,因为机器上有手动出粮开关,我可以外挂其他设备例如m5stack(esp32)来做控制和远程通讯,在桥接手动出粮开关即可

首先尝试思路1,通过手机上的App直接进行抓包,可以看到请求发往api.orangelan.com:443,这个域名解析到一个香港的ip,但是由于SSL连接错误无法进行下一步,因此没能看到请求细节,在电脑上telnet 443尝试可以连上但是秒被断开。如果需要进一步探测需要mock一个https的server,做路由dns host和mitm重签名,暂时放一放,看看App反编译的思路有没有提示。

从搜索引擎拿到一个小桔App的Android版apk,尝试丢到在线反编译网站,发现腾讯乐固的痕迹,看不到什么实质内容。参考网上方法尝试用Xposed脱壳,但是由于我只有x86 Android虚拟机,没有适配的Xposed框架支持,于是改用frida的方式,可以轻松拿到3个dex文件,选择其中最大的那个(另外两个大小可以推测不是业务内容),通过dex2jar转换成jar,然后就可以通过jd-gui查看部分代码内容。

代码内容里面,从com.orangelink.orangepet_tencent.common 中找到一个ServiceMethod的class,里面有各种api的url,简单来看后台应该由asp技术搭建(确实跟不上潮流了)

再看了下其他代码,内容还是不少的。不过理论上app里面只包含app到设备,app到控制中心的内容,并不包含设备到控制中心的通讯内容,这部分还需要抓设备的包才能看到,设备可能还不像手机可以方便的做https mitm。

App到设备这一段,可以在代码里面看到一个叫 Esptouch 的东西,看了下Expressif家的一个协议,用于给相关设备配置Wi-Fi,感觉是公开协议的话比较好实现。从com.orangelink.orangepet_tencent.device 中 EsptouchActivity.class 的一个点击事件可以看到,配网需要ap的ssid,bssid和密码

如果采用的是标准的Esptouch协议配网,那么实际上Expressif自家有个demo app就可以用。一开始尝试死活不能成功,demo app并不能成功使喂食机重新配网,后来看App中提示Wi-Fi必须是2.4G的不能是5G的,而我是2.4G+5G融合信号,想着可能有影响,于是用主路由纯2.4G信号进行配网,秒可以。

在路由上tcpdump喂食机的流量,比较诡异,喂食机连Wi-Fi之后,只和s1a.time.edu.cn做了ntp对时,并未抓到和控制中心的通讯包

而且断电重启之后发现黄灯闪烁,依然停留在配网模式。因此怀疑在配网成功之后,原喂食机App需要把用户信息包含密钥投递到喂食机,喂食机才能用这些信息和后台控制中心联网,所以接下来还要看看配网之后的设备初始化(用户绑定/设备远程注册)流程,未完待续……

参考内容:

https://www.tianyancha.com/brand/b0c8d9052

https://xz.aliyun.com/t/7670

https://www.jianshu.com/p/3ae7ef9b4d13

https://www.espressif.com/zh-hans/products/software/esp-touch/overview

https://www.espressif.com/sites/default/files/documentation/esp-touch_user_guide_cn.pdf

https://blog.csdn.net/flyingcys/article/details/49283273