相关疑难解决方法(0)

在C#中为大文件创建校验和的最快方法是什么?

我必须在一些机器上同步大文件.这些文件最大可达6GB.同步将每隔几周手动完成.我不能考虑文件名,因为它们可以随时更改.

我的计划是在目标PC和源PC上创建校验和,然后将所有尚未在目标中的校验和文件复制到目标.我的第一次尝试是这样的:

using System.IO;
using System.Security.Cryptography;

private static string GetChecksum(string file)
{
    using (FileStream stream = File.OpenRead(file))
    {
        SHA256Managed sha = new SHA256Managed();
        byte[] checksum = sha.ComputeHash(stream);
        return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是运行时:
- 使用带有1,6 GB文件的SHA256 - > 20分钟
- 使用带有1.6 GB文件的MD5 - > 6.15分钟

是否有更好 - 更快 - 获得校验和的方法(可能具有更好的散列函数)?

.net c# checksum large-files

125
推荐指数
6
解决办法
9万
查看次数

什么是dll劫持?

简单的问题:什么是dll劫持?

我读了很多关于哪些应用程序易受攻击的内容,但没有深入了解原因.

答案赞赏.

windows dll

40
推荐指数
2
解决办法
2万
查看次数

如何防止DLL注入

所以前几天,我看到了这个:

http://www.edgeofnowhere.cc/viewtopic.php?p=2483118

它涉及三种不同的DLL注入方法.我如何防止这些过程?或者至少,我该如何预防第一个?

我想也许Ring 0的驾驶员可能是阻止这三个人的唯一方法,但我想看看社区的想法.

windows security code-injection

32
推荐指数
4
解决办法
3万
查看次数

如何在.NET中验证DLL的数字签名

我编写了一个C#.NET应用程序,它使用流行的非托管DLL文件来实现其部分功能.使用System.Runtime.InteropServices中的标准DllImport导入DLL.

但是,遗憾的是,我的应用程序(以及大多数使用DllImport的.NET应用程序)容易受到DLL劫持攻击.即攻击者可以将导入的DLL的恶意副本放在与我的应用程序打开的任何文件相同的目录中.这可以使攻击者完全控制用户的计算机.

为了缓解此漏洞,我想在导入之前验证DLL文件是否已正确签名(使用默认的Authenticode).我知道签名可以使用像sigcheck.exe这样的工具进行验证,但这对我来说不是一个可行的解决方案,因为我需要在我的C#代码中完成.

所以我的问题很简单:在加载DLL之前,如何从我的托管C#代码中验证DLL是否具有有效的Authenticode签名?

限制:

  • 导入的DLL不是由我开发的,而是来自外部公司.
  • DLL不随我的应用程序一起分发,预计在运行我的应用程序之前已经安装了.
  • 导入的DLL存在于许多不同的版本中(甚至会有更多版本),因此我无法在导入之前简单地 验证DLL的MD5校验和.

失败的方法:

  • 微软有一个关于防止"DLL预加载攻击"的好文章,但是,这个信息不适用于.NET的DllImport.
  • 我见过一些人建议使用Wintrust.dll中的非托管函数WinVerifyTrust.这当然是一个愚蠢的解决方案,因为这会使我的应用程序容易受到Wintrust.dll的DLL注入.

.net c# security dll dllimport

8
推荐指数
1
解决办法
6075
查看次数

标签 统计

.net ×2

c# ×2

dll ×2

security ×2

windows ×2

checksum ×1

code-injection ×1

dllimport ×1

large-files ×1