代码之家  ›  专栏  ›  技术社区  ›  Storm

如何使用VS 2010或VS 2013分析已签名的程序集

  •  27
  • Storm  · 技术社区  · 14 年前

    当我尝试在VS 2010中对其运行性能分析工具时,它会给我以下警告:

    AjaxControlToolkit.dll已签名并检测它将使其签名无效。如果您在没有仪器后事件的情况下继续对二进制文件重新签名,则可能无法正确加载。

    现在,如果选择继续而不重新签名的选项,则分析将启动,但程序集不会加载并给出ASP.NET例外。

    6 回复  |  直到 9 年前
        1
  •  21
  •   Chris Schmich    14 年前

    如果在开发机器上执行此操作,则可以使用 sn -Vr * . 如果你这么做,你不必辞职。这种方法可能存在安全风险,但是 如果你觉得舒服的话 ,这比辞职容易。

    MSDN

    注册程序集以跳过验证。(可选)可以指定以逗号分隔的用户名列表。如果指定infle,验证将保持启用状态,但infle中的公钥将用于验证操作。可以以*的形式指定程序集,用指定的强名称注册所有程序集。Strongname应指定为十六进制数字字符串,表示公钥的标记形式。请参阅-t和-t选项以显示公钥令牌。

    以及安全风险:

    注意:仅在开发过程中使用此选项。将程序集添加到跳过验证列表会创建安全漏洞。恶意程序集可以使用添加到跳过验证列表的程序集的完全指定的程序集名称(程序集名称、版本、区域性和公钥令牌)来伪造其标识。这将允许恶意程序集也跳过验证。

        2
  •  17
  •   Nathan Shively-Sanders    13 年前

    blog post giving the answer

    打电话最容易 sn.exe 直接:

    "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -R [pathOfDll] [pathOfSNK]
    

    请注意 [pathOfDll] 位于目录中 对象\调试 与项目相关。

        3
  •  7
  •   Nathan Shively-Sanders    13 年前

    答案是描述的 here

    我无法设法使其工作“因为是”与我的VS2010安装。我必须将此命令行作为每个dll上的生成后事件调用:

    "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"   & sn -Ra [pathOfDll] [pathOfSNK]
    

    请注意 [病态] 位于目录中 与项目相关。

        4
  •  5
  •   Community paulsm4    7 年前

    对于未重新签名的已签名二进制文件,最简单的方法是完全禁用签名检查。这是一个计算机范围的设置,您可以通过注册 * 图案:

    sn.exe -Vr *
    

    sn.exe 在SDK中(在我的例子中,我在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin ).

    完成测试后,应注销异常:

    sn.exe -Vu *
    

    否则,您的计算机可能容易受到恶意代码的攻击,因为即使程序集被篡改,它们也会受到信任。

    另请参见 Access denied running sn.exe on Windows 7 .

        5
  •  1
  •   Dror Helper    14 年前

    探查器可能会更改程序集,因为它以前已签名。 显然,您需要添加一个post instrument操作来重新签名程序集。

    这可能是一个问题,因为您没有用于对第三方程序集进行签名的sn文件。

        6
  •  0
  •   Joshua Evensen    10 年前

    也许可以在这里自由地学习新事物,但我最终通过编写一个powershell脚本来取消对解决方案中所有项目的签名来解决这个问题——工作得很好。作为脚本的一部分,我保存了原始的csproj文件,以便以后可以还原它们。(也可以撤消源代码管理中的更改)。

    http://pastebin.com/UbABvz7d

    应该能够通过调用-revert开关来还原。