保护独特产品与硬件参数的链接

在软件开发中,保护产品的独特性是一个重要议题。开发者可能希望将自制代码与独特的硬件参数链接起来,以确保软件的独特性和安全性。一种有效的方法是读取硬盘驱动器的序列号和型号数据,以及可选的网络MAC地址。本文将介绍如何使用C++/CLI创建存储过程,以实现从存储过程访问原生C++代码的目的。

创建C++/CLI存储过程

为了创建C++/CLI存储过程,开发者需要遵循以下步骤:

  1. 添加新项目 -> Visual C++ -> CLR -> 类库。
  2. 编写最短的工作代码,类似于以下示例:
public ref class StoredProcedures { [SqlFunction(DataAccess = DataAccessKind::Read)] static SqlString MyFunction(SqlString buffer) { return buffer; } [SqlProcedure] static void GetHelloWorld() { SqlPipe^ spPipe = Microsoft::SqlServer::Server::SqlContext::Pipe; spPipe->Send(L"Hello World"); } }

当前不需要制作x86版本,示例仅支持x64 WinNT平台。在编译实际的程序集之前,请确保项目属性中设置了以下选项:

  • 公共语言运行时支持:纯MSIL公共语言运行时支持 (/clr:pure);
  • C/C++ -> 预处理器定义 -> Win64;
  • 链接器 -> 目标机器 -> /MACHINE:X64;

微软不提供设置.NET平台版本的选项。发现的唯一方法是:将项目文件作为XML文档打开,并更改为想要支持的平台。如果使用原生C++代码,则2.0版本就足够了,并且需要安装VS2008。(但可以使用任何工具集(这将在最终程序集中添加更多无用的Microsoft代码)。

<TargetFrameworkVersion> v2.0 </TargetFrameworkVersion>

从这一刻起,一切都准备好构建一个与MSSQL Server一起运行的程序集。选择配置为Release,平台为x64,构建项目。

注册程序集

在注册程序集之前,必须确保MSSQL服务器准备好使用UNSAFE程序集:

SQL CREATE DATABASE myTestDb GO USE master GO EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'clr enabled', 1 RECONFIGURE GO USE myTestDb GO ALTER DATABASE myTestDb SET TRUSTWORTHY ON GO

现在可以注册程序集:

SQL CREATE ASSEMBLY CLIESP from 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\ClrDiskId.dll' WITH PERMISSION_SET = UNSAFE;

注册所需的存储过程作为clr存储过程:

SQL CREATE PROCEDURE dbo.GetHelloWorld WITH EXECUTE AS CALLER AS EXTERNAL NAME CLIESP.StoredProcedures.GetHelloWorld; GO

最后运行:

SQL EXEC dbo.GetHelloWorld

现在已经知道如何使用C++/CLI存储过程,可以添加C++代码,并直接从存储过程中调用它。

让从显示计算机上的当前硬盘开始。使用了从WinSim读取硬盘制造信息的代码。这段代码对来说看起来不安全,所以添加了单元测试,并使代码更安全,以用于MSSQL Server这样的关键任务应用程序 - 没有人希望服务器崩溃。

附加的解决方案包含3个项目:

  • EspDiskId - 扩展存储过程xp_DiskId显示硬盘列表(MS推荐停止使用);
  • ClrDiskId - CLR存储过程GetDiskID显示硬盘列表;
  • mainDiskIdTest - 几个单元测试,以确保原始C++代码更安全。

执行后:

SQL EXEC dbo.GetDiskID
Id Model Serial Vendor Size [Gb] UUID
0 HDS723020BLA642 MN1220F32AJ4PD Hitachi 1863 -5791026690894825696
1 WD3000HLHX-01JJPV0 WD-WXW1E31HHMV5 WD 279 4862279922329562629
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485