2

这是情况。我有 DLL A 和 BAdll 参考并使用 B.dll 中的代码。B.dLL 没有做它应该做的事情,所以我试图向它添加一些调试语句。

我使用 ilSpy 反编译 B.dll 并添加我想要的代码,编译一个新的 B.dll,删除旧的并放入我的新的。

现在 A.DLL 失败并出现此错误。

System.IO.FileLoadException: Could not load file or assembly 'B, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b089z623fagfd396' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'B, Version=7.0.0.0, Culture=neutral, PublicKeyToken=b089z623fagfd393'

由于我没有源代码或私钥,我认为我不可能让我的 DLL 的公钥与旧的匹配。由于该键不匹配,因此引用失败。这是设计使然吗?是专门为阻止我做我想做的事而建造的结构吗?本质上,我想我正在破解一个我没有源代码的应用程序。

无论如何我可以做到这一点吗?

我想我也可以反编译和重建 A.dll,但实际上有大约 200 个 DLL 都相互引用。

4

1 回答 1

1

是专门为阻止我做我想做的事而建造的结构吗?

是的,强命名程序集(给它一个公钥令牌)的原因之一是防止您尝试执行的确切过程。

至于必须重新编译 100 个 DLL 的替代方法,可以使用该sn工具禁用对该密钥的验证,因此理论上您需要做的就是

sn –Vr *,b089z623fagfd393

如果它试图加载没有密钥的 DLL,所有正在寻找使用密钥签名的 DLL 的所有程序集都b089z623fagfd393将不再出错。

完成测试后,您可以

sn –Vu *,b089z623fagfd393

为该单个键重新启用它或

sn -Vx

为所有先前设置的豁免重新启用它。

于 2015-03-23T21:30:35.077 回答