当辛辛苦苦调试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函数将参数列表进行复制,如下图所示。
而飞控的发送函数中,根据调试打印的messageId(MSG_NEXT_PARAM)定位到GCS_Param.cpp中的GCS_MAVLINK::queued_param_send()函数
关键的发送参数信息定位到71~91行
内联函数mavlink_msg_param_value_send()中的param_name即为MP中的参数名字;
_queued_parameter->cast_to_float(_queued_parameter_type)为将参数强转为浮点型后输出。如果屏蔽所有参数只需将该参数改为float(0)即可,如下图所示。
效果如下图所示。