最后更新于
最后更新于
amsi.dll
被加载到您的进程中,并具有任何应用程序与之交互所需的导出函数。由于它被加载到您控制的进程的内存空间中,您可以通过覆盖内存中的指令来更改其行为。使其无法检测任何内容。
因此,您的 AMSI 绕过的目标是覆盖内存中该 DLL 的指令,使检测无效。
这种新技术依赖于对.NET方法的API调用挂钩。事实证明,.NET方法需要在内存中编译为本机机器指令,最终看起来非常类似于本机方法。这些编译方法可以被挂钩以更改程序的控制流。
执行.NET方法的API调用挂钩的步骤如下:
确定要挂钩的目标方法
定义一个与目标具有相同函数原型的方法
使用反射查找方法
确保每个方法都已编译
找到内存中每个方法的位置
用指向我们恶意方法的指令覆盖目标方法
选项:CreationTime
,CreationTimeUtc
,LastAccessTime
,LastAccessTimeUtc
,LastWriteTime
,LastWriteTimeUtc
或者直接从 XML 解析: