尝试修改另一个DLL引用的DLL(反编译/重新编译)。

时间:2015-03-23 21:04:13

标签: c# fusion

情况如下。我有DLL A和B. A.dll引用并使用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都互相引用。

1 个答案:

答案 0 :(得分:1)

  

结构是否专门用于阻止我做我正在做的事情。

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

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

sn –Vr *,b089z623fagfd393

如果尝试加载没有密钥的DLL,那么正在查找使用密钥b089z623fagfd393签名的任何DLL的所有集合都不会再出错。

完成测试后,您可以

sn –Vu *,b089z623fagfd393

为该单个键或

重新启用它
sn -Vx

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