环境
- ICSim 仪表盘模拟器
- Socketcand can网络
Kayak 基于socketCAN的分析工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23sudo apt install libsdl2-dev libsdl2-image-dev can-utils maven autoconf -y
git clone https://github.com/zombieCraig/ICSim.git
cd ICSim/
sudo make
git clone https://github.com/linux-can/socketcand.git
cd socketcand
获取缺少的文件
wget https://raw.githubusercontent.com/dschanoeh/socketcand/master/config.h.in
编译安装
apt install libconfig-dev
meson setup -Dlibconfig=true --buildtype=release build
meson compile -C build
meson install -C build
下载
git clone https://github.com/dschanoeh/Kayak.git
安装jdk
sudo apt-get install openjdk-11-jdk
安装
cd Kayak
mvn clean package注意要用低版本的jdk,否则会导致缺少
Pack200
而编译错误
启动模拟器
1
2
3
4
5设置vcan(虚拟CAN)接口
sudo modprobe can
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0在
ICSim
中1
2
3
4打开仪表盘模拟器
./icsim vcan0
打开仪表盘控制器
./controls vcan0此时可以用键盘或者手柄控制:
| 功能 | 控制按钮 |
|—————————|———————————|
| 转向 | 键盘左右 |
| 速度 | 键盘上下 |
| 开/关左前车门 | 右Shift / 左Shift + A |
| 开/关右前车门 | 右Shift / 左Shift + B |
| 开/关左后车门 | 右Shift / 左Shift + X |
| 开/关右后车门 | 右Shift / 左Shift + Y |
| 开启全部车门 | 左Shift + 右Shift |
| 关闭全部车门 | 右Shift + 左Shift |抓包与分析
先抓一个正常无操作的包
1
candump vcan0 -f normal_log
可以看到can总线传了很多东西
随后抓一个开门的包:
1
candump vcan0 -f open_log
然后处理数据:
1
2
3cat normal_log | awk '{print $3}' | cut -d'#' -f1 | sort | uniq > normal_ids.txt
cat open_log | awk '{print $3}' | cut -d'#' -f1 | sort | uniq > open_ids.txt
diff normal_ids.txt open_ids.txt也就是说
19B
只在开左前门的时候出现,可以提取出其相关消息:1
cat open_log | awk '{print $3}' | grep 19B# | uniq
对于这种没有加密的,可以直接
cansend
重放攻击值得注意的是,由于发动机一直在运转,所以这样子分析不出发动机的运转
不知道车轮转速会不会这么传输并被抓取到
Kayak
使用在
/home/noone/Kayak/application/target/kayak/bin#
下面运行./kayak
新建一个项目,然后
new bus
由于
Kayak
仅支持socket
的输入,所以要使用socketcand
来将收到的can挂载到socket服务上1
socketcand -v -i vcan0 -l lo -p 29536
网上找不到讲这个的,我实验的情况下,如果是
socketcand -v -i vcan0 -l 0.0.0.0 -p 29536
就会挂载失败,-v
打印参数发现挂到了莫名其妙的地方:1
2
3
4
5
6
7
8
9
10root@Rei:/etc# socketcand -v -i vcan0 -l 0.0.0.0 -p 29536
Verbose output activated
Using network interface '0.0.0.0'
Listen address is 255.127.0.0
Netmask is 149.88.0.0
Broadcast address is 255.255.255.255
creating broadcast thread...
binding socket to 255.127.0.0:29536
bind: Cannot assign requested address然后换到
loopback
上就能正常了:在
Kayak
中Connection-new connection
注意这里前面的
vcan0
要跟socketcand
挂载的一致,然后能在右边栏看到,然后拖到左边的项目里面就行然后点那个开始标志开始捕获数据,由于之前已经开了模拟控制器,所以能接收到数据
但好像只有
raw view
有数据,其他的因为没有dbc好像都看不到(所以这好像跟candump没什么区别()
noone的车联网-CAN总线环境模拟与重放攻击
- 本文链接: http://noone40404.github.io/2025/07/14/noone的车联网-CAN总线环境模拟与重放攻击/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!