篮之新喜 发表于 2024-9-10 12:53:27

CANoe_UDS-boorloader 自动化测试系列(五)基本功能:CAPL实现#27服务安全

目录
一、媒介

 二、服务先容
1.服务请求
#请求种子 
#请求密钥 
2.子功能
3.服务响应
#肯定响应
#否定响应 
三、CAPL实现#0x27
四、总结


[*]CANoe_UDS-booroader 自动化测试系列(一)创建一个CANoe测试工程(测试节点的选选择)
[*]CANoe_UDS-booroader 自动化测试系列(二)基本刷写流程
[*]CANoe_UDS-booroader 自动化测试系列(三)基本功能:CAPL实现UDS协议下的CAN报文接收#解析#发送
[*]CANoe_UDS-booroader 自动化测试系列(四)基本功能:CAPL实现#10服务会话控制
[*]CANoe_UDS-booroader 自动化测试系列(五)基本功能:CAPL实现#27服务安全解锁
[*]CANoe_UDS-booroader 自动化测试系列(六)基本功能:CAPL实现bin文件数据解析
[*]CANoe_UDS-booroader 自动化测试系列(七)基本功能:CAPL实现#34#36#37服务#数据下载
[*]CANoe_UDS-booroader 自动化测试系列(八)基本功能:CAPL实现#31服务#例程控制
[*]CANoe_UDS-booroader 自动化测试系列(九)基本功能:CAPL实现#22#2E服务#DID读写
[*]CANoe_UDS-booroader 自动化测试系列(十)基本功能:CAPL实现#28#85服务#预编程操作
[*]CANoe_UDS-booroader 自动化测试系列(十一)基本功能:CAPL实现CRC数据校验
[*]CANoe_UDS-booroader 自动化测试系列(十二)基本功能:CAPL实现pane面板制作
[*]CANoe_UDS-booroader 自动化测试系列(十三)CAPL框架下的全流程测试
一、媒介

hello,各人好,我是小鸟鹏。
今天给各人先容一下CAPL中怎样一键通过#0x27安全访问,要留意的是安全解锁的算法我没有做成链接库,而是把算法直接写在CAPL脚本里面,这个可以根据自己需求自行决定,我是嫌麻烦所以没有做。


https://i-blog.csdnimg.cn/direct/3ac090c93d3b4940b381770ba033d4c3.png 
 二、服务先容

1.服务请求

服务请求的基本格式:
<SID> + <Sub-function> + <Parameter>
<SID> + <Parameter>
#请求种子 

https://i-blog.csdnimg.cn/direct/a5e5c56daf1449dfb012d5b1e59e8cf7.png
#请求密钥 

https://i-blog.csdnimg.cn/direct/055409fc2d444e97927d56b8e8b5667a.png
 
https://i-blog.csdnimg.cn/direct/41635149cde3409bbf071b59b0173796.png
2.子功能

不同安全级别的请求种子和发送密钥是一一对应的,相邻的一对奇偶数对应一种安全级别,此中奇数代表请求种子,偶数代表发送密钥。
好比:
【0x01】与【0x02】是一对组合,0x01是请求种子,0x02是请求密钥;
【0x11】与【0x12】是一对组合,0x11是请求种子,0x12是请求密钥;
https://i-blog.csdnimg.cn/direct/fc04b9af2abe4646ba3c1ae01ef82a52.png
3.服务响应

#肯定响应

基本格式:
<SID + 0x40> + <Sub-function> + <Parameter>
<SID + 0x40> + <Parameter>
https://i-blog.csdnimg.cn/direct/dd4db725548d45a0824cdf44de9a48bf.png
https://i-blog.csdnimg.cn/direct/9f1dbe30f052464e94d56580098a565c.png
#否定响应 

基本格式:
<0x7F> + <SID> + <NRC>
看起来比较简单,格式比较固定,只要是Negative Response,第一字节就是0x7F,第二字节照抄原来的SID,第三个字节是错误响应码,详细响应码对应的错误信息如下图:
https://i-blog.csdnimg.cn/direct/599fc4342dce4ead9a219d9c09a84a99.png
需要留意的是:0x7Fxx0x78这个特殊的响应码。
 
三、CAPL实现#0x27

#0x27服务
void SID27_SecurityAccess(byte responsecode,long id ,byte subfunction,struct CANTP_INFO_ST data)
{
    byte i;
    byte TempData;
    byte TempLen;

    TempLen = 0;
    TempData= 0x27;
    TempData= subfunction;

    if(0 != data.TpSduLength)
    {
      for(i = 0; i < data.TpSduLength; i++)
      {
            TempData = data.TpSduDataBuf;
      }
    }

    DiagnosticServiceSend(responsecode,id,TempLen,TempData);//发送函数
}
#一键通过安全访问 
void Access_Unclock(void)
{
    dword AccKey;
    dword Seed4Byte;
   
    struct CANTP_INFO_ST stData;
    stData.TpSduLength = 0;

    Seed4Byte = 0;

    SID27_SecurityAccess(0x67,PHYSICS_ID_DEFAULT,0x11,stData);

    if(0x67 == g_stTpRxInfo.TpSduDataBuf)
    {
      if (0x11 == g_stTpRxInfo.TpSduDataBuf)
      {      
            Seed4Byte |= (((dword)g_stTpRxInfo.TpSduDataBuf) << 24) + (((dword)g_stTpRxInfo.TpSduDataBuf) << 16) +
                         (((dword)g_stTpRxInfo.TpSduDataBuf) << 8) + ((dword)g_stTpRxInfo.TpSduDataBuf);
      }
      else
      {
            
      }      
      AccKey = SecM_AccessKeyGet(Seed4Byte);
      
      stData.TpSduDataBuf = (AccKey >> 24) & 0xFF;
      stData.TpSduDataBuf = (AccKey >> 16) & 0xFF;
      stData.TpSduDataBuf = (AccKey >> 8)& 0xFF;
      stData.TpSduDataBuf = (AccKey) & 0xFF;
      stData.TpSduLength = 4;
      
      SID27_SecurityAccess(0x67,PHYSICS_ID_DEFAULT,0x12,stData);
    }   
}  
四、总结

这篇文章简单先容了#0x27服务的知识,以及通过CAPL实现#0x27服务。利用这几篇文章的知识,搭建一个基本的UDS测试框架做一些基本的测试是完全没题目的。下一篇我计划先容CAPL怎样结合面板组件加载息争析.bin文件,码字不易,求个三连。
下一篇:
CANoe_UDS-booroader 自动测试系列(六)基本功能:CAPL实现bin文件数据解析
 
   如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,各人的支持就是我坚持下去的动力。

作者:小鸟鹏
接洽方式:
邮箱:502756962@qq.com


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: CANoe_UDS-boorloader 自动化测试系列(五)基本功能:CAPL实现#27服务安全