如何注入.NET代码来更改函数的返回值
我目前正在研究如何编写可以注入另一个.NET进程并重写函数返回值的.NET代码。我的想法是,我的代码会改变方法调用的返回值,如下所示:如何注入.NET代码来更改函数的返回值,.net,code-injection,.net,Code Injection,我目前正在研究如何编写可以注入另一个.NET进程并重写函数返回值的.NET代码。我的想法是,我的代码会改变方法调用的返回值,如下所示: Public Function DoSomething() As String Return "Value" End Function 我的代码将拦截对DoSomething的调用,并返回我自己的自定义字符串,而不是值 我猜我需要使用.NET评测API来做这类事情。是否有人有使用评测API的经验,如果有,您认为这种代码注入是可能的 我不打算用它来做任何恶意
Public Function DoSomething() As String
Return "Value"
End Function
我的代码将拦截对DoSomething的调用,并返回我自己的自定义字符串,而不是值
我猜我需要使用.NET评测API来做这类事情。是否有人有使用评测API的经验,如果有,您认为这种代码注入是可能的
我不打算用它来做任何恶意的事情,我只是想在.NET中尝试一些非常低级的东西,看看是否可以做到
干杯。
Jas。您可以使用
我没有TypeMock,但基于,我想你可以这样做:首先是C,然后我将尝试翻译成VB
using (RecordExpectations recorder = RecorderManager.StartRecording())
{
DoSomething();
recorder.Return("My Own Custom String");
}
Using recorder As RecordExpectations = RecorderManager.StartRecording()
DoSomething
recorder.Return("My Own Custom String")
End Using
看起来TypeMock对于开源项目是免费的,否则就要花钱了。但是他们已经为你做了剖析API编码,所以你可以担心解决你的问题,而不是写毛茸茸的C++。我从未见过Detours.NET,但也许他们正在做的事情会给你一个如何实现你要做的事情的提示。你可能会调查消息接收器。。。 这是一个高级领域,但基本上,它正是您想要做的,拦截一个函数对另一个函数的调用,在拦截过程中,执行您自己的代码。。。消息接收器可以链接在一起,并且可以作为发送消息接收器写入,以便在发起呼叫时进行处理,或者作为接收接收器写入,以便在另一端进行处理
这里有一个PostSharp可以做到这一点,但不是在运行时,它会在最初编写代码后修改代码。Typemock Isolator附带的项目可以为您提供这种功能。 该项目是一个开源项目,但它使用Typemock隔离器。 它将允许您注册回调方法并在运行时更改其行为。 它不限于使用单元测试运行。
需要注意的一点是,一旦你使用它,你的性能就会受到影响 在现实世界中,为什么要这样做?是在运行时还是在运行之前?这需要在运行时完成。这有点悲哀,但我不打算在现实世界中使用它,我只是想挑战一下。我使用TypeMock进行单元测试,我认为通过注入我自己的代码来改变.NET代码的运行时方式可能是一个很酷的项目。我的想法可能是正确的:谢谢你的回复。我确实拥有TypeMock的许可证,并将其用于单元测试,但我的项目是一个实际的.NET应用程序。我想做的是编写我自己的.NET应用程序,它可以模拟TypeMock,将我自己的代码注入另一个程序集中,并动态更改它的函数返回值。