检测用户是否修改了程序使用的dll

时间:2016-07-26 19:37:05

标签: c# dll

所以最近我注意到很多程序都破解了,因为我的小朋友/小开发者已经将.dll作为源代码公开的参考,然后人们重新编写了这个dll并添加了一个调试系统,所以程序所做的一切都得到了在跑步时打印到控制台。我想找到一种方法来检查用户是否修改了一个dll,并且与我在开头包含的dll完全相同。任何帮助表示赞赏。

private bool check()
        {
            bool flag = false;
            string dllname = "dllname";
            string str = "1a720eff0feeb58484180c0f01a774ba";
            AssemblyName name = (from assembly in Assembly.GetExecutingAssembly().GetReferencedAssemblies()
                                 where assembly.Name.ToLower().Equals(dllname.ToLower())
                                 select assembly).FirstOrDefault<AssemblyName>();
            if (name != null)
            {
                string location = Assembly.ReflectionOnlyLoad(name.FullName).Location;
                if (!(location != string.Empty))
                {
                    return flag;
                }
                if (!System.IO.File.Exists(location))
                {
                    return flag;
                }
                byte[] buffer = System.IO.File.ReadAllBytes(location);
                if (BitConverter.ToString(MD5.Create().ComputeHash(buffer)).Replace("-", "").ToUpper().Equals(str.ToUpper()))
                {
                    flag = true;
                }
            }
            return flag;
        }

2 个答案:

答案 0 :(得分:0)

使用密钥对程序集进行签名?强烈命名的程序集会在加载时自动检查(如果我理解你的话)。

Creating and Using Strong-Named Assemblies

答案 1 :(得分:0)

您可以使用强名称签署程序集: Strong-Named Assemblies