从LongRange1&2学习lora通信

总算是可以安顿下来好好看看这两题目了

工具https://github.com/rpp0/gr-lora

git clone https://github.com/rpp0/gr-lora.git .
cd docker/
./docker_run_grlora.sh

我们把附件放入docker的工作目录下就好

再次使用

./docker_run_grlora.sh
gnuradio-companion 
docker inspect id //找到docker的工作目录
工具安放在src文件夹下面

题解部分

LongRange1

主要是对LoRa信号的处理

关于LoRa信号的处理,用gunradio 的gr_lora插件解决问题

剩下的就要解决几个参数的问题,其实lorg的通信信号和其他的数字信号通信的道理差不多(暂时不管他的实现逻辑)我们直接看LoRa Receiver这个模块

Sample rate:采样率
Center frequency:中心频率
channel list:直译信道列表
Bandwidth:带宽
Spreading factor:扩频因子(SF)

Center frequency

我们参考滤波器的一些概念

禁带的开始处称作半功率点(Half-power point)。滤波器允许或阻止一定的频率通过并不象刀切一样突然变化,而是有一个过渡,是一条斜线。斜线的倾斜程度用斜率(Slop)来表示。当输出信号下降3分贝时,就是半功率点,也叫负3分贝点,大家可能更加熟悉它的另一个称呼“截止频率”(Cutoff Frequency)。带通和带阻滤波器各自有两个半功率点,这两点的中心就称为中心频率(Center Frequency)

channel list

这里说的是lora信号的信道的范围,这里可参考国际规定的lora信道规范标准

Bandwidth

我们常见的带宽的定义,带宽可以理解为能携带的信号的大小,(直观的说就是我们看信号波状图的信号变化范围的宽度)

Bandwidth和Sample rate存在整数倍关系,采样率大于带宽的2倍并且二者常呈整数倍关系

Spreading factor

LoRa采用多个信息码片来代表有效负载信息的每个位,扩频信息的发送速度称为符号速率(Rs),而码片速率与标称的Rs比值即为扩频因子(SF,SpreadingFactor),表示了每个信息位发送的符号数量

理解了这些概念之后我们就可以取参数了

首先知道了频率和采样率(BW不应该是带宽吗),这里给的也是中心频率,但是通过实际查看频谱图发现并不是,给出的500.512.5mHz并不在波的中心,所以这里手动调一下,得到波的中心频率大约为500.500.500左右mHz(500.512.5m+375k也是这个结果,不知道有没有关系)

我们估算一些带宽 125k满足整数倍关系

Spreading factor的范围是6-12

我们构建类似于这样的流程图

解释:第一部分是进行数据类型的转换,第二部分可以理解成限流作用是防止进程太大,三部分就lora解码

Major opcode: 62 (X_CopyArea)
  Resource id:  0x260000d
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 08 30 00 41 6e 79 6f 6e 65 20 3f 8e dc
 4e 31 70 57 65 6c 63 6f 6d 65 2c 20 42 65 20 41 20 52 57 43 54 46 65 72 21 20 72 77 63 74 66 7b 47 72 33 33 74 5f 46 72 30 6d 5f 4c 6f 52 34 5f 32 36 39 33 32 38 30 32 66 32 36 61 38 63 39 62 34 35 31 39 65 62 36 66 39 30 30 66 36 37 36 66 7d 83 c3

LongRange2

同样的道理

这里可能会出现这样的报错

因为我的工具是用docker起的因为本机的环境我实在是配不好,在使用gun radio的wavfilesource的时候会出现以上的报错(悲,暂未找到原因所在

from scipy.io import wavfile
import numpy as np
samplerate, data = wavfile.read('./486_375MHz-1MSps-1MHz.wav')
signal = data[:,0] + data[:,1] * 1j
signal = signal.astype(np.complex64)
signal /= (2**32)//2
signal.tofile("./486_375MHz-1MSps-1MHzcomlex64")

我们可以使用以上的脚本来平替wavfilesource

我们可以看到文件名很明显给出了一些信息

我们知道了

采样率: 1M
频段:375M

带宽差不多是250k

当我sf在11的时候数据正确

2d 31 e0 bc 4b 6c fa c4 c0 6d fa 66 26 d2 02 0b 08 a7 92 b3 78 fb 63 77 d7 e0 54 d7 4f 67 1e c0 2d f1 8c 7d 04 66 c9 31 bb 22 40 0f c9 ec 25 c8 71 33
 1b 31 e0 c4 c0 6d fa bc 4b 6c fa 29 5d 91 38 03 08 a7 92 12 19 7e 5e 99 47 1a 63 33 0f d5 24 55
 49 31 20 c4 c0 6d fa bc 4b 6c fa a6 41 be 1e 0b 08 a7 92 b9 4d 99 11 17 1c a9 be 15 47 44 0f f1 d6 ce 46 02 e2 d2 a4 11 af e6 da e9 f2 0c db d0 5e e5 04 3b 82 cd 6c 79 47 31 94 f9 79 73 d9 0c 85 b3 09 8c c7 22 73 85 64 36 c8 be 0a de 
 1b 31 e0 bc 4b 6c fa c4 c0 6d fa 0f 21 39 44 03 08 a7 92 b8 56 c7 f0 c5 8e 43 63 70 27 c9 75 2d
 5f 30 00 ff ff ff ff c4 c0 6d fa a3 f3 0f 12 03 08 a7 92 aa c1 8d 79 d8 3c 56 bc 10 34 5a ea 0f cc 82 91 41 29 1c 63 01 cc 6e 23 15 f6 a1 0f 72 20 b9 5d f1 88 c5 e5 0b ec ec 89 cb 54 b5 40 6e c1 83 c1 b7 bf 77 5e 6b ff 15 0d aa 09 c8 3d 6c 98 4f 70 c9 e2 dc 26 97 2f 84 e0 5c ba e7 5a 89 51 d4 cd 2f
 5f 30 00 ff ff ff ff c4 c0 6d fa a3 f3 0f 12 02 08 a7 92 aa c1 8d 79 d8 3c 56 bc 10 34 5a ea 0f cc 82 91 41 29 1c 63 01 cc 6e 23 15 f6 a1 0f 72 20 b9 5d f1 88 c5 e5 0b ec ec 89 cb 54 b5 40 6e c1 83 c1 b7 bf 77 5e 6b ff 15 0d aa 09 c8 3d 6c 98 4f 70 c9 e2 dc 26 97 2f 84 e0 5c ba e7 5a 89 51 d4 d7 b3 
 2d 31 e0 ff ff ff ff bc 4b 6c fa ed bb 63 1c 03 08 a7 92 c9 4d 34 c5 67 d1 39 89 47 9d 37 6c 8a 0c ac dc 65 8d 12 56 4a 93 ef 74 00 25 44 37 ac 10 56 
 2d 31 e0 ff ff ff ff bc 4b 6c fa ed bb 63 1c 02 08 a7 92 c9 4d 34 c5 67 d1 39 89 47 9d 37 6c 8a 0c ac dc 65 8d 12 56 4a 93 ef 74 00 25 44 37 ac 39 d8
 1f 31 40 ff ff ff ff bc 4b 6c fa a6 20 df 2d 03 04 a7 92 5a fa cd 43 97 76 00 36 1b 8c c3 f5 0f bd 5d 65 2e 
 1f 31 40 ff ff ff ff bc 4b 6c fa a6 20 df 2d 02 04 a7 92 5a fa cd 43 97 76 00 36 1b 8c c3 f5 0f bd 5d 87 3e
 68 30 60 ff ff ff ff c4 c0 6d fa 88 99 c2 02 03 04 a7 92 50 01 50 2e 35 d7 3a b7 93 c3 e9 ad 6a cc 9d a6 a4 95 5b c5 6b 80 54 e9 98 9d 76 f5 35 5c f2 86 8b 90 bf fa e3 21 d5 10 77 be 4e 17 74 fc 07 4f 63 a4 c0 af 6b a3 8f 33 a8 29 b0 78 4b da db cc 73 8b 16 e9 30 e7 41 c4 8f 4d 6c 0c ab 01 2e 56 05 12 2d ce 40 ea eb 7b 76 26 
 68 30 60 ff ff ff ff c4 c0 6d fa 88 99 c2 02 02 04 a7 92 50 01 50 2e 35 d7 3a b7 93 c3 e9 ad 6a cc 9d a6 a4 95 5b c5 6b 80 54 e9 98 9d 76 f5 35 5c f2 86 8b 90 bf fa e3 21 d5 10 77 be 4e 17 74 fc 07 4f 63 a4 c0 af 6b a3 8f 33 a8 29 b0 78 4b da db cc 73 8b 16 e9 30 e7 41 c4 8f 4d 6c 0c ab 01 2e 56 05 12 2d ce 40 ea eb 7b e2 d3 
 22 31 70 ff ff ff ff c4 c0 6d fa 5f 8a 54 22 03 04 a7 92 53 1f 89 a3 6f ea 30 18 c9 ce b7 e7 1f a3 cd 72 71 ed 14 0f 
 22 31 70 ff ff ff ff c4 c0 6d fa 5f 8a 54 22 02 04 a7 92 53 1f 89 a3 6f ea 30 18 c9 ce b7 e7 1f a3 cd 72 71 ed a7 3a

数据的前三个和后两个可以去掉参考lora的数据包结构

bc4b6cfac4c06dfa6626d2020b08a792b378fb6377d7e054d74f671ec02df18c7d0466c931bb22400fc9ec25c8
c4c06dfabc4b6cfa295d91380308a79212197e5e99471a63330fd5
c4c06dfabc4b6cfaa641be1e0b08a792b94d9911171ca9be1547440ff1d6ce4602e2d2a411afe6dae9f20cdbd05ee5043b82cd6c79473194f97973d90c85b3098cc72273856436c8be
bc4b6cfac4c06dfa0f2139440308a792b856c7f0c58e43637027c9
ffffffffc4c06dfaa3f30f120308a792aac18d79d83c56bc10345aea0fcc829141291c6301cc6e2315f6a10f7220b95df188c5e50becec89cb54b5406ec183c1b7bf775e6bff150daa09c83d6c984f70c9e2dc26972f84e05cbae75a8951d4
ffffffffbc4b6cfaedbb631c0308a792c94d34c567d13989479d376c8a0cacdc658d12564a93ef7400254437ac
ffffffffbc4b6cfaa620df2d0304a7925afacd43977600361b8cc3f50fbd5d
ffffffffc4c06dfa8899c2020304a7925001502e35d73ab793c3e9ad6acc9da6a4955bc56b8054e9989d76f5355cf2868b90bffae321d51077be4e1774fc074f63a4c0af6ba38f33a829b0784bdadbcc738b16e930e741c48f4d6c0cab012e5605122dce40eaeb7b
ffffffffc4c06dfa5f8a54220304a792531f89a36fea3018c9ceb7e71fa3cd7271ed

这样我们就提取到了有效的载荷

这个时候我们把目光放在题目的附件flashdump上面

发现是meshtastic的dump文件那么我们去寻找 meshtastic的手册以及源码来解读报文

Mesh Broadcast Algorithm:Mesh Broadcast Algorithm | Meshtastic

我们看到开头的fffffff也正好和我们的数据包结构能正好对应上

并且下面的介绍说是 AES256-CTR 的加密方式

firmware/src/mesh/Channels.cpp at master · meshtastic/firmware (github.com)

找到原始psk

meshtastic-backend/src/main/java/org/meshtastic/backend/service/Crypto.kt at master · meshtastic/meshtastic-backend (github.com)

找到iv构造

结合我们上面了解的包结构iv就是 ID +00000000+NodeID+00000000

bc4b6cfac4c06dfa6626d2020b08a792b378fb6377d7e054d74f671ec02df18c7d0466c931bb22400fc9ec25c8
iv:6626d20200000000c4c06dfa00000000

但是我们那上面的原始的psk不能解出含有flag部分的密文所以我们要找出真正的密钥

8000地址定义分区表的一些信息

得知大概位置在下图

Buddies是出题者新建的channels,图所标记的就是key了

得知key对这条信息进行解密

ffffffffc4c06dfa8899c2020304a7925001502e35d73ab793c3e9ad6acc9da6a4955bc56b8054e9989d76f5355cf2868b90bffae321d51077be4e1774fc074f63a4c0af6ba38f33a829b0784bdadbcc738b16e930e741c48f4d6c0cab012e5605122dce40eaeb7b
iv:8899c20200000000c4c06dfa00000000
key:cef8db8e8e6017fd6dcca21db8a1476d451480acd7f4f9f769a763f528c011f7

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值