00:12
哈喽,大家好,那这个视频呢,我们来看一下如何控制手表去显示任意的消息啊,我现在呢,已经开始进行抓包了,那我当我通过我的小号去给我的手机发送一个微信消息,那手机收到消息以后呢,就会通过蓝牙告诉手表,手表就会显示这个微信的消息,我们来看一下。呃,首先呢,我这个。微信的昵称呢,叫test,然后呢。大家看一下效果,比如我发个一二啊发送。收到以后呢,这边就会显示。Test, 然后消息是一二啊,给他先删掉,那因为我已经开始抓包了嘛,所以现在整个的通讯流量就已经被我抓取下来了,我们给它CTRLC结束掉,然后呢,找到这个流量包。
01:10
给它复制出来,我们分析一下。那前面还是一些广播包,我们就不看了,然后这边也同样把这些没有用的呼吸包给它过滤掉,那因为我是在最后的时候才发了一个消息,所以说我们直接拖到最后啊,看一下有没有right啊,这里有一条send right come.然后呢,你也可以在这边解析的阿斯特码这边看到是test,然后一二啊,正好对应了我们的微信昵称和我们发送的消息,那我们把这段数据复制出来看一下。那在这里面呢,我们看一下test啊是哪一个。
02:01
你看七四。所以这里这里就是test,然后后面呢,三一和三二就是一二啊,它的时刻定制。那现在我们找到了。发送的昵称和消息,我们来尝试一下,这玩意儿能不能直接给他重放啊,那我们尝试一下。现在呢,我用nf connect去扫描一下周围的设备,然后找到蓝牙手表,然后呢我们连接。我给它删掉这些空格,复制一下。那另外呢,我们该发给谁呢?我们同样啊,可以在这边看一下handle,他给他解析的这个句柄下面的UID啊,6E400002啊,还是这一个,我们就给他发一下。
03:04
Send啊,可以看到。手表呢,它就又显示了一遍。又显示了一遍test,然后一二啊。删掉。那说明我们找到了这条命令啊,是对的,它确实就是TEST121,然后呢,我们尝试一下,我们能不能修改那个呢,比如说我们让它显示个。2对吧,我们这把这改成2,我们再来发一遍。3的,那可以看到这边已经是2了,但是呢,现在手表是没有任何的响应的,所以说他这一部分肯定是有一些校验的逻辑的,那现在怎么办呢?我们就需要分析一下它的APP啊,看一下它到底是怎么组织的这个数据包。
04:05
那我这边用的工具呢,是GDX啊,也是一个开源的一个。软件,大家可以在getha上找到它的下载页面。直接给他拖进来,然后让它加载一会儿啊。大家可以看到这这东西很多啊,那我们还是直接搜索一下啊。该搜什么呢?那刚才我们显示的是微信消息,那微信啊,它的这个英文呢,可以叫WeChat啊,你们搜一下WeChat。那你可以看到很多啊,也存出来很多,有一些变量啊,有一些这个这个函数呀,都会涉及到WeChat,那这边有一个比较明显的message type啊,比较符合我们要找的东西,因为我们的消息类型啊,是微信发过来的消息,所以我们点过去啊,看一下到底是个啥,那可以看到这边定义了特别多的这个消息类型啊,有电话的啊对吧,有短信的,有邮箱的,有推特的啊,有QQ的,有微信的,那我们的微信啊对应的是10啊注意这里的这个10呢,它是一个十进制,那你转成16进制应该是0A啊。
05:21
我们来看一下这里面有没有0A啊。啊,可以看到在这个位置,诶,那message type后面紧跟的是我们的,呃。微信的昵称,然后后面呢,跟的是我们的发送的content发送的内容啊。然后呢,那前面这一段和后面这一段,我们现在还不知道是什么,那我们就来看一下这个message type是在哪里去涉及到被调用的,他肯定是会把消息进行一些拼接啊,一些封装的,那我们点击它,然后按X快捷键。这边呢,就会显示出所有涉及到这个message type的一些函数或者说功能啊。
06:05
那我们可以发现里面有一些send message的函数啊,我们可以点过去看一下。啊,可以看到有message type啊,然后有title有content,那title应该就是我们这边看到的test这个字段,然后呢,Content应该是内容啊,就是我们刚才发的,我们改回去3132啊。然后呢,他把这些变量啊,最后我看到有一个S的啊,我们点进来看一下。嗯,这里面如果你大概翻一翻的话,你会发现它里面定义了特别多的东西,而且呢,你只是去看它的这个名字,你也可以能大概的理解,你比如说这儿有一个music control啊,应该是用来控制音乐的,然后你往下翻还有一些什么。解析这个phone的呃,电话的对吧,电话的控制,然后有一些send的,Send的一些什么file啊,对吧,甚至一些固件呀,然后什么logo呀,是吧。
07:08
那最重要的是我们的send message函数啊,这里面呢,它同样是解析的message type, 然后title content.那我们来看一下它最后这三个具体的值都放哪去了,首先我们看message type啊,那这样看好像没有地方去用到它,但是如果你往后拖一拖的话,会发现放到这儿了啊,它是根据你的值去取那个枚举的那个类型啊。然后呢,我们来看这个title啊,Title是STRSTR呢,最后转成了BIS,然后BIS最后又放到了102 102,又通过一个循环给它添加到了a a list.啊,那最后呢,还是放到了这个210啊20这个位置,然后呢,这是title,我们再看content content呢是STR2STR2可以看到它放到了8S2这个数组里面,然后82呢又。
08:04
放到了103,然后再通过循环又放到了LIST2。啊,那这这是它涉及到的一些变量,然后去来回的去赋值,那最终呢,就又调用了一个函数叫做send request一个函数啊。我们可以先把这个函数的一些参数给它记下来。那这边有一个ay啊,这个数组我们来看一下它具体是怎么负的值啊,前面我们说message type是拼到了最后,那我们再往前看一下,它都拼了啥。一开始呢,它是这应该是一个取一些时间什么东西的,然后呢,可以看到它前面这几个全都是时间啊,再往后看有一些。BY的一个lengths,然后BA2的lengths,啊,Bit和BA2就是我们的title account, 也就是说它会拼接我们的。
09:07
Bit和BIT2,也就是我们title和content的长度,再跟上我们的message type, 那前面呢,有几个字节,它就是我们的时间相关的参数。那这些参数最后拼完以后呢,会调到这个send request这个函数里面去,我们跟过去看一下。这里面呢,有两个变量啊,我们参考之前截的这个图,第一个变量I10呢,就是56可以看到。I10最后只在这儿用了啊,然后呢,后面的就是整个的一个数组,也就是我们前面可能组完包不知道从哪一位开始啊,一直到大概这个位置。前面某几个啊。然后它是新建了一个数组啊,叫做这个。
10:01
对。然后呢,你说这这里赋值了一个218啊,这里的这个check,我们可以按住CTRL键点它,然后跟过去看一下,它实际上就是把一个int也做了一下类型的转换,我们不需要管它,然后呢,218我们看一下是个什么值啊。开始可以看到是0叉DA啊,我们可以在我们的消息里面找一下,可以看到零叉DA就是我们开头也就是。第0个字节的这个数,那后面呢,根的I10是啥?也就是56了,我们可以确认一下。零叉三把啊,就是这一个。那开头找到以后呢,后面我们看一下是什么。后面跟的看起来是一个长度,然后以上255啊,我们可以加个空格,然后这边呢,是长度右移8以上了25,我们再加个空格。接下来呢,就会把我们传进来的数组整个的去复制到这个date这里面啊,就是后面这一段了,应该。
11:10
啊,那现在我们可以先呃确认一下啊,这个长度到底是不是0F啊,我们一个2个3个4个5个6个7个8个9个十十。十一个十二十三十四十五啊就是这个X15啊,就是这个0F。比如说这一段就是我们传进来的这个数组,然后它前面拼上的。DA38这是固定的一个值,然后后面呢是0 F是它的整个的长度,然后00呢是长度右移,8遇上了255。那在这些数据拼完以后,也就是我们这一段内容啊,我们先把它给它去掉空格。
12:07
我们这一段内容会被放到这个date。这一个。变量里面去,然后呢,可这这边我们往后拖一下啊,可以看到它会调用一个。CRC计算的一个函数,我们点进去。这里呢,把这个数字传进来以后,会做一轮CRC16的一个计算发现单式,那如果你对CRC比较了解的话,你可能会能认出来这是什么什么类型的这个CRC,但我对CRC没有多少了解啊,我只知道怎么用啊,那我们可以搜一下CRC16。我们直接把这一段啊。复制到这儿来,然后随便选一个CRC16。就从第一个开始,我们试一下啊计算,然后看看,可以看到这是第二五亿,那我们这边看一下后面,那其实第25艺它是做了一个反转的,那可以确认的是。
13:11
我们这边的逻辑应该就是CRC16,然后。IBM这么一个模型啊,通过这个方式计算出来的校验附到后面,然后就是我们完整的这个消息了。那这个我们分析的对不对呢?我们可以自己写一个代码去验证一下。啊,我这边已经提前写好了,我们打开看一下。首先呢,你需要导入你做CRC计算的这么一个库函数,然后呢,这里是我的一些用来执行系统命令的一个库,然后我这边接收了title和content,对title content做了一下字节的这个转换。
14:02
同时呢,我的message type是0A,也就是微信,那我们可以改一下,比如改成09,我们看一下待会儿是不是会变化啊,09应该是秋秋啊,我们看一下待会儿是不是QQ。然后后面呢,跟的整个的这一串儿。是从这儿开始,一直到这儿。啊,这一串内容我们可以直接给它完整的留下,不用管它,后面呢,跟的是title的长度,然后再跟的是。Content的长度,然后跟的是message type从这拼过来对吧,这边呢是title,这边呢是content,那整个听完之后呢,再加上开头的这个。DA38啊,开通到DA38。拼完以后就是我们整个的一个be的数据,那但是呢,还需要将CRC的校验,对吧?所以我们再对它进行一个CRC的校验,最后算出来的值附到最后面,最终我们得到了通过b Le发给手表的这一个B的消息,那我们可以通过jt to这个工具,然后指定上Mac地址,然后告诉他我们要写哪一个handle,那这个handle呢,其实就跟刚才VR shark里面看到的。
15:27
就跟VIA课里面看到的这个handle头是一致的。然后后面呢,跟的就是我们message的这个消息啊。OK, 我们来执行一下试试。那台呢是,然后第二第二第二我来打开相机。
16:23
不是为什么卡了呀。哎,去重新把这个蓝牙适配器拔一下。
17:08
哦,我想起来了。应该是我没有断开。好吧。关蓝牙适配器了啊,我们再来重新试一下。那可以看到是QQ的消息啊,然后是1212啊,那这个消息发送成功了。那当然我们想要正常的去发送消息的话,肯定是要把这个消息通知给打开的,嗯,那消息通知其实你可以在转弯的时候,你注意一下,它应该是在刚开始初始化的时候就会给你打开。那通过打包你也可以找到这个开关的一个指令,然后给它自己去开启和关闭消息通知啊。
18:06
啊,那整个的从。标易的协议的介绍,到蓝牙如何抓包,到如何去重放标的消息,然后再到如何分析APP里面的B的协议,啊,我们就介绍完了,那后面。有机会的话分享一些其他的内容啊,下一个视频见。
我来说两句