Ubuntu build .Net Core App



Ubuntu 20.04,打算build Il2cppDumper 6.2.2 的 .Net Core 版本,因为作者没有上传二进制到releases里。

参考微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-ubuntu

环境装好后,准备仓库

Build 直接用 dotnet publish 完成

因为 Il2cppDumper 作者支持了多个framework,如果不指定就会报下边类似的错误

由于在 Linux 上build的,所以直接输出了可以执行的二进制文件(ELF,也+x了),不需要从github上下载之后用 dotnet 启动 dll 去执行了,dotnet 执行的方法也很简单



Ubuntu build .Net Core App by @sskaje: https://sskaje.me/2021/06/ubuntu-build-net-core-app/

红米音箱固件更新检查逻辑



前一篇,看到了https的协议内容,其中使用了 ota check 检查固件版本,但是实测返回出来的内容是一个只有3k不到的 HDR 开头的文件,猜测这个文件应该是一个加密或者压缩后的response,例如json。

ota这个命令在 /bin/ota,本身是个 shell 脚本,直接读内容,可以看到所有的命令调用的都是 matool 以及它的各个 symlink。其中命令

执行 ota ble,输出如下。(输出被我掐了,因为我怕直接进了更新,就没法调试了)

从charles里拿到rootfs的下载链接,找个linux下下来,直接 squashfuse rootfs_1.76.2_xxxxxx.bin /mnt/ 挂载了,可以看数据。

回过头来,研究协议和算法。

从 ota 这个脚本里看到,执行升级的时候,先把那个小文件下载为 /tmp/mico_ota.bin,再用 /bin/flash.sh /tmp/mico_ota.bin 。再从整个squashfs里找 “Start downloading” 这个字符串,发现在 /bin/skr 里。

再细看里边的代码,最终发现解包命令 miso -x xxx.bin,就在调用 skr 命令的前几行。解包完的目录里多了三个文件

其中 .json 文件里包含了 kernel 和 rootfs的下载链接。

再一个,检查更新的接口有个参数s,是一个签名参数。先ldd

再根据请求的关键词 countryCode,找到固件版本检查的接口构造方法在 libxiaomi_mico.so 里,ida 加载后发现一个 uuid “8007236f-a2d6-4847-ac83-c49395ad6d65”,

Google一搜,好多不同的小米设备都是用这个。大致算法如下



红米音箱固件更新检查逻辑 by @sskaje: https://sskaje.me/2021/04/redmi-play-firmware-upgrade-check/

红米音箱Play 开发调试实验 updating



前盖有内扣,拆好之后直接引三根针出来就可以ttl了。

密码 : substr(md5($SN . “5775B10D-15C0-7827-97B9-88EA07FCA97A”), 0, 14),hash salt在 /bin/mi_console 里写死了,根据设备型号判断。

串口波特率115200.

手动启动 ssh。

劫持流量,发现客户端不认第三方的https证书,错误提示是 SSL handshake with client failed: CA certificate could not be matched with a known, trusted CA (unknown_ca)。查了下libxiaomi_http.so,设置了CURLOPT_CAPATH /etc/ssl/certs,然而系统本身是squashfs直接挂载的ro,所以需要曲线救国。

ldd 查看 libxiaomi_http.so,发现引用了 libmbedtls.so libssl.so libcrypto.so,libcurl 的 vtls 里看了下实现,用了 这个函数,同时对比了各个实现,决定还是手工加一下证书。

鉴于系统是readonly挂载的,所以上 overlay 。

这样就可以在 /tmp/certs 里加证书,实现自定义ca。

具体操作我是在一台ubuntu上,把证书pem 文件命名为 .crt后缀放在 /usr/local/share/ca-certificates 下然后执行 update-ca-certificates 再去看 /etc/ssl/certs 里的symlink的hash。

我开发机的charles ca 证书 hash 是 6a3a5fb6.0,所以在我的小爱音箱里,我把证书 pem 文件copy到 /tmp/certs 然后 创建symlink。

再执行 ota check 的实话,观察charles,已经能看到ssl的请求了。



红米音箱Play 开发调试实验 updating by @sskaje: https://sskaje.me/2021/03/%e7%ba%a2%e7%b1%b3%e9%9f%b3%e7%ae%b1play-%e5%bc%80%e5%8f%91%e8%b0%83%e8%af%95%e5%ae%9e%e9%aa%8c-updating/

meilisearch ubuntu systemd



正在寻求ES的轻量化解决方案,看到了meilisearch,于是上手实验了一把。留了个systemd 配置笔记。

原始安装文档 https://docs.meilisearch.com/guides/advanced_guides/installation.html,官方给的 apt 的安装只有二进制文件,没有配置文件没有启动脚本。

简单来

/etc/default/meilisearch

/etc/systemd/system/meilisearch.service

启动



meilisearch ubuntu systemd by @sskaje: https://sskaje.me/2021/01/meilisearch-ubuntu-systemd/