概述
多努力就会有多特殊(neverforever)——仌
关于利用python读取电脑识别码的文章请关注我另一篇文章:
https://blog.csdn.net/weixin_44204327/article/details/85162826
目标
用C语言,读取电脑机器码,通过授权码,只允许软件运行在唯一电脑上,实现“一机一码”。
注:程序识别的机器码包括:
- CPU序列号(ID)
- 本地连接 无线局域网 以太网的MAC
- 硬盘序列号(唯一)
- 主板序列号(唯一)
实现方法
软件安装后,运行软件时,通过电脑机器码的唯一性实现授权码的唯一性。
流程图
C代码函数功能简介
C程序代码
/*******************************
函数:
1.mac:162387C5B7F7(以太、本地、局域)16:23:87:C5:B7:F7#34:23:87:C5:B7:F7#E0:DB:55:B5:9C:16
2.harddisk硬盘序列号:3W0PKVLE
3.harddisk和 mac合并为machine_code:3W0PKVLE16:23:87:C5:B7:F7
4.machine_code去冒号:machine_code:3W0PKVLE162387C5B7F7
5.获取machine_code奇数位:oddnumber:30KL328CBF
6.奇数位加密: Key:996837194
7.注册程序
8.登录程序
主函数:main()
********************************/
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <winsock2.h>
#include <Iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "Iphlpapi.lib")
#include <locale.h>
#include <tchar.h>
#include <windows.h>
// 1.1 MAC函数(以太网、本地、局域)
void byte2Hex(unsigned char bData, unsigned char hex[])
{
int high = bData / 16, low = bData % 16;
hex[0] = (high <10) ? ('0' + high) : ('A' + high - 10);
hex[1] = (low <10) ? ('0' + low) : ('A' + low - 10);
}
// 1.2 获取本机MAC地址
int getLocalMac(unsigned char *mac)
{
ULONG ulSize = 0;
PIP_ADAPTER_INFO pInfo = NULL;
int temp = 0;
temp = GetAdaptersInfo(pInfo, &ulSize);//第一次调用,获取缓冲区大小
pInfo = (PIP_ADAPTER_INFO)malloc(ulSize);
temp = GetAdaptersInfo(pInfo, &ulSize);
int iCount = 0;
while (pInfo)//遍历每一张网卡
{
// pInfo->Address 是MAC地址
for (int i = 0; i<(int)pInfo->AddressLength; i++)
{
byte2Hex(pInfo->Address[i], &mac[iCount]);
iCount += 2;
if (i<(int)pInfo->AddressLength - 1)
{
mac[iCount++] = ':';
}
else
{
mac[iCount++] = '#';
}
}
pInfo = pInfo->Next;
}
if (iCount >0)
{
mac[--iCount] = '