微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证 – 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%的努力是创造值得破解的东西.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐