我可以将几行代码注入别人的.NET dll吗?

时间:2010-06-23 19:47:06

标签: .net reflection .net-assembly

我想用自己的代码替换3d party API中的一行代码。

我的意思是这是一个值得怀疑的做法,但我需要修复他们的错误。

9 个答案:

答案 0 :(得分:6)

不容忍反汇编第三方或商业软件的代码,但有一种方法可以解决。

如果您将Reflector与Reflexil插件一起使用,则可以删除强名称签名,并在程序集中注入/更改代码。

答案 1 :(得分:5)

您可以,但您将使用MSIL,而不是使用C#。

http://ccimetadata.codeplex.com/ http://www.mono-project.com/Cecil

你也可以使用Reflector.NET来修饰dll,修复bug并将其重新编译回来。

答案 2 :(得分:3)

您是否曾考虑尝试使用AOP工具代理和拦截来电,例如Postsharp或LinFu?

说明:AoP框架(面向方面​​编程)允许您在后调用之前注入行为,并重新路由调用。更多信息here

这与改变MSIL相比有一些好处:

  • 修复程序将继续升级 第三方dll(给定API稳定)
  • 您应该在许可条款范围内
  • 您可以轻松删除代理 他们修复了有问题的方法

答案 3 :(得分:3)

是的,你可以。首先,DLL程序集只是CIL(通用中间语言)。原则上你可以自己直接修改它。

例如,您可以使用像Cecil这样的工具:

http://www.mono-project.com/Cecil

您也可以使用像Reflector这样的工具将其反编译为您最熟悉的语言。此时,您可以修改代码并重新编译到您自己的自定义程序集中。

http://www.red-gate.com/products/reflector/

塞西尔还有一个反编译器:

http://evain.net/blog/articles/2008/12/15/cecil-decompiler

MonoDevelop(Mono IDE)让你打开一个程序集作为项目。只需将DLL作为项目文件打开(如果它有足够的调试信息),它就像一个代码项目,然后你可以修改和构建。

http://monodevelop.com/

所有这些工具都可以在Microsoft .NET或Mono中使用。可以在Windows上安装MonoDevelop,而无需安装Mono。

当然,我说你可以。我不一定赞同你这样做。由于您对自己的情况了如指掌,因此您必须自己制定法律和道德方面的事情。

答案 4 :(得分:1)

如果它不允许您注入自己的代码并且您没有获得源代码,则您没有机会以合法的方式执行此操作。

程序集通常已签名,您无法更改它。此外,大多数软件受版权保护。

如果您是此供应商的重要客户,请询问代码。当然还有权修复这个错误。

答案 5 :(得分:0)

如果您有权访问源代码,为什么不进行更改并重新编译?

答案 6 :(得分:0)

为什么不自己重写错误的方法(在你自己的代码中)并使用它而不是外部库?

答案 7 :(得分:0)

如果这是一个小修改,你可能会通过ildasm然后ilasm绕过代码运气。

答案 8 :(得分:0)

考虑到这一点有点不同,是否有可能在涉及虚假组件之前在应用程序启动时使用DNS解析IP,然后在system32 \ drivers \ etc中的HOSTS文件中放入一个条目,这样你就可以了实际上并不需要再次访问DNS(你会这么做,但它应该是即时的)。

您也可以尝试通过程序集尝试执行此操作,而不是通过挂钩调用DNS解析程序来执行缓存的Windows DLL api注入方法。