0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术针对MAC地址的应用程序加密方法

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-01-17 10:09 次阅读

在实际应用中,客户可能希望对自己的程序添加验证过程,使得无法被随意拷贝到其它板子上使用。英创ARM系列工控主板都配有唯一指定MAC,我们可以根据MAC地址,生产加密字符串,存入KEY文件或是注册表内。然后在程序启动部分添加验证代码,验证这个字符串,从而达到防拷贝的目的。

本文介绍MAC的获得方式及几种常用的加密方式。

验证设备

在验证MAC之前,首先应当检查使用的板卡型号,以检查EM9281为例,代码如下。

添加头文件及宏定义,此部分代码均包含在板子对应SDK包中的bsp_drivers.h下

#include

extern"C"__declspec(dllimport) BOOLKernelIoControl( DWORDdwIoControlCode,

LPVOID lpInBuf,

DWORD nInBufSize,

LPVOID lpOutBuf,

DWORD nOutBufSize,

LPDWORD lpBytesReturned);

#defineIOCTL_HAL_BOARD_STATE_READ CTL_CODE(FILE_DEVICE_HAL, 4024, METHOD_BUFFERED, FILE_ANY_ACCESS)

#defineEM9280_BOARD_TYPE_9280 0

#defineEM9280_BOARD_TYPE_9281 1 // -> EM9281

#defineEM9280_BOARD_TYPE_9380 2

#defineEM9280_BOARD_TYPE_9283 3

#defineEM9280_BOARD_TYPE_ES9281 4 // -> ES9281

#defineEM9280_BOARD_TYPE_9287 7

#defineEM9280_BOARD_CFG_SHIFT 14

#defineEM9280_BOARD_CFG_MASK 0x3

#defineEM9280_BOARD_TYPE_SHIFT 4

#defineEM9280_BOARD_TYPE_MASK 0x7

#defineEM928X_BOARD_TYPE_BASE(v) ((v >> EM9280_BOARD_TYPE_SHIFT) & EM9280_BOARD_TYPE_MASK)

#defineEM928X_BOARD_TYPE_SUB_ID(v) ((v >> EM9280_BOARD_CFG_SHIFT) & EM9280_BOARD_CFG_MASK)

#defineEM9287_BOARD_TYPE_SUB_TYPE(v) ((EM928X_BOARD_TYPE_SUB_ID(v)==1)? EM9280_BOARD_TYPE_9281:\

(EM928X_BOARD_TYPE_SUB_ID(v)==2)? EM9280_BOARD_TYPE_ES9281: EM9280_BOARD_TYPE_9287)

#defineEM928X_BOARD_TYPE_ALL(v) ((EM928X_BOARD_TYPE_BASE(v)==EM9280_BOARD_TYPE_9287)? EM9287_BOARD_TYPE_SUB_TYPE(v):EM928X_BOARD_TYPE_BASE(v))

检查板卡型号,以EM9281为例

BOOL bRet;

DWORD dwReturnBytes;

DWORD dwBoardInfo = 0;

dwReturnBytes = 0;

bRet = KernelIoControl(IOCTL_HAL_BOARD_STATE_READ,

NULL, 0,

(LPVOID)&dwBoardInfo,sizeof(DWORD),

&dwReturnBytes);

If(EM928X_BOARD_TYPE_ALL(dwBoardInfo)!= EM9280_BOARD_TYPE_9281)return;

获得MAC地址

必要的头文件和lib库

#include"Iphlpapi.h"

#pragmacomment(lib,"Iphlpapi.lib")

VOIDGetMAC(BYTE* buf)

{

DWORD dwRetVal;

IP_ADAPTER_INFO AdapterInfo[4];

ULONG OutBufLen =sizeof(IP_ADAPTER_INFO);

GetAdaptersInfo(&AdapterInfo[0], &OutBufLen);

GetAdaptersInfo(&AdapterInfo[0], &OutBufLen);

/*if(strcmp(AdapterInfo[0].AdapterName, "ENET1") != 0)

{

return;

}*/

memcpy(buf, AdapterInfo[0].Address, 6);

}

BYTE mac[6];

GetMAC(mac);

char macstr[16];

sprintf(macstr, "%02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

加密策略

英创所有嵌入式板卡都拥有唯一的MAC地址,在对MAC地址加密后,生成唯一的加密KEY。同时程序中判断板卡信息,并验证这个加密KEY。这样可以保证程序必须处于正确的板卡中,并拥有正确的KEY文件,才能执行。

为了增加安全性,加大KEY文件破译难度,可以考虑以下处理

1、将MAC地址与常量字符串混合后,再进行加密,生成加密KEY。

2、多种加密手段结合使用,多次加密。

3、验证失败后“软”关闭程序,可以做延迟处理,并可以考虑重启设备,增加暴力破解KEY的难度。

加密程序流程

获得板卡MAC地址à 执行加密函数à 生成KEY文件置入板卡中

解密程序流程

查询板卡MACà执行加密函数à读取KEY文件中密钥并对比à判断验证是否成功并进行后续执行

读取KEY文件中密钥à执行解密函数à查询板卡MAC并对比à判断验证是否成功并进行后续执行

加密方法

常用的加密方法有很多,可以参考文章《常用加密方法及代码》。同时英创提供这些加密算法相关测试例程,如有需要,可以联系英创工程师获得。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6081

    浏览量

    34937
收藏 人收藏

    评论

    相关推荐

    如何获取MAC地址MAC地址的三个申请条件

    在产品设备都规范化管理的当今社会,如果您的产品设备想要投入市场,设备物理地址MAC地址则是唯一能识别设备的识别码。那么MAC地址的申请条件
    的头像 发表于 09-06 17:14 134次阅读
    如何获取<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的三个申请条件

    怎么申请MAC地址?不同申请方式的区别是什么?

    蓝牙设备的MAC地址是指蓝牙模块中使用的唯一标识符,用于在网络中识别和区分不同的蓝牙设备。这个MAC地址是由美国电气和电子工程师协会(IEEE)分配的,而不是由蓝牙联盟直接分配的。接来
    的头像 发表于 08-22 16:55 211次阅读
    怎么申请<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?不同申请方式的区别是什么?

    向IEEE机构申请MAC地址方法与申请费用组成

    在当今数字化时代,网络设备的唯一标识符——MAC地址,对于确保设备的网络通信安全与准确性至关重要。IEEE(电气和电子工程师协会)作为全球知名的技术组织,负责为网络设备制造商分配MAC
    的头像 发表于 08-05 16:59 178次阅读
    向IEEE机构申请<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的<b class='flag-5'>方法</b>与申请费用组成

    每个ESP-12E设备的Station和softAP的MAC地址是否不同?

    ,并为每个设备提供唯一的 MAC 地址(在 CIPSTAMAC,在 CIMAPMAC)?我需要确保这些设备中的每一个设备都能被识别,因为在我的应用程序中,最多可以有 50 个设备同时连接到一个 IP
    发表于 07-16 07:13

    怎么申请MAC地址?MAC地址申请流程分享

    络通信中扮演着至关重要的角色。而如何申请MAC地址相信却有很多企业或者制造厂商不太了解。那么接下来利检测将通过本篇内容将为您详细分享MAC地址
    的头像 发表于 07-10 17:30 232次阅读
    怎么申请<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申请流程分享

    ESP32-C3 iOS微信小程序开发获取不到芯片蓝牙mac地址怎么解决?

    微信小程序的官方文档显示: i0S 设备上扫描获取到的 deviceId 是系统根据外围设备 MAC 地址及发现设备的时间生成的 UUD。意思是iOS系统对原本蓝牙设备广播的mac
    发表于 06-06 06:49

    深入了解IEEE协会:设备MAC地址申请指南

    在数字化浪潮中,设备之间的通信变得日益频繁和重要。而在这个通信网络中,每一台设备都需要一个独特的身份标识来帮助大家有效识别设备信息,那就是MAC地址。本篇内容,利检测将带大家深入了解
    的头像 发表于 05-09 17:20 354次阅读
    深入了解IEEE协会:设备<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申请指南

    深入了解IEEE,设备MAC地址码的申请与分配指南

    )提供了一种独特的标识方案,即MAC地址(MediaAccessControlAddress)。本文利检测将深入探讨IEEE和设备MAC地址
    的头像 发表于 04-16 17:40 487次阅读
    深入了解IEEE,设备<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>码的申请与分配指南

    RX78M组 EtherCAT ETG.5003示例程序固件信息技术

    电子发烧友网站提供《RX78M组 EtherCAT ETG.5003示例程序固件信息技术.pdf》资料免费下载
    发表于 02-21 14:22 1次下载
    RX78M组  EtherCAT ETG.5003示例<b class='flag-5'>程序</b>固件<b class='flag-5'>信息技术</b>

    怎么注册MAC地址MAC地址的必要性介绍

    MAC地址(MediaAccessControlAddress)是分配给网络设备的唯一标识符。它是一个由48位二进制数组成的地址,通常以6个十六进制数字对表示,中间用冒号或连字符分隔开。MAC
    的头像 发表于 12-22 15:44 875次阅读
    怎么注册<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的必要性介绍

    如何绑定ip地址mac物理地址呢?

    如何绑定ip地址mac物理地址呢? 绑定IP地址MAC物理地址是一种网络管理和安全措施,可以
    的头像 发表于 12-07 09:33 5695次阅读

    MAC地址注册的网络安全影响和措施分析

    MAC地址本身并不加密,因此可能受到欺骗或伪造攻击。2.隐私保护:MAC地址作为设备的唯一标识符,可能泄露设备的位置
    的头像 发表于 11-16 16:19 843次阅读
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>注册的网络安全影响和措施分析

    为什么同时需要IP和MAC地址

    MAC是网络中用来标识网卡设备的唯一网络地址。由相关硬件制造商统一分配,每台电脑的MAC地址都是唯一的。
    发表于 11-14 09:32 835次阅读
    为什么同时需要IP和<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>?

    MAC地址注册的原理和应用

    MAC地址注册是指在网络设备中,将设备的物理地址(即MAC地址)与设备的IP地址进行关联和注册的
    的头像 发表于 11-13 16:07 823次阅读
    <b class='flag-5'>MAC</b><b class='flag-5'>地址</b>注册的原理和应用

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48