当前位置: 首页>后端>正文

Pixhawk--加密和防提取

当辛辛苦苦调试OK的参数,被别人连上飞地面站后轻松获取,是不是有点难受?本文针对四旋翼Copter4.0.7和(4.1.5)最新版本调试了两个加密方法。

Ardupliot飞控PID等参数加密屏蔽方法

4.0.7固件

在对4.0.7版本的加密过程中,主要参考了MAVLINK消息在Ardupilot中的接收和发送过程并结合MAVLINK协议定位了源码的位置。

调试原理:通过飞控与地面站之间的MAVLINK传输协议中的msgid进行代码的定位。

调试方法:通过在源码中添加send_text函数在Mission Planner对关键信息进行打印。

通过解析,有两种思路对参数进行屏蔽:

1.改飞控的接受参数:在GCS_Param.cpp中,改存数据(handle_common_message()(GCS_Common.cpp)->handle_common_param_message() -> handle_param_request_list()函数中)

2.改飞控的发送参数:在GCS_Common.cpp文件中,try_send_message()函数中通过对message_id进行switch-case判断跳转至在GCS_Param.cpp中的queued_param_send()函数中对改好的数据结构进行发送

在源码中,飞控的接受函数的msg.msgid(MAVLINK_MSG_ID_PARAM_REQUEST_LIST)是通过memcpy函数将参数列表进行复制,如下图所示。

Pixhawk--加密和防提取,第1张

而飞控的发送函数中,根据调试打印的messageId(MSG_NEXT_PARAM)定位到GCS_Param.cpp中的GCS_MAVLINK::queued_param_send()函数

Pixhawk--加密和防提取,第2张

关键的发送参数信息定位到71~91行

Pixhawk--加密和防提取,第3张

内联函数mavlink_msg_param_value_send()中的param_name即为MP中的参数名字;

_queued_parameter->cast_to_float(_queued_parameter_type)为将参数强转为浮点型后输出。如果屏蔽所有参数只需将该参数改为float(0)即可,如下图所示。

Pixhawk--加密和防提取,第4张

效果如下图所示。

Pixhawk--加密和防提取,第5张

https://www.xamrdz.com/backend/3xf1920658.html

相关文章: