基础介绍
最近有用户来咨询AIoT设备的安全问题,借此机会了解下博通集成推出的 ARMINO IDK框架,据了解它是一个专为智能物联网(AIoT)设备设计的软件开发框架,旨在帮助开发者基于博通集成芯片(如 BK7258、BK7236 等)快速、高效地构建产品。
框架核心特性
下面是该框架核心特性的梳理:
| 特性类别 | 具体说明 |
|---|---|
| 硬件无关性 | 提供统一的软件框架,降低对具体硬件依赖,提升代码在不同芯片平台间的可移植性。 |
| 丰富外设与驱动 | 支持 DMA, I2S, PWM, ADC, I2C, SPI 等大量常用外设和接口,覆盖物联网设备各种连接和控制需求。 |
| 无线连接 | 内置 Wi-Fi 和 Bluetooth 协议栈,满足设备联网和短距离通信的核心需求。 |
| 多媒体能力 | 提供音频应用开发框架,包括音频流、编解码器、语音通话等,支持多媒体功能的实现。 |
| 案例丰富 | 提供实际应用演示案例(Demo),加速应用开发进程。 |
主要应用场景
基于其强大的功能,ARMINO IDK 非常适用于开发多种智能硬件产品,例如:
- 智能家居设备:如智能音箱、智能开关。
- 便携多媒体设备:如智能眼镜、智能玩具。
- 先进的AIoT产品:如陪伴机器人。
简单示例
以Ubuntu 24.04和BK7258开发板为例,通过一个简单的示例项目了解代码下载、环境部署和编译后文件的安全保护等。
代码下载
可直接从 gitlab 上下载 Armino,命令如下:
mkdir -p ~/armino
cd ~/armino
git clone https://gitlab.bekencorp.com/armino/bk_idk.git
若从git上下载不成功,提示”fatal: unable to access ‘https://github.com/bekencorp/bk_idk.git/‘: Failed to connect to github.com port 443 after 21079 ms: Could not connect to server”错误,解决方案如下:
- 开启VPN,然后重新下载;
- 开了vpn也下载不成功时,可以直接访问https://github.com/bekencorp/bk_idk进行下载,然后选择需要的Tags,直接下载即可。
配置环境
Ubuntu 24.04上配置编译BK7258程序所需的环境。
- 安装必要的工具和依赖库,打开终端,执行以下命令来安装基础的编译工具和Python依赖库;sudo apt update
sudo apt install make cmake python3 python3-pip ninja-build -y
sudo pip3 install pycryptodome click future click_option_group cryptography jinja2 PyYAML cbor2 intelhex - 安装BK7258芯片的程序需要ARM架构的交叉编译工具链。
- 从博通集成(Beken)的官方渠道下载BK7258工具链,参考链接如下:https://dl.bekencorp.com/tools/toolchain/arm/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
- 下载后,将其解压到系统的
/opt/目录下。
- 将下载的Armino拷贝到系统上,解压即可。
编译流程
环境准备好后,就可以开始编译项目了。
- 进入SDK目录cd ~/armino/bk_avdk_smp/bk_idk/
- 执行编译命令 使用
make命令进行编译,通常会编译默认工程app,即bk_idk\projects\app项目。make bk7258PROJECT参数用于指定你要编译的具体项目。make bk7258 PROJECT=你的项目名称 - 编译成功后,生成的固件文件(例如
all-app.bin)通常会位于build/app/bk7258的目录下。

安全防范
安全问题
1.我们以默认的app项目为例,可以看到该app项目的主要代码在app_main.c里;

2.对该项目进行编译后获取到libmain.a、app.elf和app.bin文件,其中libmain.a为编译的中间产物,app.elf和app.bin属于最终产物。
3.使用readelf查看,发现app.bin不属于elf文件个数,app.elf属于标准的elf文件格式。

4.对app.elf进行反编译,可以查看到项目的主要代码指令,如图所示:

防范措施
1.虽然app.elf文件是elf格式,但是查看该文件的头,可以看到程序头太靠近0地址了,对齐是0x10000,前面的空间就不够了,所以对该文件直接加壳就会出错;

2.此时我们就可以对中间文件(静态库.a)进行保护,该文件是项目中源码编译生成的,最后在集成到可执行程序中;

3.然后对libmain.a进行加壳,然后在使用make bk7258进行编译,编译的app.bin和app.elf里集成的都是保护后的静态库,使用ida分析也能看到代码保护上了。
