更新日志

  • 20251101:更新到动调抓包
  • 20251102:更新局域网抓包
  • 20251106:更新 WLAN 控制、硬件信息

资源解包

直接使用 MT 解包就能看到几乎所有资源文件,没有任何难度

代码逆向

使用 Jadx 反编译后发现,只有少得可怜的几行代码

image-20251101150936733

经过研究,Vedal 用的应该是 React Native 开发的 app,其主要代码逻辑是被编译于 ./assets/index.android.bundle 文件的 JavaScript

以前没接触过这方面的技术栈,走一步看一步

打开该文件,版本号是 0x60 即 96,是较新的版本,原始 js 应该已经被编译和一些混淆处理了

image-20251101151332342

可以使用 bongtrop/hbctool 工具对 index.android.bundle 进行解析,但是该工具已经不支持 96 版本,找到了支持 96 版本的工具 izadgot/hbctool 可以解析出字节码,另外一个工具 P1sec/hermes-dec 可以一定程度上反编译为 js

看一下反编译后的 JavaScript

image-20251101152016592

呃呃,虽然可读性依然几乎不可读,但是至少聊胜于无吧(?

这条路估计走不通了,但是可以为后面动态调试做点准备

动调抓包

龟龟没做 x86 适配,可恶,模拟器用不了了(除非 ARM Windows + ARM MuMu)

HttpCanary 无效,抓不到

手边的真机没太搞明白 root,使用 MitmProxy抓包只能抓到一部分的 https,Swarm Sync 恰好抓不到:

image-20251101152720885

不过至少知道了可能是国内的 IoT 平台——涂鸦智能

好在最后找到了 r0ysue 师傅超强的通杀脚本 r0ysue/r0capture,需要配置低版本 frida 的环境,如 15.2.2,然后执行

1
python .\r0capture.py -U "Swarm Sync" -p test.pcap

抓包示例:

image-20251101162934376

非常难懂,感觉还是会有很大难度

具体明天到货再研究研究

不过明天好像有 N1CTF 来着(?

局域网抓包

连接电脑热点,发现熔岩灯设备

image-20251102220103793

抓包

image-20251102221452939

如图,正常情况下,有如下几种通信:

  1. \(5\) 秒,LavaLamp 向局域网 255.255.255.255 广播信息
  2. \(60\) 秒,LavaLamp 向远程服务器 8.***.***.247 TLS 通信一次(推测为 涂鸦智能 IOT 平台)

扫一下 LavaLamp,有且只有一个 TCP 端口开放

image-20251102224517556

搜索一下,发现一个工具 jasonacox/tinytuya,但是利用还需要获取 Local Key

frida

无法附加启动,可能有检测,需要绕过

WLAN 控制

启用调试模式后可以在日志中获取 local key

enable debug mode

利用 jasonacox/tinytuya 扫描可以获取其他必要信息

image-20251106210626273

根据 IP Address, Device ID, Local Key, Version 四元组即可连接到熔岩灯

  1. 首先需要建立连接并鉴权
1
2
3
4
5
6
7
8
9
import tinytuya

# Connect to Device
d = tinytuya.OutletDevice(
dev_id='0123456789abcdef012345',
address='192.168.xx.yyy',
local_key='****************',
version=3.5
)
  1. 可以获取当前状态
1
2
3
# You can get all status data like this
data = d.status()
print(f'Current Status: {data}')

会得到一个形如下的响应:

1
2
3
4
5
6
7
8
9
10
{
"dps": {
"20": true, // 电源,true=开, false=关
"21": "colour", // 模式,colour=手动取色, music = 直播同步
"24": "00b803e803e8", // 颜色数据
"25": "****************************", // (已脱敏)尚不清楚
"26": 0, // 计划关机(s)
"34": false // 尚不清楚
}
}
  1. 控制字段

可以使用 d.set_status 方法来控制熔岩灯。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 你可以像这样控制开关
d.set_status(True, 20) # 开灯
# d.set_status(False, 20) # 关灯

# 你可以像这样设置模式
d.set_status('colour', 21) # 设置模式为颜色
# d.set_status('music', 21) # 设置模式为音乐(同步直播流)

# 你可以像这样设置颜色
color_code = '00b403e803e8'
d.set_status(color_code, 24)

# 你可以计划 30s 后自动关机(休眠)
d.set_status(30, 26) # 30s 后关机, 字段 '26' 置 0, 字段 '20' 置 false

硬件信息

image-20251106234355936

如图,使用的是 CBU-IPEX,图源:萨瓦纳大草原

也许可以打硬件获取固件,但是我不会

信息收集

你是怎么做到把一个小东西搞得像打 hvv 一样的

__END__