黑客学徒日记-DInvoke

Platform invoke

托管代码:managed code

托管代码(Managed Code)是在程序运行过程中,由公共语言运行时(Common Language Runtime, CLR)运行的代码。CLR 可以提供诸如垃圾回收、异常处理、类型安全、数组边界等等的检查从而保证代码的安全,所以程序是在受控的环境下运行。 CLR 同时负责提取托管代码,编译成机器代码并执行的功能。典型的托管代码有 C# 、 Visual Basic。

相对的,非托管代码(Unmanaged Code)是直接交由操作系统运行的代码。所有不是托管代码的都是非托管代码。没有 CLR 提供的服务,所以内存回收等事情就需要由程序员来控制。典型的非托管代码有 C 和 C++ 。

我们来深入了解一下什么是托管代码和非托管代码:

在微软官方有这句话,翻译过来是从非托管代码调用托管代码

为了方便理解,我们将托管代码,翻译为自己写的代码,简称我的代码

将非托管代码,翻译为其他程序员写的代码,简称隔壁老王代码

下文不会再使用托管代码以及非托管代码作为翻译,而是使用我创造的词。

那么以下的内容就很好理解,就是从库中调用函数的意思。从库中调用函数这个过程是我的代码,而函数封装这些是隔壁老王代码完成的。

image-20220520003243481

Dynamic invoke

模拟隐蔽操作 - 动态调用(避免 PInvoke 和 API 挂钩)

DInvoke,这是 SharpSploit 中的一个新 API,可作为 PInvoke 的动态替代品。 使用它,我们展示了如何从内存或磁盘动态调用非托管代码,同时避免 API Hooking 和可疑导入。

wover和b33f 开发了SharpSploit的API,让你可以使用C sharp调用隔壁老王代码,以此避免可疑的P/Invoke。

不使用P/Invoke去导入API,你可以使用Dynamic invoke,也就是Dinvoke去加载DLL、调用函数。

你可以调用任何隔壁老王代码,来绕过API hooking和执行后渗透的payloads。这样可以规避基于API调用的检测。

总而言之,DInvoke 旨在成为 PInvoke 的直接替代品,它为攻击性工具开发人员在访问和隔壁老王代码的方式上提供了极大的灵活性。

DInvoke 是一个框架,用于在不使用 Pinvoke 的情况下用我的代码动态调用隔壁老王代码。 我们希望它将为您提供必要的灵活性,不仅可以选择您的工具做什么,还可以选择它们如何做。

是否可以使用它来避免检测取决于您。 接下来,深入探索如何利用 SharpSploit 从内存中执行 PE 模块,用于后期利用或钩子规避。

这篇博文是三部分系列中的第一篇,详细介绍了我们添加到 SharpSploit 的功能。 我们还在 Blue Hat IL 2020 上介绍了这些主题。

蓝帽视频:(https://youtu.be/FuxpMXTgV9s)

演示幻灯片和材料:(https://github.com/FuzzySecurity/BlueHatIL-2020)

重要的是要注意,这篇文章或系列中的任何内容都不能代表一种新的基本技术。 我们实施的每项技术要么被观察到被真实的威胁行为者在野外使用,被攻击性安全研究人员公开讨论过,要么是已经公开的技术的变体。 这里没有漏洞利用。 只是滥用功能和可靠的操作技巧。

前景提要:为什么不使用P/invoke

.net 提供了一种P/invoke(基于平台调用)的方式,允许.net应用去访问DLL动态链接库的数据和API。

在之前我所讲过的源码免杀前七课 都是使用P/invoke进行API、DLL调用

然而使用P/invoke的缺点有两个:1)通过 P/Invoke 对 Windows API 调用的任何引用都将在 .NET 程序集的导入表中产生相应的条目。加载 .NET 程序集时,其导入地址表将使用您正在调用的函数的地址进行更新。这被称为“静态”引用,因为应用程序在调用它之前不需要主动定位函数。相反,“动态”引用是指应用程序被设计为手动查找函数的地址。例如,如果您使用 P/Invoke 调用 kernel32!CreateRemoteThread,那么您的可执行文件的 IAT 将包含对该函数的静态引用,告诉所有人它想要执行将代码注入不同进程的可疑行为。恶意软件分析师和自动化安全工具通常会检查可执行文件的 IAT 以了解其行为。如果你的可执行文件最终会被防御者分析(假设它会是更安全的假设),那么让你的 API 调用在 IAT 中被引用,对防御者来说是一个利好消息。

2)如果目标机器上正在监控API调用,那么任何通过P/invoke进行的调用都可能会被产品检测到。它还可能会阻止API调用(顺便说一句,以前测试过norton就会监控API调用)

作为一名红队人员和安全工具开发者,我们必须准备在遇到主动防御系统如何规避。 这就是我们创建 D/Invoke 的原因。

总结

这篇文章挺有价值的,等我准备bypass norton或者进一步提高自动化免杀工具的免杀效果的时候,再回来看这篇文章 https://thewover.github.io/Dynamic-Invoke/

这个大佬thewover也可以follow一下

参考资料