英创信息技术EM9280加密认证使用说明

描述

采用英创公司的EM9280工控主板搭建的客户整机产品,由于EM9280是市场上的标准化产品,整机客户会面对保护自身知识产权这一问题,主要是针对如何保护客户自己的应用程序的问题。本文将详细介绍客户如何在EM9280通用板卡上进行用户加密认证,从而达到保护应用程序的目的。

本文认为需要进行应用程序加密的客户,已完全掌握了用Mfgtools烧写EM9280内核文件的方法。对这方面还不了解的客户,请参考光盘资料《EM9280内核烧写说明》。 

EM9280产品用户加密的流程如下:

1、烧制加密码到EM9280板卡中。

EM9280支持的加密码长度从8字节到128KB字节。

1)用户可自己自行定义加密码,其长度最小为8字节,最长不超过128KB字节,并将相应的加密码生成为一个二进制文件:uid.nb0。

2)将生成好的uid.nb0文件复制到烧制EM9280内核文件的相关目录。

MfgToolsProfilesMX28 WinCE UpdateOS firmwareEM9280

3)修改MfgToolsProfilesMX28 WinCE UpdateOS firmwareucl.xml文件内容,增加烧制密码文件的操作。

Notity device to prepare receiving a raw data file with specified starting address.

Sending a user id file for authentication.

write userid.

在光盘的“烧写工具及内核”目录中,根据不同的LCD分辨率,提供了可三个支持烧写用户ID的xml文件如下:

MfgToolsProfilesMX28 WinCE UpdateOS firmwareucl_480272_uid.xml

MfgToolsProfilesMX28 WinCE UpdateOS firmwareucl_640480_uid.xml

MfgToolsProfilesMX28 WinCE UpdateOS firmwareucl_800480_uid.xml

4)一般客户可直接点击烧写批处理文件:

EM9280_480272_uid.bat

EM9280_640480_uid.bat

EM9280_800480_uid.bat

即可进行EM9280带有用户加密码的自动烧写。对有经验的客户,也可参考“3)”中的说明,自行修改ucl.xml文件,然后直接启动Mfgtools进行烧写。具体烧写的方法请参见文档《EM9280内核烧写说明》一文。需要注意的是,每次修改了ucl.xml后,必须重新启动MfgTools.exe程序。

2、应用程序中增加对于加密码的认证判断,从而达到保护应用程序的目的。

英创公司提供了一个对加密码进行认证的函数,该函数通过调用IOCTL进行认证,如果认证通过则函数很快返回,如果认证失败系统将进入死循环状态。 

#include 'STDAFX.H'
              #include 'WINIOCTL.H''WINIOCTL.H'
              #include 'STOREMGR.H'
              #define IOCTL_VERDOR_FLASH_BASE   2048
              #define IOCTL_DISK_AUTHENTICATION CTL_CODE(FILE_DEVICE_DISK, IOCTL_VERDOR_FLASH_BASE + 0x14, METHOD_BUFFERED, FILE_ANY_ACCESS) 
              /*//////////////////////////////////////////////////////////
              功能描述:对用户加密的ID数据进行验证
              输入参数:
                      pData -- 用户验证的加密ID数据。
                      dwLength -- 用户验证加密数据的长度,范围:~128K字节
              返回值:
                      TRUE -- 验证通过
                           -- 验证失败, 函数不返回。
              ///////////////////////////////////////////////////////////*/
              BOOL UserAuthentication(LPBYTE pData, DWORD dwLength)
              {
                      BOOL ret = FALSE;
                      HANDLE hStore; 
                      hStore = OpenStore( _T('DSK1:') );
                      if( hStore==INVALID_HANDLE_VALUE ) 
                      { 
                              printf( 'OpenStore NandFlash Error ' );
                              return ret;
                      }
                      // do security check
                      ret = DeviceIoControl(
                              hStore,
                              IOCTL_DISK_AUTHENTICATION,
                              (PBYTE)pData,
                              dwLength, 
                              NULL,
                              NULL,
                              NULL,
                              NULL);
                     CloseHandle( hStore );
                     return ret;
              }

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分