C# 应用程序虚拟化是如何实现的?
我试图理解像andsandboxie()这样的软件是如何工作的。但就我个人而言,我想不出任何东西能让这一切成为可能。他们如何拦截API调用并欺骗目标软件?如果有人说这只是魔法和精灵之尘,我会相信他们。但是,严肃地说,有没有讨论解决这个问题的白皮书C# 应用程序虚拟化是如何实现的?,c#,.net,c++,virtualization,native,C#,.net,C++,Virtualization,Native,我试图理解像andsandboxie()这样的软件是如何工作的。但就我个人而言,我想不出任何东西能让这一切成为可能。他们如何拦截API调用并欺骗目标软件?如果有人说这只是魔法和精灵之尘,我会相信他们。但是,严肃地说,有没有讨论解决这个问题的白皮书 如果这在CLR级别上是可能的,那就好了,但如果必须的话,我愿意使用本机。Sandboxie通过向核心Windows API注入代码来实现这一点,就像病毒一样(这就是为什么Vista x64阻止这种行为,以及为什么Sandboxie在该操作系统上不起作用
如果这在CLR级别上是可能的,那就好了,但如果必须的话,我愿意使用本机。Sandboxie通过向核心Windows API注入代码来实现这一点,就像病毒一样(这就是为什么Vista x64阻止这种行为,以及为什么Sandboxie在该操作系统上不起作用)
是一个解释API挂钩的项目。我通过研究的源代码(用于SourceMod for CounterStrike:Source:)了解了所有这些是如何工作的。我不知道MS是如何做到的,但下面是一种方法的基本理论 您要做的是钩住系统调用(类似于链接到中断)
希望这能有所帮助。查看Wikipedia页面,该页面讨论了软件虚拟化(早期的VMWare、Wine、Sandboxie以及某种程度上的App-V)和更现代的硬件虚拟化(Hyper-V、VMWare等)
我假设您正在专门寻找软件虚拟化,因为通过使用.NET(或任何CLR),您已经在某种程度上脱离了CPU体系结构,尤其是“AnyCPU”目标。酷!我会调查的。假设64位版本的WindowsVista和Windows7中不允许API挂接,对吗?谢谢两个不同事物的同一术语;您可以在特定事件发生时调用代码的范围内“钩住”(“调试”或“运行时”钩住-仅适用于操作系统允许钩住的事件)。但是,您不能覆盖实现实际事件细节的DLL,这正是sandboxie所需要的。请看,您应该为开发人员查看应用程序虚拟化的SDK。