【问题标题】:Remove the strong name from 3rd party assemblies?从第 3 方程序集中删除强名称?
【发布时间】:2016-08-02 09:28:57
【问题描述】:

如何从我没有源代码的第 3 方程序集中删除强名称,可能使用 ilasm/ildasm(因为可以使用 add a strong name using ilasm/ildasm)?

一般来说,这似乎是可能的,因为this tool 似乎能够做到这一点。

【问题讨论】:

  • 回答你原来的问题,是的,这显然很容易。 根据定义,部署的代码是不安全且受到损害的。签名只是休闲破解者的一层保护(必须有其他保护)。
  • XY 问题,永远不需要删除强名称。
  • @HansPassant 我要求它组合一个演示,说明在 3rd 方应用程序中替换引用的程序集是多么容易(或困难)。只要它具有强名称并被其强名称引用,就无法做到这一点。
  • 嗯,当然。如果这很容易,那么拥有强名称就没有任何意义。你必须知道私钥,这证明你是文件的“所有者”并且它没有被篡改。你想篡改它。
  • 很容易。只需单击一下工具。它删除文件夹中所有程序集的强名称,并将程序集引用重定向到没有强名称的程序集引用。因此,强名称不是确保您加载的代码未被更改的有效方法。

标签: .net code-signing strongname


【解决方案1】:

只需使用工具为您完成,手动操作可能会花费您太多时间和地狱,如果有工具,那为什么要重新发明轮子?

我个人从未使用过 SNRemove,但这里列出了我通常使用的工具:


编辑:simple-assembly-explorer/SimpleAssemblyExplorer.Core/Assembler/Assembler.cs - 这个类应该让您了解如何从强命名程序集中删除强名称键

【讨论】:

  • 我想了解如何在没有外部工具的情况下完成此操作(.NET 自带的工具除外)。
  • 您将需要使用 .NET 程序集阅读器,可能还需要使用十六进制编辑器。 VS/.NET 附带没有可用于删除强名称的工具。手动删除它基本上是修复引用、清理程序集和修复使用签名类型的类型的属性/标志。
  • 确定不能使用 ilasm/ildasm(.NET 自带)?
  • 我很确定 ildasm 没有修改强名称验证的功能。您必须明白,在开发 .NET 时删除强名称从来不是 Microsoft 的要求,因此您找不到官方提供的工具为您执行此操作的工具集。在与ildasm.exe 相同的文件夹中有一个sn.exe(强名称),您可以查看它,但我怀疑它会帮助您进一步了解。
【解决方案2】:

这是为了删除强名称验证,而不是删除强名称签名,但是搜索强名称验证错误似乎会路由到这个问题,所以这并非无关紧要。

sn.exe 可用于禁用强名称验证(sn.exe 可通过 Visual Studio 开发人员命令提示符访问)

要对具有给定公钥令牌的所有程序集禁用强名称验证:

sn.exe -Vr *,<public key hex token>

或禁用对具有任何公钥的所有程序集的验证:

sn.exe -Vr *,*

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2015-11-06
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多