日期:2014-05-17  浏览次数:21741 次

如何给DLL进行加密?
C#程序里面会调用一个DLL,有什么方法可以把这个DLL加密一下,就是想实现让这个DLL在当前电脑上第一次被调用的时候需要根据电脑硬件信息进行解密才可以使用。 

------解决方案--------------------
调用DLL时判断可以访问的电脑硬件信息,不过c#程序做好加密吧。
------解决方案--------------------
买个加密狗,用他们的外壳加密工具。
成本就10多块钱。
------解决方案--------------------
加密没有破不了的
将类似注册码的东西放在dll资源中  每次使用dll的方法之前  先判断注册码跟机器信息是否匹配(自己选择一套算法)  如果不匹配 需要重新获得注册码  这个dll也要加壳

或者 可以将dll嵌入主程序中  作为一种资源  也就是说 exe目录下见不到单独的dll文件
这个缺点很明显  不能更新单独的dll  要更新 除非一整个程序完整更新
开发时,不要将引用到的dll copy到输出目录中 而是将dll文件作为资源嵌入到exe中 dll文件的Build Action 设置为Embedded Resource;
程序一启动就加载资源中的dll:

static class Program
{
    [STAThread]
    static void Main()
    {
        string resource1 = "MyApplication1.mydll1.dll"; //dll文件在项目中的路径
        string resource2 = "MyApplication1.mydll2.dll"; //dll文件在项目中的路径
        EmbeddedAssembly.Load(resource1, "mydll1.dll");
        EmbeddedAssembly.Load(resource2, "mydll2.dll");
 
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
 
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
 
    static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        return EmbeddedAssembly.Get(args.Name);
    }
}

------解决方案--------------------
想法很好....