我想用自己的代码替换3d party API中的一行代码。
我的意思是这是一个值得怀疑的做法,但我需要修复他们的错误。
答案 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相比有一些好处:
答案 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作为项目文件打开(如果它有足够的调试信息),它就像一个代码项目,然后你可以修改和构建。
所有这些工具都可以在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注入方法。