|
| |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
一般软件的注册机制可以通过获取硬件序列号,然后用非对称加密算法生成相应的公钥和私钥。但是用Managed Code写获取硬盘序列号的代码不能解决所有的问题,比如不能在非治理员的权限下使用,前几天Sunmast在他的Blog上发布了《如何得到硬盘序列号?.NET版本[C#]》,就是没有解决这个问题,用WMI也有很多问题。 要想顺利获取硬盘的序列号,目前只能依赖非托管代码了。DiskId32是一个源码公开的C++程序,可以解决上述问题。由于代码比较底层,我对VC和DDK不认识,没有能力将其封装为DLL,希望各位帮忙! 还有,就算封装好了这个Native DLL并可以使用了,但还有问题没有解决。假如封装到了Native DLL,该DLL很轻易被人替换成另外一个,究竟在Managed Code里面可以看到调用Native DLL的函数声明,别人只要模拟这些函数界面重新写一个新的就很轻易达到破解目的了。不过详细我没有测试过,不知道行不行。 于是我又想到了另外一个方式,就是把获取硬盘序列号的Native DLL作为资源文件封装到Managed Code中,然后在每次要调要该DLL时,先把该DLL写入磁盘,再动态绑定。由于Managed Code可以通过混淆器来保护,以致不能对其进行修改,这个我在《如何保护我们的 .NET 程序集?》中已经给出了答案。动态绑定Native DLL又是另外一个技术难题,我已经找到了一些资料,与大家分享。 Late binding on native DLLs with C# Late-Binding DLLs in C# Using legacy plug-ins with .NET - Part 1 Using legacy plug-ins with .NET - Part 2 C-Function pointer for .NET Dynamic PInvoke method calls 不过最牛的就是下面这一招了!直接把Native Code用字节数组保存在Managed Code中,然后调用,真是牛B,不过我还没有完全弄懂,希望大家来实践实践。 Execute Native Code From .NET 另外还有一篇文章是关于加密字符串的,值得研究! Poly-Engine Crypt String 希望各位多多交流.NET程序的保护问题,找出最好的解决方案! 返回类别: 教程 上一教程: .NET 的对象关系持久化机制(1) 下一教程: 使用.NET生成Excel文件 您可以阅读与"在.NET下获取硬盘序列号的问题"相关的教程: · 解决.NET(WebApplication)安装部署的不能选择安装路径的问题 · VS.NET Beta2安装后添加/删除程序不能正常启动的问题的解决方案 · .NET的自动序列号工具 · 用.net 2003开发Windows CE应用,解决与pocket pc通讯的问题 · VS.NET下水晶报表分发时的问题及解决2 |
| 快精灵印艺坊 版权所有 |
首页 |
||