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

文档序号:9765819阅读:953来源:国知局
一种利用安卓系统随机生成蓝牙地址的方法
【技术领域】
[0001] 本发明属于网络安全计算机技术领域,设及一种利用安卓系统随机生成蓝牙地址 的方法。
【背景技术】
[0002] 由于目前移动设备的普及,对蓝牙的使用也日渐增多,同时也伴随着蓝牙信息安 全问题的突出,即出现针对蓝牙的攻击,其中危害较大的就是针对蓝牙的中间人攻击,中间 人攻击可W监听、收集甚至篡改通信双方的通信内容,使得正常的通信中断,而通信双方往 往很难发现,并且认为自己仍然是在正常通信。对于中间人攻击,目前的防范措施非常有 限,起到的作用也是微乎其微,针对蓝牙中间人攻击的有效防范措施就更加稀少。

【发明内容】

[0003] 本发明要解决的技术问题是提供一种利用安卓系统随机生成蓝牙地址的方法,该 方法通过在蓝牙正常启动时,系统从配置文件中读取蓝牙地址,存储在内存中,在中间人攻 击防范程序中,运用蓝牙地址随机器,在系统读取蓝牙地址后,并不直接存储,而是替换成 用蓝牙地址随机器生成的地址,此时地址与之前的地址不再相同,而中间人可能仍然持有 先前的地址,此时中间人的攻击就会失败。
[0004] 蓝牙地址共有六个字节分为S部分:即24位地址低端部分LAP、8位地址高端部分 UAP和16位无意义地址部分NAP;其中,NAP和UAP是生产厂商的唯一标识码,由蓝牙权威部口 分配给不同的厂商,LAP由厂商内部自由分配;对于某一种型号的手机或设备,所有个体的 NAP、UAP固定不变,LAP可变。
[0005] 本发明的技术方案为:
[0006] -种利用安卓系统随机生成蓝牙地址的方法,该方法根据已有蓝牙地址的格式, 采用随机函数rand(),对蓝牙地址变量进行赋值;运用代码srand( (unsigned int) (time (0)))和((rand()〉〉8)&0xFF)将产生的随机数赋值给蓝牙地址变量;最后使用已赋值的蓝 牙地址变量,用于中间人攻击防范或者其他,该方法具体包括W下步骤:
[0007] 第一步,启动蓝牙程序,通过安卓应用层化i调用btif_core. C获取蓝牙地址变量; 具体函数调用如下:
[000引 1.1调用BluetoothAdapte;r(frameworks层)中的getA(Mress()函数,getAcMress O函数用来获取蓝牙地址;内部转至进一步调用IBluetoothManager(frameworks层)的 getAd化ess 0 函数,再转至调用BluetoothManagerService (frameworks层)的getAd化ess O函数,再转至调用应用层IBluetooth的getAddress(),最后转至调用Adapte;rSe;rvice (;1^拘1116*0'43层)的邑614(1化633()函数,再调用邑614(1日口16巧1'0口61'17_胞1:;[¥6()函数(通过 jni调用本地方法);
[0009] 1.2调用131:_;[]116计日。6_1:(内核层)中的邑61:_日(1日口161'_口1'0口61'17〇,获取蓝牙属性;
[0010] 调用bluetooth. C(内核层)文件中的btif_getadapte;r_p;rope;rty(),获取蓝牙属 性的进一步调用,此时已经进入内核层的调用;
[0011 ]调用btif_core.C(内核层)文件中的btif_getadapte;r_p;rope;rty();
[0012]调用btif_core.C(内核层)中的btif_transte;r_context(),btif_send();
[001引调用GKI_buffer. C(内核层)文件中的GKI_send_msg(),向指定进程发送消息;
[0014] 调用btif_core.C(内核层)中的exe州te_storage_request(),执行存储请求;
[0015] 调用btif_storage_get_adapte;r_p;rope;rty(),获取存储的一些属性;
[0016] 最后调用btif_storage . C(内核层)文件中的变量btif_local_bd_add;r,其中, btif_local_bd_ad化中存储蓝牙地址。
[0017] 第二步,采用随机函数rand(),得到随机数,运用代码srand( (unsigned int) (t ime (0)))和((rand()〉〉8)&0xFF)将得到的随机数赋值给ad化蓝牙地址变量;具体代码 为:
[0018] srand((unsigned int)(time(O)));//1
[0019] acM;r-〉a(Mress[0]=0x20; //2
[0020] acM;r-〉a(Mress[l]=0x20; //3
[0021] add;r-〉ad(lress[2] = (uin1:8_t) ((rand( )〉〉8)&0xFF); //4
[0022] acM;r-〉a(Mress[3] = (uin1:8_t) ((rand( )〉〉8)&0xFF); //5
[0023] acM;r-〉a(Mress[4] = (uin1:8_t) ((rand( )〉〉8)&0xFF); //6
[0024] acM;r-〉a(Mress[5] = (uin1:8_t) ((rand( )〉〉8)&0xFF); //7
[0025] 上述具体代码的第二S行赋值蓝牙地址变量addr的第一二字节,使用固定的 0x20;第四到屯行填充地址蓝牙地址变量ad化的第S到六字节,使用随机字节;
[00%] 其中,ad化是61:_6(1日(1化_1:类型的指针变量,用于指向存储蓝牙地址的变量;srand ((unsigned int)(time(0)))用于设置随机数种子,产生后面的随机数,time(O)用来得到 当前时间并转化为unsigned int类型;rand()用于产生一个随机数;rand〇〉〉8是将产生的 随机数右移8位,结果是低8位为有意义的数,高位为0;rand()〉〉8&0xFF是将移位后的随机 数与OxFF进行'&'运算,取低8位的数,最后将产生一个Sbit的随机数赋值给ad化蓝牙地址 变量。
[0027] 其中,61:_6(1曰(1化_1:的定义为:
[00巧]Typedef struct{
[00巧] Uin1:8_t address[6];
[0030] }_attribute_((packed))bt_bdaddr_t〇
[0031] _attribute__((packed))的作用为告诉编译器取消结构在编译过程中的优化对 齐,按照实际占用字节数进行对齐,是GCC特有的语法。
[0032] 第S步,使用已赋值的acMr蓝牙地址变量,用于防范中间人攻击。
[0033] 使用时,通信双方中的一方开启随机蓝牙地址程序,在间隔一段时间后对地址进 行随机,而此时中间人攻击程序获取的仍然是随机之前的地址,通过信息的不对等,使得中 间人攻击失败。
[0034] W上各个文件位置为:
[00:35] BluetootMdapter. 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
[004 引 /external/bluetooth/blue化oid/btif/src/
[0049] 本发明的效果和益处是能够有效的产生随机的蓝牙地址,用于中间人攻击防范或 者其他用途;因为本发明未改变协议,所W普及性和实用性较高,可W与当前蓝牙设备兼 容。
【附图说明】
[0050] 图1是蓝牙启动过程流程图;
[0051 ]图2是蓝牙启动过程函数调用图;
[0化2]图3是蓝牙地址格式说明图。
【具体实施方式】
[0053] 1.中间人攻击防范程序
[0054] 在蓝牙正常启动时,系统从配置文件中读取蓝牙地址,存储在内存中,在中间人攻 击防范程序中,运用蓝牙地址随机器,在系统读取蓝牙地址后,并不直接存储,而是替换成 用蓝牙地址随机器生成的地址,此时地址与之前的地址不再相同,而中间人可能仍然持有 先前的地址,此时中间人的攻击就会失败。
[0055] 具体应用过程为:获取android源码(可从google或者百度网盘下载到),在 source/external/bluetooth/blue化oid/btif/src/文件夹下找到btif_core. C文件,在 61:1;1^_(30'6.(3文件中的131:1;1^_'61:证_1〇。曰1_6(1曰(1化()函数中获取配置文件中蓝牙地址的代 码后面添加本方法中的随机生成蓝牙地址代码,W下代码段为系统原有的从配置文件中获 取蓝牙地址
[0化6] if(property_gd(PROPERTY_BT_BIMDDR_PATH,val,NUIX)) in.t addr_fd, /V定义文件句柄 BTIF_TRACE_DEBUG("local Maddr is Stored 虹 %s",va!); if ((adcir_fd 二 open(val, 0_RD0NLY)) !二-1) I r日il酉.义件 { niems別(vai,(;,si/e〇r(va〇.);.//巧么巧巧 val read(addr_fd,va!、FACTORY_BT_BDADDR_STO民AGE-LCN):八谋取 蓝牙地址到变量val中
[0化7] str2bd(vaUocal_ad的;州将val中的地址字符串转换成bt_bdaddr_t类型 存入1佩aljidd!-变量中 } }
[0化引添加代码之后,编译android源码生成镜像文件,刷入真机,此时的系统已经具备 随机生成蓝牙地址的功能,只要开启蓝牙,会调用函数btif_fetch_local_bdad化0来初始 化蓝牙程序,其中调用了pr0pe;rty_get ()函数来获取蓝牙
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1