OBD数据分析(三)

该博客主要介绍了OBD数据的处理与分析,包括将数据分为A、B、C、D四段,删除重复和合并不变数据,以及通过检测内容大小和速度变化来识别可能的入侵。博主还定义了规则集检查消息结构,并根据速度变化设置阈值来判断攻击。最后,将特定的无变化数据加入白名单。
摘要由CSDN通过智能技术生成

处理数据

将数据分为4段,分别为A、B、C、D

删除相同数据内容的数据后,处理数据

  • 有些数据内容一直保持不变,则合并为一条数据
  • 有些数据一直变化,则取其平均值

处理结果如下:
在这里插入图片描述

分析数据,选出有特征的id数据

分析发现,某些数据如下图所示,数据内容始终保持为0000 0000 0000 0000,或DLC一直为0:
在这里插入图片描述

进行检测

对具体内容的大小进行检测分析是否有入侵

将消息的具体内容分为了四个部分,如下所示,分别命名为A,B,C,D

class message
{
   
	public: 
	string Timestamp;
	string timestamp;
	string Id;
	string iD;
	string id;
	string DLc;
	string dlc;
	string A;
	string Aa;
	string B;
	string Ba;
	string C;
	string Ca;
	string D;
	string Da;
};

进过观察可知,某些数据,如id为02200000的消息,虽然内容在一直变化,但DLC始终未8,选取较中间大小的数据c603 f103 0c00 3f10,一部分消息就能被检测到攻击(因为数据是合理的,所以假设攻击),如下图所示
在这里插入图片描述
故我们定义个规则集,用于检查在处理消息之前ECU应接受或拒绝的消息结构及其属性,如下所示

		if (mes.iD == "0220000")
		{
   
		//观察发现消息0220000的DLC一般为8,所以这里设不为8时为有入侵
		//通过对消息0220000的具体内容进行分析,得四个信号的最大值分别是 c6 03 f1 03 0c 00 3f 10
		//即超过这四个信号的最大值是判断为有入侵 
			if(mes.dlc != "8" || mes.A > "c603" || mes.B > "f103" || mes.C > "0c00" || mes.D > "3f10")
			{
   
				cout << "MALFORMED FRAME with ID " << mes.iD <<endl;
			}
			else
			{
   
				cout << mes.iD << "it is a safe id number!" << endl;
			}
		}

执行结果如图
在这里插入图片描述
完整代码如下

//手头的消息进行分析,我们将消息分为四个信号,分别为abcd,均最都具有两位 
//之后,定义了一个规则集,用于检查在处理消息之前ECU应接受或拒绝的消息结构及其属性。 
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
class message
{
   
	public: 
	string Timestamp;
	string timestamp;
	string Id;
	string iD;
	string id;
	string DLc;
	string dlc;
	string A;
	string Aa;
	string B;
	string Ba;
	string C;
	string Ca;
	string D;
	string Da;
};
int 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值