小编flu*_*es1的帖子

AppDomain.CreateInstanceFromAndUnwrap - 无法转换透明代理

我正在编写一个.NET库,将托管DLL注入外部进程.我目前的做法是:

  1. 使用CreateRemoteThread强制目标进程调用LoadLibrary的非托管引导DLL.从这一点开始,我们在目标进程中执行代码.
  2. 然后我的bootstrap DLL创建一个CLR实例并对其进行调用ExecuteInDefaultAppDomain,该实例在托管助手DLL中执行一个方法.
  3. 此方法创建一个新的AppDomain并调用AppDomain.CreateInstanceFromAndUnwrap将执行传递到我的有效负载DLL,将结果转换为IInjectionPayload.
  4. 我的想法是我的有效负载DLL公开了一个实现的类IInjectionPayload,因此助手DLL可以简单地调用payload.Run().

我这样做是为了通过简单地调用AppDomain.Unload(在发信号通知清理之后)可以完全卸载有效载荷代码.

这种方法有效 - 我的有效负载DLL中的类正在目标进程中实例化,因此可以执行代码- 但我不能将返回的对象强制CreateInstanceFromAndUnwrap转换为IInjectionPayload; 它抛出以下异常:

无法转换透明代理以键入'blah.Blah.IInjectionPayload'.

我已尝试使用CreateInstanceAndUnwrap,Activator.CreateInstanceFrom然后使用Object.Unwrap,但这两种方法也会导致抛出相同的异常.

我的有效载荷类的签名是:

public class Program : MarshalByRefObject, IInjectionPayload

我很难过,因为有效负载DLL肯定会被加载,并且正在按照预期实例化类.任何帮助将非常感激.

c# appdomain code-injection

20
推荐指数
1
解决办法
1万
查看次数

计算绘制线之间的相似度

我需要一种算法来计算两条绘制线之间的相似程度。这些线是使用鼠标绘制的,并在使用单独的算法进行过滤和平滑之前存储为一组笛卡尔坐标。

例如,在下图中: 图表

A 线和 B 线明显相似,但 B 和 C 线不相似。算法应该反映这一点。此外,由起点和终点指示的线的“方向”也很重要。这样的算法是否已经存在?

algorithm filtering graph similarity line

5
推荐指数
1
解决办法
4284
查看次数

如何在套接字之间正确中继TCP流量?

我正在尝试编写一些Python代码,它将在两个TCP套接字之间建立一个不可见的中继.我目前的技术是设置两个线程,每个线程读取并随后在特定方向上一次写入1kb数据(即A到B的1个线程,B到A的1个线程).

这适用于某些应用程序和协议,但它并非万无一失 - 有时特定应用程序在运行此基于Python的中继时的行为会有所不同.有些甚至崩溃.

我认为这是因为当我完成对套接字A的读取时,在那里运行的程序认为它的数据已经到达B,而实际上我 - 中间的狡猾的人 - 尚未将它发送给B.在B未准备好接收数据的情况下(暂时send()阻塞了一段时间),我们现在处于A认为已成功向B发送数据的状态,但我仍然保持数据,等待send()呼叫执行.我认为这是我在某些应用程序中发现的行为差异的原因,同时使用我当前的中继代码.我错过了什么,或听起来是否正确?

如果是这样,我真正的问题是:有没有解决这个问题的方法?当我们知道B准备好接收数据时,是否可以只读取套接字A?或者是否有另一种技术可用于在[已经打开和建立的] TCP套接字之间建立真正"隐形"的双向中继?

python sockets tcp portforwarding

4
推荐指数
1
解决办法
3282
查看次数