激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

針對MAC地址的應用程序加密方法

 2014-7-31              

  在實際應用中,客戶可能希望對自己的程序添加驗證過程,使得無法被隨意拷貝到其它板子上使用。英創ARM系列工控主板都配有唯一指定MAC,我們可以根據MAC地址,生產加密字符串,存入KEY文件或是注冊表內。然后在程序啟動部分添加驗證代碼,驗證這個字符串,從而達到防拷貝的目的。



  本文介紹MAC的獲得方式及幾種常用的加密方式。


驗證設備


  在驗證MAC之前,首先應當檢查使用的板卡型號,以檢查EM9281為例,代碼如下。


  添加頭文件及宏定義,此部分代碼均包含在板子對應SDK包中的bsp_drivers.h下

  #include <winioctl.h>

   

  extern "C" __declspec(dllimport) BOOL KernelIoControl( DWORD dwIoControlCode,

                                            LPVOID lpInBuf,

                                            DWORD nInBufSize,

                                            LPVOID lpOutBuf,

                                            DWORD nOutBufSize,

                                          LPDWORD lpBytesReturned);

 

  #define IOCTL_HAL_BOARD_STATE_READ      CTL_CODE(FILE_DEVICE_HAL, 4024, METHOD_BUFFERED, FILE_ANY_ACCESS)

 

  #define EM9280_BOARD_TYPE_9280          0

  #define EM9280_BOARD_TYPE_9281          1   // -> EM9281

  #define EM9280_BOARD_TYPE_9380          2

  #define EM9280_BOARD_TYPE_9283          3

  #define EM9280_BOARD_TYPE_ES9281        4   // -> ES9281

  #define EM9280_BOARD_TYPE_9287          7

  

  #define EM9280_BOARD_CFG_SHIFT          14                     

  #define EM9280_BOARD_CFG_MASK           0x3                    

 

  #define EM9280_BOARD_TYPE_SHIFT         4

  #define EM9280_BOARD_TYPE_MASK          0x7                    

 

  #define EM928X_BOARD_TYPE_BASE(v)       ((v >> EM9280_BOARD_TYPE_SHIFT) & EM9280_BOARD_TYPE_MASK)

  #define EM928X_BOARD_TYPE_SUB_ID(v)     ((v >> EM9280_BOARD_CFG_SHIFT) & EM9280_BOARD_CFG_MASK)

  #define EM9287_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)

  #define EM928X_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);

  IfEM928X_BOARD_TYPE_ALL(dwBoardInfo)!= EM9280_BOARD_TYPE_9281) return;


獲得MAC地址


  必要的頭文件和lib庫

  #include "Iphlpapi.h"

  #pragma comment(lib,"Iphlpapi.lib")

 

  VOID GetMAC(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并對比 à 判斷驗證是否成功并進行后續執行


加密方法


  常用的加密方法有很多,可以參考文章《常用加密方法及代碼》。同時英創提供這些加密算法相關測試例程,如有需要,可以聯系英創工程師獲得。

主站蜘蛛池模板: 欧美高清在线精品一区二区不卡| 国产精品jizz视频| 精品不卡| 亚洲精品一区二区手机在线| 亚洲成在人线av| 欧美一级片在线视频| a级情欲视频免费观看| 亚洲欧美色欧另类欧| www.好色.com| 久久精品片| 日韩视频在线观看免费| 成人午夜性a一级毛片美女| 欧美艳星性videose精品| 图片区亚洲| 日本免费黄网站| 亚洲精品一区二区三区四区 | 美女被网站免费看九色视频| 大尺度做爰视频吃奶www| 我要看一级黄色录像| 国外一级毛片| 国产成人精品天堂| 国产精品美女自拍| 美国黄色网址| 高h喷水荡肉爽文np欲| 久久成人国产精品二三区| 一区二区三区欧美视频| 一区二区免费| 一级片视频在线| 久久精品国产一区二区| 日本黄色美女视频| 日韩精品久久不卡中文字幕| 欧美一级黄色片在线观看| 国产精品爱久久久久久久小 | 国产一极毛片| 国产在线精彩视频| 国产免费一级在线观看| 国产欧美日韩综合一区二区三区| 国产精品女同一区二区久久夜| 性夜黄 a 爽免费看| 国产精品青草久久久久福利99| 看全色黄大色黄女片爽老外|