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

    文章

    6085

    浏览量

    35216
收藏 人收藏

    评论

    相关推荐

    关于MAC地址申请与运用的常见问题

    。了解完MAC地址码,大家应该也想知道MAC地址申请与运用过程中容易遇到什么样的问题。接下来利检测将
    的头像 发表于 11-07 16:42 136次阅读
    关于<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申请与运用的常见问题

    中科达荣获2024年软件和信息技术服务优秀企业

    及前百家企业”名单。中科达凭借非凡的技术实力与持续的创新能力,成功入选“2024年度软件和信息技术服务竞争力百强企业”以及“2024年软件和信息技术服务优秀企业”。
    的头像 发表于 10-30 11:44 383次阅读

    向IEEE机构申请MAC地址的申请流程

    所有设备在投入市场销售使用前该台设备都必须写入MAC地址,以便设备后续使用的识别与安全性监控。而MAC地址的申请方法主要可以通过两种渠道进行
    的头像 发表于 09-29 17:52 279次阅读
    向IEEE机构申请<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>的申请流程

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

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

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

    在当今数字化时代,网络设备的唯一标识符——MAC地址,对于确保设备的网络通信安全与准确性至关重要。IEEE(电气和电子工程师协会)作为全球知名的技术组织,负责为网络设备制造商分配MAC
    的头像 发表于 08-05 16:59 384次阅读
    向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 443次阅读
    怎么申请<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 513次阅读
    深入了解IEEE协会:设备<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>申请指南

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

    )提供了一种独特的标识方案,即MAC地址(MediaAccessControlAddress)。本文利检测将深入探讨IEEE和设备MAC地址
    的头像 发表于 04-16 17:40 639次阅读
    深入了解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 1037次阅读
    怎么注册<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 6515次阅读

    无线设备MAC地址注册的最佳实践和常见问题解答

    无线网络设备MAC地址注册是确保网络安全及设备相通的重要步骤。下列讲的是无线网络设备MAC地址注册的良好实践和问题答疑。良好实践:1.掌握MAC
    的头像 发表于 11-29 17:02 583次阅读
    无线设备<b class='flag-5'>MAC</b><b class='flag-5'>地址</b>注册的最佳实践和常见问题解答