要想顺利获取硬盘的序列号,目前只能依靠非托管代码了。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程序的保护问题,找出最好的解决方案!
文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




