验证 – Windows DLL是否由Microsoft签名?我能否发现他们是否被第三方篡改了?

我正在为我的软件实现锁定和复制保护系统.我已经关闭了每一个允许有人打破锁定的洞(嗯,这有点过于乐观,我知道!)但最后一件事就是这样:

我听说破解者可以像我使用的API一样改变像Kernel32.dll这样的Windows DLL,返回一个由破解者指定的值.我需要阻止这一点.

起初我以为我可以为我使用的每个DLL创建一个哈希值,并根据客户端DLL的计算哈希检查该哈希,以查看该文件是否已更改.这不起作用,因为对于不同版本的Windows有许多不同版本的DLL,并且Microsoft提供的每个修补程序和Service Pack都可以更改该文件.

然后我意识到我可以检查文件的签名,以确保它具有有效的Microsoft签名.现在有两个问题:

> Microsoft是否签署了Windows DLL?我怎样才能找到关于此签名的一些信息?
>是否提供了用于验证签名的公钥?如何使用此密钥验证文件

任何演练都非常感谢.我的应用程序是使用Visual Basic.NET编写的.

多谢你们.

解决方法

MS会签署一些系统二进制文件,具体取决于Windows和二进制文件的版本.例如,如果您在Windows XP上使用 check kernel32.dll:

C:\Windows\system32>sigcheck kernel32.dll
Sigcheck v1.5
copyright (C) 2004-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

C:\Windows\system32\kernel32.dll:

Verified: Signed
Signing date: 02:07 14/04/2008
Publisher: Microsoft Corporation
Description: Windows NT BASE API Client DLL
Product: Microsoft« Windows« Operating System
Version: 5.1.2600.3119
File version: 5.1.2600.3119 (xpsp_sp2_Grd.070416-1301)

您还可以使用sigcheck来查找特定文件夹中的所有未签名二进制文件内容,例如:

sigcheck -u -e c:\windows\system32

我相信你的第二个问题的答案是“不”,虽然MS确实使用root certificates进行某些验证.它不会在其Windows系统二进制文件中发布公钥,因为密钥对可以并且确实会发生变化.

但从根本上说,如果你不信任操作系统,那么无论如何你都是如此.

面对它,您的应用程序将被破解.我的建议是只花1%的努力来减缓破解过程,99%的努力是创造值得破解的东西.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...