逆向破解 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的更多相关文章

  1. 逆向破解H.Koenig 遥控器 Part 2

    逆向破解H.Koenig 遥控器 Part 2 到目前为止,我们已经知道了RF收发器的安装过程,下面是我们所掌握的东西 : l 无线电收发器是一个Avantcom A7105 l 调制是FSK l 频 ...

  2. 20165309 《网络对抗技术》实验一:PC平台逆向破解

    20165309 <网络对抗技术>实验一:PC平台逆向破解 目录 实践目标 基础知识 实验原理.内容及步骤 问题与解决 实验收获 一.实践目标 本次实践的对象是一个名为pwn1的linux ...

  3. 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3

    <网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...

  4. 2018-2019-2 20165312《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165312<网络攻防技术>Exp1 PC平台逆向破解 一.Exp1.1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转 ...

  5. 2017-2018-2 20155303『网络对抗技术』Exp1:PC平台逆向破解

    2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 --------CONTENTS-------- 1. 逆向及Bof基础实践说明 2. 直接修改程序机器指令,改变程序执行流程 3. ...

  6. 20144306《网络对抗》MAL_PC平台逆向破解_Advanced

    PC平台逆向破解_Advanced 一.注入shellcode并执行 1.什么是shellcode? shellcode顾名思义就是一段为了获取交互式shell的机器指令,是用来发送到服务器利用特定漏 ...

  7. 20145206邹京儒《网络对抗技术》 PC平台逆向破解

    20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...

  8. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  9. 20145336张子扬 《网络对抗技术》 PC平台逆向破解

    #20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...

随机推荐

  1. Oracle面试题

    0.绑定变量的优缺点及使用场合分别是什么? 优点:能够避免SQL的硬解析以及与之相关的额外开销(SQL语法.语义的分析.逻辑分析.生成较佳的执行计划等开销),提高执行效率. 缺点:如果在表存在数据倾斜 ...

  2. java中图片地址base64编码的相互转换

    public class Base64Url { /** * 将base64编码字符串转换为图片 * @param imgStr: base64编码字符串 * @param path: 图片路径-具体 ...

  3. centos7.2 apollo1.7.1的搭建

    1.准备工作 第一步:linux系统中配置好java环境安装参考地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-down ...

  4. 使用Visual Studio Code Coverage和nunit上传单元测试覆盖率和单元测试结果到SonarQube上

    SonarQube.Scanner.MSBuild.exe begin /k:"OMDCCQuotes" /d:sonar.host.url="http://myip:9 ...

  5. 安装cinder

    在控制节点上安装 备注:安装cinder时,nova-compute创建虚拟机时会默认使用cinder指定的存储方式,所以,如果你还要使用本地存储的话,请先参考我这边文章进行设置: 配置nova-co ...

  6. nginx+gunicorn拓扑

    加装Nginx是否有必要 Nginx作为代理服务器,监听来自外部的80端口的请求:而Gunicorn负责监听本地机8000端口的请求.Nginx会把来自外部的请求转发给Gunicorn处理,接收到响应 ...

  7. Angular里使用(image-compressor.js)图片压缩

    参考资料: http://www.imooc.com/article/40038 https://github.com/xkeshi/image-compressor 示例代码: <nz-upl ...

  8. day37 GIL、同步、异步、进程池、线程池、回调函数

    1.GIL 定义: GIL:全局解释器锁(Global Interpreter Lock) 全局解释器锁是一种互斥锁,其锁住的代码是全局解释器中的代码 为什么需要全局解释器锁 在我们进行代码编写时,实 ...

  9. MNFTL: An Efficient Flash Translation Layer for MLC

    1. we propose two approaches, namely, concentrated mapping and postponed reclamation, to effective r ...

  10. Loj 2230. 「BJOI2014」大融合 (LCT 维护子树信息)

    链接:https://loj.ac/problem/2230 思路: 设立siz数组保存虚点信息,sum表示总信息 维护子树信息link操作和access操作需要进行一些改动 可参考博客:https: ...