首页 / 专利库 / 牙科学 / 牙生成 / 一种利用安卓系统随机生成蓝牙地址的方法

一种利用安卓系统随机生成蓝牙地址的方法

阅读:217发布:2020-05-12

专利汇可以提供一种利用安卓系统随机生成蓝牙地址的方法专利检索,专利查询,专利分析的服务。并且本 发明 提供一种利用安卓系统随机生成蓝牙地址的方法,该方法根据已有蓝牙地址的格式,采用随机函数rand(),对蓝牙地址变量进行赋值;运用代码srand((unsigned int)(time(0)))和((rand()>>8)&0xFF)将产生的随机数赋值给蓝牙地址变量;最后使用已赋值的蓝牙地址变量,用于中间人攻击防范或者其他。本发明能够有效的产生随机的蓝牙地址,用于中间人攻击防范或者其他用途;同时由于本发明未改变协议,所以普及性和实用性较高,可以与当前蓝牙设备兼容。,下面是一种利用安卓系统随机生成蓝牙地址的方法专利的具体信息内容。

1.一种利用安卓系统随机生成蓝牙地址的方法,其特征在于,包括以下步骤:
第一步,启动蓝牙程序,通过安卓应用层jni调用btif_core.c获取蓝牙地址变量;
第二步,采用随机函数rand( ),得到随机数;运用代码srand((unsigned int)(time(0)))和((rand( )>>8)&0xFF)将随机数赋值给addr蓝牙地址变量,具体代码为:
srand((unsigned int)(time(0)));//1
addr->address[0]=0x20;//2
addr->address[1]=0x20;//3
addr->address[2]=(uint8_t)((rand( )>>8)&0xFF);//4
addr->address[3]=(uint8_t)((rand( )>>8)&0xFF);//5
addr->address[4]=(uint8_t)((rand( )>>8)&0xFF);//6
addr->address[5]=(uint8_t)((rand( )>>8)&0xFF);//7
具体代码的第二三行使用固定的0x20,赋值蓝牙地址变量addr的第一二字节;具体代码的第四到七行使用随机字节,赋值蓝牙地址变量addr的的第三到六字节;
其中,addr是bt_bdaddr_t类型的指针变量,指向存储蓝牙地址的变量;srand((unsigned int)(time(0)))设置随机数种子,产生之后的随机数,time(0)得到当前时间并转化为unsigned int类型;rand( )产生一个随机数,rand( )>>8是将产生的随机数右移
8位,rand( )>>8&0xFF是将移位后的随机数与0xFF进行‘&’运算,取低8位的数,最后将产生一个8bit的随机数赋值给addr蓝牙地址变量;
第三步,使用已赋值的addr蓝牙地址变量,防范中间人攻击。

说明书全文

一种利用安卓系统随机生成蓝牙地址的方法

技术领域

[0001] 本发明属于网络安全计算机技术领域,涉及一种利用安卓系统随机生成蓝牙地址的方法。

背景技术

[0002] 由于目前移动设备的普及,对蓝牙的使用也日渐增多,同时也伴随着蓝牙信息安全问题的突出,即出现针对蓝牙的攻击,其中危害较大的就是针对蓝牙的中间人攻击,中间人攻击可以监听、收集甚至篡改通信双方的通信内容,使得正常的通信中断,而通信双方往往很难发现,并且认为自己仍然是在正常通信。对于中间人攻击,目前的防范措施非常有限,起到的作用也是微乎其微,针对蓝牙中间人攻击的有效防范措施就更加稀少。

发明内容

[0003] 本发明要解决的技术问题是提供一种利用安卓系统随机生成蓝牙地址的方法,该方法通过在蓝牙正常启动时,系统从配置文件中读取蓝牙地址,存储在内存中,在中间人攻击防范程序中,运用蓝牙地址随机器,在系统读取蓝牙地址后,并不直接存储,而是替换成用蓝牙地址随机器生成的地址,此时地址与之前的地址不再相同,而中间人可能仍然持有先前的地址,此时中间人的攻击就会失败。
[0004] 蓝牙地址共有六个字节分为三部分:即24位地址低端部分LAP、8位地址高端部分UAP和16位无意义地址部分NAP;其中,NAP和UAP是生产厂商的唯一标识码,由蓝牙权威部分配给不同的厂商,LAP由厂商内部自由分配;对于某一种型号的手机或设备,所有个体的NAP、UAP固定不变,LAP可变。
[0005] 本发明的技术方案为:
[0006] 一种利用安卓系统随机生成蓝牙地址的方法,该方法根据已有蓝牙地址的格式,采用随机函数rand(),对蓝牙地址变量进行赋值;运用代码srand((unsigned int)(time(0)))和((rand()>>8)&0xFF)将产生的随机数赋值给蓝牙地址变量;最后使用已赋值的蓝牙地址变量,用于中间人攻击防范或者其他,该方法具体包括以下步骤:
[0007] 第一步,启动蓝牙程序,通过安卓应用层jni调用btif_core.c获取蓝牙地址变量;具体函数调用如下:
[0008] 1.1调用BluetoothAdapter(frameworks层)中的getAddress()函数,getAddress()函数用来获取蓝牙地址;内部转至进一步调用IBluetoothManager(frameworks层)的getAddress()函数,再转至调用BluetoothManagerService(frameworks层)的getAddress()函数,再转至调用应用层IBluetooth的getAddress(),最后转至调用AdapterService(frameworks层)的getAddress()函数,再调用getAdapterProperty_Native()函数(通过jni调用本地方法);
[0009] 1.2调用bt_interface_t(内核层)中的get_adapter_property(),获取蓝牙属性;
[0010] 调用bluetooth.c(内核层)文件中的btif_getadapter_property(),获取蓝牙属性的进一步调用,此时已经进入内核层的调用;
[0011] 调用btif_core.c(内核层)文件中的btif_getadapter_property();
[0012] 调用btif_core.c(内核层)中的btif_transter_context(),btif_send();
[0013] 调用GKI_buffer.c(内核层)文件中的GKI_send_msg(),向指定进程发送消息;
[0014] 调用btif_core.c(内核层)中的execute_storage_request(),执行存储请求
[0015] 调用btif_storage_get_adapter_property(),获取存储的一些属性;
[0016] 最后调用btif_storage.c(内核层)文件中的变量btif_local_bd_addr,其中,btif_local_bd_addr中存储蓝牙地址。
[0017] 第二步,采用随机函数rand(),得到随机数,运用代码srand((unsigned int)(time(0)))和((rand()>>8)&0xFF)将得到的随机数赋值给addr蓝牙地址变量;具体代码为:
[0018] srand((unsigned int)(time(0)));//1
[0019] addr->address[0]=0x20; //2
[0020] addr->address[1]=0x20; //3
[0021] addr->address[2]=(uint8_t)((rand()>>8)&0xFF); //4
[0022] addr->address[3]=(uint8_t)((rand()>>8)&0xFF); //5
[0023] addr->address[4]=(uint8_t)((rand()>>8)&0xFF); //6
[0024] addr->address[5]=(uint8_t)((rand()>>8)&0xFF); //7
[0025] 上述具体代码的第二三行赋值蓝牙地址变量addr的第一二字节,使用固定的0x20;第四到七行填充地址蓝牙地址变量addr的第三到六字节,使用随机字节;
[0026] 其中,addr是bt_bdaddr_t类型的指针变量,用于指向存储蓝牙地址的变量;srand((unsigned int)(time(0)))用于设置随机数种子,产生后面的随机数,time(0)用来得到当前时间并转化为unsigned int类型;rand()用于产生一个随机数;rand()>>8是将产生的随机数右移8位,结果是低8位为有意义的数,高位为0;rand()>>8&0xFF是将移位后的随机数与0xFF进行‘&’运算,取低8位的数,最后将产生一个8bit的随机数赋值给addr蓝牙地址变量。
[0027] 其中,bt_bdaddr_t的定义为:
[0028] Typedef struct{
[0029]      Uint8_t address[6];
[0030] }__attribute__((packed))bt_bdaddr_t。
[0031] __attribute__((packed))的作用为告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。
[0032] 第三步,使用已赋值的addr蓝牙地址变量,用于防范中间人攻击。
[0033] 使用时,通信双方中的一方开启随机蓝牙地址程序,在间隔一段时间后对地址进行随机,而此时中间人攻击程序获取的仍然是随机之前的地址,通过信息的不对等,使得中间人攻击失败。
[0034] 以上各个文件位置为:
[0035] BluetoothAdapter.java
[0036] /frameworks/base/core/java/android/bluetooth/
[0037] IBluetoothManager.aidl
[0038] /frameworks/base/core/java/android/bluetooth/
[0039] BluetoothManagerService
[0040] /frameworks/base/services/core/java/com/android/server/
[0041] AdapterService.java
[0042] /packages/apps/Bluetooth/src/com/android/bluetooth/btservice/[0043] bluetooth.c
[0044] /external/bluetooth/bluedroid/btif/src/
[0045] btif_core.c
[0046] /external/bluetooth/bluedroid/btif/src/
[0047] btif_storage.c
[0048] /external/bluetooth/bluedroid/btif/src/
[0049] 本发明的效果和益处是能够有效的产生随机的蓝牙地址,用于中间人攻击防范或者其他用途;因为本发明未改变协议,所以普及性和实用性较高,可以与当前蓝牙设备兼容。附图说明
[0050] 图1是蓝牙启动过程流程图
[0051] 图2是蓝牙启动过程函数调用图;
[0052] 图3是蓝牙地址格式说明图。

具体实施方式

[0053] 1.中间人攻击防范程序
[0054] 在蓝牙正常启动时,系统从配置文件中读取蓝牙地址,存储在内存中,在中间人攻击防范程序中,运用蓝牙地址随机器,在系统读取蓝牙地址后,并不直接存储,而是替换成用蓝牙地址随机器生成的地址,此时地址与之前的地址不再相同,而中间人可能仍然持有先前的地址,此时中间人的攻击就会失败。
[0055] 具体应用过程为:获取android源码(可从google或者百度网盘下载到),在source/external/bluetooth/bluedroid/btif/src/文件夹下找到btif_core.c文件,在btif_core.c文件中的btif_fetch_local_bdaddr()函数中获取配置文件中蓝牙地址的代码后面添加本方法中的随机生成蓝牙地址代码,以下代码段为系统原有的从配置文件中获取蓝牙地址
[0056]
[0057]
[0058] 添加代码之后,编译android源码生成镜像文件,刷入真机,此时的系统已经具备随机生成蓝牙地址的功能,只要开启蓝牙,会调用函数btif_fetch_local_bdaddr()来初始化蓝牙程序,其中调用了property_get()函数来获取蓝牙的配置,randomAddr()是紧接着调用的函数,这个是本方法中用于随机生成蓝牙地址,之后将蓝牙地址赋值给btif_storage.c(内核层)文件中的变量btif_local_bd_addr。
[0059] 之后系统或程序获取蓝牙地址时会依次执行以下函数调用:
[0060] BluetoothAdapter(frameworks层)中的getAddress()函数(用来获取蓝牙地址),[0061] IBluetoothManager(frameworks层)的getAddress()函数(进一步的调用),[0062] BluetoothManagerService(frameworks层)的getAddress()函数,[0063] IBluetooth(应用层)的getAddress(),
[0064] AdapterService(frameworks层)的getAddress()函数,
[0065] getAdapterProperty_Native()函数(通过jni调用本地方法),
[0066] bt_interface_t(内核层)中的get_adapter_property()(获取蓝牙的一些属性),[0067] bluetooth.c(内核层)文件中的btif_getadapter_property()(获取蓝牙属性的进一步调用),
[0068] btif_core.c(内核层)文件中的btif_getadapter_property(),
[0069] btif_core.c(内核层)中的btif_transter_context(),btif_send(),[0070] GKI_buffer.c(内核层)文件中的GKI_send_msg()(向指定进程发送消息),[0071] btif_core.c(内核层)中的execute_storage_request()(执行存储请求),[0072] btif_storage_get_adapter_property()(获取存储的一些属性),[0073] 最终会调用到btif_storage.c(内核层)文件中的变量btif_local_bd_addr中存储蓝牙地址。此时的地址就是蓝牙启动时随机生成的地址。
[0074] 2.加强版中间人防护
[0075] 通信双方均开启蓝牙地址随机程序,此时安全性有了实质性的提高,使得中间人攻击程序难以准确的获取到双方的蓝牙地址,连伪装一方也成为了不可能的事情。同时为了解决双方对对方身份的确认问题,这里提出有两种解决方法:1)对下次随机的地址进行加密并传输给对方,即使此时中间人获取了地址,没有密钥也是无法解密的。2)随机地址只从地址池中进行随机,地址池是双方都已知的,这样,双方可相互确认对方的身份,并且减少了中间人攻击成功的可能性。
[0076] 具体应用过程基本同实施方式1,只有几处略做修改
[0077] 获取android源码(可从google或者百度网盘下载到),在source/external/bluetooth/bluedroid/btif/src/文件夹下找到btif_core.c文件,在btif_core.c文件中的btif_fetch_local_bdaddr()函数中获取配置文件中蓝牙地址的代码后面添加本方法中的随机生成蓝牙地址代码(采用解决方式1时,随机方式同之前所介绍,采用解决方式2时,需提前随机生成一些蓝牙地址,之后从所生成的蓝牙地址中再随机选取),以下代码段为系统原有的从配置文件中获取蓝牙地址
[0078]
[0079]
[0080] 添加代码之后,编译android源码生成镜像文件,刷入真机,此时的系统已经具备随机生成蓝牙地址的功能,只要开启蓝牙,会调用函数btif_fetch_local_bdaddr()来初始化蓝牙程序,其中调用了property_get()函数来获取蓝牙的配置,randomAddr()是紧接着调用的函数,这个是本方法中用于随机生成蓝牙地址,之后将蓝牙地址赋值给btif_storage.c(内核层)文件中的变量btif_local_bd_addr。
[0081] 之后系统或程序获取蓝牙地址时会依次执行以下函数调用:
[0082] BluetoothAdapter(frameworks层)中的getAddress()函数(用来获取蓝牙地址),[0083] IBluetoothManager(frameworks层)的getAddress()函数(进一步的调用),[0084] BluetoothManagerService(frameworks层)的getAddress()函数,[0085] IBluetooth(应用层)的getAddress(),
[0086] AdapterService(frameworks层)的getAddress()函数,
[0087] getAdapterProperty_Native()函数(通过jni调用本地方法),
[0088] bt_interface_t(内核层)中的get_adapter_property()(获取蓝牙的一些属性),[0089] bluetooth.c(内核层)文件中的btif_getadapter_property()(获取蓝牙属性的进一步调用),
[0090] btif_core.c(内核层)文件中的btif_getadapter_property(),
[0091] btif_core.c(内核层)中的btif_transter_context(),btif_send(),[0092] GKI_buffer.c(内核层)文件中的GKI_send_msg()(向指定进程发送消息),[0093] btif_core.c(内核层)中的execute_storage_request()(执行存储请求),[0094] btif_storage_get_adapter_property()(获取存储的一些属性),[0095] 最终会调用到btif_storage.c(内核层)文件中的变量btif_local_bd_addr中存储蓝牙地址。此时的地址就是蓝牙启动时随机生成的地址。
[0096] 采用解决方案1:
[0097] 采用此方案后,需要在通信双方都施行此方法,提前在两台手机上共享同一个密钥,然后每一次通信结束之后,下一次随机地址开启之前,需要将下次的地址加密发送给对方,对方接收地址进行解密,再对之后与其进行链接的设备进行检测,判断是否是随机之前的设备。
[0098] 采用解决方案2:
[0099] 采用此方案后,需要在通信双方都施行此方法,提前在两台手机上共享一蓝牙地址池,其中存储了一定数量的不同的蓝牙地址。每一次随机地址之后,设备都要对链接的设备地址进行检测,是否地址存在于蓝牙地址池中,如果存在,则可判断其是之前共享蓝牙地址池的设备。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈