逆向破解 H.Koenig 遥控器 Part 1
逆向破解 H.Koenig 遥控器(Part 1)
最近我正在尝试一研究些自动吸尘器机器人。iRobot公司的Roomba貌似是该领域的领导者,但是作为实验来讲的话这些东西真是太昂贵了,我也找不到任何的折扣优惠。所以我只能买一个H.koenig SWR22替代Roomba。
这个吸尘器附带了几个配件和一个遥控器。
iRobot的遥控器似乎是依靠红外,而H.koenig已经选择了在2.4 GHz ISM频段上的一个RF遥控操作。由于我正努力学习射频方面的知识,并开始接触软件定义无线电(SDR)方面知识,因此我打算逆向这个遥控器,并且试图“构造”一个遥控器。这就是这篇文章的内容。
特立独行的Crazy Aussie Dave 总是说:
“ 不要打开它,拆开它! ”
正如你期待的那样,里面没有很多的东西:14个按键,一个陶瓷振荡器微控制器,无源元件和一个可能采用了经典的SPI总线与并μC连接的RF模块。
作为参考,在第一个修正版本中我们采用的是遥控器“XR210_T”。这可能与其他H.koenig型号兼容。
让我们仔细看看这个微控制器。我并不指望它的固件是可以升级的,但如果制造商足够好的话,也许我们可以只提取并逆向固件的所有命令。至少,对于电子我只是一种爱好,我更喜欢逆向软件而不是它的组件:-)
这个镜头的质量不是很好,但你可以看到MCU上的参考文字:在DIL16封装上写着TK98P01 。
不幸的是,谷歌搜索不到这个型号。我根本找不到任何相关的数据表,虽然有几个链接指向的是盛群半导体,但是该引用似乎并没有出现在他们的产品目录中。
顺便说一句,让我没想到是它居然是一次性可编程器件。
因此,忘记软件的方式,因为它似乎并没起到作用,在显微镜下看看使用的是什么样的RF收发器模块。
这个看起来更加有戏。该收发器是一个Avantcom A7105。这是一家台湾公司生产的小型射频收发器,工作在2.4GHz 的FSK或GFSK调制器上。它很像北欧的nRF2401和德州仪器(前身为Chipcon公司)CC2500。希望我已经找到这些东西了,它所需要是一个典型的SPI(串行外设接口)总线。
在显微镜下观察来确定SPI总线信号是很烦躁的,而且还没有足够的引脚来干扰这种做法。只需连接引脚逻辑分析仪,例如Saleae Logic。该软件将会完成这些工作。
在上面的图片中,MCU陶瓷振荡器工作在4MHz。因此,SPI总线不应工作在该频率以上,我们并不需要使用Saleae逻辑分析仪的24MHz全部带宽。
接线逻辑分析仪后,几秒钟就可以得到很多样本,在这段时间按下几个按钮,我们捕获信息如下:
如果你不熟悉的SPI总线协议,它主要依靠4个信号:
1.MOSI(主出从入)用于从MCU到收发器传输数据;
2.MISO(主入从出)用于传输数据的其他方式。
3.SCK为时钟信号;
4.SCS反向输入来选择一个芯片。因此,当它变为低时,传输可以开始。
在我们的例子中,SCS信号显然是最后一个,在通道7和SCK,时钟信号,是在频道6。别急,只有频道5是保留的,但是我们仍然需要两个信号。
在数据表中,Avantcom A7105只用一根线作为MOSI和MISO信号,作为采用3线SPI总线。这个起初有点混乱(至少,对我来说)。此外,A7105在最高有效位(MSB)顺序传送8位,而一些通道只需要4位!这应该是Saleae SPI解码器的原因,但是也没必要写一个特定的解码器
SPI的解码器安装后,我们得到如下:
正如你所看到的,所有的输入是完全解码的。我们只需要记住一些字节指令/数据,其他的都是答案。而4位选通必须手动进行解码。
在那之后,我们再对遥控器进行一次上电捕捉。可以肯定的是,我能初始化收发器的设置配置。但事实上,H.koenig在他们的单片机程序做了一个非常奇怪的选择:收发器不上电初始化。相反,他们采用复位初始化,每一个按钮上的无线电发送时间重新配置收发器!能量和时间都有损失!试想一下,每一次,该收发器有重新调整它的本地振荡器和锁定其PLL。除非有人说明具体情况,不然我认为固件在我试验期间已经进行了改进:-)
好了,接着是漫长而无聊的东西:捕捉每一个按钮动作,解码所有的A7105数据表。
希望无论按下什么按钮,任何设置都保持不变。正如你所看到的,这是一个相当长的设置过程,因为他们写的是几乎每一个寄存器。
如下所示(这里的布局很糟糕,但是tumblr创建不了表格)
0x00 0x00 Reset the chip
0x06 0x58 0x52 0xD2 0x41 Write ID = 0x58 0x52 0xD2 0x41
0x46 Read the ID but /SCS is set high so they don’t care about the answer…
0x01 0x42 Write Mode Control (Auto RSSI + FIFO Mode)
0x02 0x00 Write Calc
0x03 0x08 Set packet length to 8 bytes
0x04 0x00 Write FIFO 2
0x07 0x00 Write RC OSC I
0x08 0x00 Write RC OSC II
0x09 0x00 Write RC OSC III
0x0A 0x00 Write CKO Pin
0x0B 0x01 Write GPIO1 Pin
0x0C 0x21 Write GPIO2 Pin
0x0D 0x05 Write Clock
0x0E 0x00 Write Data rate (500 kpbs)
0x0F 0x50 Write PLL I (Channel is set to 0x50 which gives a +40 MHz offset)
0x10 0x9E Write PLL II
0x11 0x4B Write PLL III
0x12 0x00 Write PLL IV
0x13 0x02 Write PLL V
0x14 0x16 Write TX I
0x15 0x2B Write TX II
0x16 0x12 Write Delay I
0x17 0x00 Write Delay II
0x18 0x22 Write RX
0x19 0x80 Write RX Gain I
0x1A 0x80 Write RX Gain II
0x1B 0x00 Write RX Gain III
0x1C 0x0E Write RX Gain IV
0x1D 0x32 Write RSSI Threshold
0x1E 0xC3 Write ADC
0x1F 0x07 Write Code I (sets Preamble length to 4 bytes)
0x20 0x16 Write Code II
0x21 0x00 Write Code III
0x22 0x00 Write IF Calibration I
0x24 0x00 Write VCO current Calibration
0x25 0x00 Write VCO Single band Calibration I
0x26 0x3A Write VCO Single band Calibration II
0x27 0x00 Write Battery detect
0x28 0x17 Write TX test
0x29 0x47 Write RX DEM test I
0x2A 0x80 Write RX DEM test II
0x2B 0x01 Write CPC
0x2C 0x05 Write Crystal test
0x2D 0x45 Write PLL test
0x2E 0x18 Write VCO test I
0x2F 0x00 Write VCO test II
0x30 0x01 Write IFAT
0x31 0x0F Write RScale
0x02 0x01 Write Calc (Enables IF Filter Bank calibration)
0x42 0x00 Read Calc (0x00 means calibration is done)
0x62 0x07 Read IF Calibration I
0x24 0x13 Write VCO current Calibration
0x25 0x09 Write VCO Single band Calibration I
Strobe 0b1010 Standby mode
Strobe 0b1110 FIFO write pointer reset (ie clears the FIFO)
0x05 [8 bytes] Write FIFO data
0x0F 0x64 Write PLL I (Sets channel to 0x64 hence Freq=2450.001 MHz)
Strobe 0b1101 TX mode
这是所有的设置。我还是不明白他们为什么在发送数据前,会从通道0×50移动至通道0×64。他们可以在刚开始将收发机设定成正确的频道。看起来代码质量很差。
目前为止就这样了。接下来我会详细介绍包装品,在空中发送的是什么以及远程的每一个按钮远程发送的值。
我还将检查,是否可以使用Chipcon公司的CC2500替代Avantcom A7501来工作。这样的话,我也许能够使用Python和GoodFET进行远程通信:
选择CC2500基于一个事实,我早在一个月前已经为GoodFET写好了支持它的固件,我知道TX是确定(我还是要调试,虽然只是完成RX的一部分)。而且我还有一个(未发表)基于CC2500项目,我还是需要更多的了解这些芯片:-)
逆向破解 H.Koenig 遥控器 Part 1的更多相关文章
- 逆向破解H.Koenig 遥控器 Part 2
逆向破解H.Koenig 遥控器 Part 2 到目前为止,我们已经知道了RF收发器的安装过程,下面是我们所掌握的东西 : l 无线电收发器是一个Avantcom A7105 l 调制是FSK l 频 ...
- 20165309 《网络对抗技术》实验一:PC平台逆向破解
20165309 <网络对抗技术>实验一:PC平台逆向破解 目录 实践目标 基础知识 实验原理.内容及步骤 问题与解决 实验收获 一.实践目标 本次实践的对象是一个名为pwn1的linux ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
- 2018-2019-2 20165312《网络攻防技术》Exp1 PC平台逆向破解
2018-2019-2 20165312<网络攻防技术>Exp1 PC平台逆向破解 一.Exp1.1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转 ...
- 2017-2018-2 20155303『网络对抗技术』Exp1:PC平台逆向破解
2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 --------CONTENTS-------- 1. 逆向及Bof基础实践说明 2. 直接修改程序机器指令,改变程序执行流程 3. ...
- 20144306《网络对抗》MAL_PC平台逆向破解_Advanced
PC平台逆向破解_Advanced 一.注入shellcode并执行 1.什么是shellcode? shellcode顾名思义就是一段为了获取交互式shell的机器指令,是用来发送到服务器利用特定漏 ...
- 20145206邹京儒《网络对抗技术》 PC平台逆向破解
20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 20145336张子扬 《网络对抗技术》 PC平台逆向破解
#20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...
随机推荐
- K8S知识点总结
一.K8S介绍: Kubernetes(k8s)是Google开源的容器集群管理系统.在Docker技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提高了大规模 ...
- sql回显注入(满满的干货)
三种注入poc where user_id = 1 or 1=1 where user_id = '1' or '1'='1' where user_id =" 1 "or &qu ...
- prometheus 监控 jar应用服务 + 修改监听IP和端口
1.修改服务的启动脚本 [root@do1cloud01 init.d]# vim learn-school nohup ${JAVA_HOME}/bin/java -javaagent:/usr/l ...
- pramfs安装
1. 拷贝 linux-3.11 pramfs-1.5.0-3.11 pramfs-Tools 到电脑中(我是新建目录linux中) 2.解压 3.cd pramfs-1.5.0-3.11/ 4.将p ...
- 阅读《C Primer Plus》收获
190927 知识内容: 1.了解到C语言混乱代码大赛.评选谁的程序最有创意但又让人难以理解 2.了解最初的c语言的规则,所有编译器依照规则而设计. 3.编程前先要确定好目标对象,并且在纸上大概写出流 ...
- Nuxt的动态路由及路由校验入门
其实动态路由就是带参数的路由.比如我们现在新闻模块下面有很多新闻详情页,这时候就需要动态路由的帮助了. 新闻详细页面我们在news文件夹下面新建了_id.vue的文件,以下划线为前缀的Vue文件就是动 ...
- python数值列表
使用range函数生成数值列表 使用range函数打印1~5的数字 for i in range(1,6): print(i) 输出 1 2 3 4 5 利用range函数生成数值列表 >> ...
- 21.根据hive绑定数据统计计算保存到hive表中
创建upflow表 create external table mydb2.upflow (ip string,sum string) row format delimited fields term ...
- [转帖]字符编码笔记:ASCII,Unicode 和 UTF-8
字符编码笔记:ASCII,Unicode 和 UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 转帖 ...
- python 下安装pymysql数据库
两种方法来安装pymysql 方法一.利用命令来安装 安装:python37 -m pip install pymysql 升级:python37 -m pip install pymysql --u ...