btlejack中hop interval和Increment获取

hop interval

跳频时间间隔hop Interval,就是两个信道切换时间。下面抄的一段。
跳频时间间隔hop Interval,即设备从进入一个 used data信道到进入下一个 used
data 信道间的时间间隔。这个时间间隔被定义称为 connection interval。其中 
connection event 描述了 master与 slave 在一个 used data 信道上停留时,
可用于通信的时间段。由于 connection interval的取值范围是 7.5 毫秒到 4.0 秒
,且步进为 1.25 毫秒所以可以推算出 hop interval

在这里插入图片描述

hop interval破解原理

btlejack的源码中是,一直监听第一个信道,然后除以37.。。。。,现在看是这样的。
在下边第一段代码中的g_sniffer.channel = g_sniffer.sg_4->ble_getFirstChannel();
和第二段中  /37的(浏览器搜一下)。
还有徐大佬论文中的unique:hop范围[5,16],hop所有可能下,唯一出现的那个。

在这里插入图片描述

static void recover_hop_interval(void){
    // Update state. 
    g_sniffer.action = RECOVER_HOPINTER;
    g_sniffer.observed_interval = 0;
    g_sniffer.smallest_interval = 0xffffffffffffffff;
    g_sniffer.prev_time = 0xffffffff;
    g_sniffer.n = 0;

    //Initialize sequence generator. 

    g_sniffer.sg_4->ble_initialize(g_sniffer.chm, g_sniffer.access_address);
    //此处设置的
    g_sniffer.channel = g_sniffer.sg_4->ble_getFirstChannel();

    // Start measuring. 
    measures = 0;
    g_sniffer.measuring = false;

    // Reconfigure radio. 
    radio_follow_aa(g_sniffer.access_address, g_sniffer.channel, g_sniffer.crcinit);
}

#if 1			//RECOVER_HOPINTER		//跳跃时间间隔 interval
							case RECOVER_HOPINTER:{
								// We expect a correct CRC for this packet.
              if ((NRF_RADIO->CRCSTATUS == 1)) {
                  /* If we were not measuring, then start our counting timer. */
                  if (g_sniffer.measuring == false)
                  {		
											printf("start the hop interval(时间)\r\n");
                      measures = 0;
                      g_sniffer.prev_time = 0;
                      g_sniffer.measuring = true;
                      g_sniffer.ticker.timer_start(0, 1250,hop_tick1);

                      /* Compute interval. */
                      Link_verbose(B("Recovering hop interval ..."));
                  }
                  else
                  {
                      //compute interval based on measures.
                      curtime = measures;
                      inter = (curtime - g_sniffer.prev_time);
                      if (inter > 2)
                      {
                          g_sniffer.prev_time = curtime;
                          if ((inter/37) != (g_sniffer.observed_interval/37))
                          {
                              g_sniffer.observed_interval = inter;
                              g_sniffer.n = 0;

                              /* Compute interval. */
                          } else {
                              g_sniffer.n++;
                              if (g_sniffer.n >= 2) /* was 5 */
                              {
                                  /* Done with hop interval, then recover hop increment. */		
                                  ///37的
                                  g_sniffer.hop_interval = inter/37;

                                  Link_notifyHopInterval(
                                    g_sniffer.access_address,
                                    (uint16_t)g_sniffer.hop_interval
                                  );
																	printf("start recover hop increment\r\n");
                                  recover_hop_inc();
                              }
                          }

                      }
                  }
              }

              /* Continue to receive. */
              NRF_RADIO->TASKS_START = 1;
						}	break;
#endif

hop Increment破解

既然获取到Interval,也就是时间,去第二个信道监听着,看看用了多少时间,除以
interval,一个个枚举一下就可以啦(好像可以直接算出来。。,现在看到为啥)
 inter = DIVIDE_ROUND((measures - g_sniffer.observed_interval), g_sniffer.hop_interval);
 DIVIDE_ROUND(N, D) ((N) + (D)/2) / (D)
 emm....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值