首页 新闻 会员 周边 捐助

dll 如何 加密

0
悬赏园豆:5 [已解决问题] 解决于 2017-07-27 17:21

 推荐工具 或者方法,客户端 使用,。。。。。。。

元点之始的主页 元点之始 | 初学一级 | 园豆:6
提问于:2017-07-24 20:32
< >
分享
最佳答案
0

无不破之文件;安全的方式(如果是il语言的)就是把dll类的东西混淆,增加无用跳转逻辑,多增加dic...总而言之跟写代码的要求相反——越乱越好。楼上的Assembly方法跟加壳是一个道理,脱壳也是比比皆是。

如果你使用加密 —— 那么找到解密也比较容易,因为通常只需要定位byte[]或者string就可以锁定密码,因此你用加密或者加密狗之类的都是能找到的。

所以安全的方式就是大量让人看不懂的逻辑,让逆向工程周期更长。—— 无论il或者非il都是这样。

最后再补充一下,文件多分散,到处放一些(这些也可以通过监视可以得到),弄一些类似的名字,既通过环境加载(自加载,比如同目录下,系统目录,环境变量设置其他目录等等),也可以通过动态加载...

总结:目标就是——乱。

收获园豆:5
花飘水流兮 | 专家六级 |园豆:13617 | 2017-07-25 11:25
其他回答(2)
0

加密没有破不了的
将类似注册码的东西放在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);
    }
}

转自:http://bbs.csdn.net/topics/390666257

金琥 | 园豆:2605 (老鸟四级) | 2017-07-25 08:31
0

dotNET_Reactor

ycyzharry | 园豆:25683 (高人七级) | 2017-07-25 12:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册