在这篇博文中,我将总结到目前为止找到的所有EDR旁路方法。列出的工具/技术可能并不详尽,但肯定有助于获得良好的概述,并在必要时更好地了解如何使用它们。...例如,如果我们要将特定的字节(例如shellcode)写入进程,则可以使用以下C#代码片段从文件kernel32.dll导入WriteProcessMemory: [DllImport("kernel32...如果您主要使用C#编码,那么实际上这是您进行Userland-Hooking绕过的最简单方法。我只是从TheWovers帖子中挑选一小部分,因为此博客文章会通过解释所有内容而爆炸。...NTDLL.dll unhooking in C++ or Nim 我们了解到,AV / EDR系统挂接NTDLL.dll的特定功能,以将其自己的代码放入其中进行分析。...ired.team上有一篇很好的简短文章,它解释了如何将NTDLL.dll的新副本从磁盘映射到内存,将.text部分从新副本复制到内存中已挂接文件的.text部分,因此 通过覆盖钩子撤消钩子: ?
在本文中,我将分享 20 个与列表和集合相关的 C# 提示,它们能够简化你的.NET 编码工作,并帮助你充分发挥 C# 列表的作用。...创建自定义对象的列表 提示:“在 C# 中如何创建自定义对象的列表?” 作用:使你能够管理复杂数据类型(如客户或产品对象)的集合。...作用:基于条件从列表中检索特定数据的过程变得更简单。...作用:使你的数据保持有序,这在用户界面中显示数据或处理列表时通常是必需的。...示例: customers.ForEach(c => c.IsActive = true); 将列表转换为逗号分隔的字符串 提示:“在 C# 中如何将字符串列表转换为逗号分隔的字符串?”
PsLookupThreadByThreadId 函数的作用是根据线程ID查找线程对象。在枚举线程时,可以使用该函数根据线程ID获取线程对象的指针,进而获取线程的相关信息。...当一个SYS文件被加载到内存中时,系统会创建一个LDR_DATA_TABLE_ENTRY结构并将其插入到内核模块列表的末尾。...遍历内核模块列表时,可以通过遍历LDR_DATA_TABLE_ENTRY结构中的DriverSection成员,找到所有已加载的SYS文件,并获得它们的基本信息。...结构、模块列表中的链表头、当前模块的LDR_DATA_TABLE_ENTRY结构和当前遍历到的链表节点。...最后调用RecoverPreMode函数将当前线程的Previous Mode恢复到之前的值,并释放进程对象。
本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助。 1. 开发过程 开发过程是错误和缺陷开始的地方。使用工具可以帮助你在发布之后,解决掉一些问题。...例如,从对象到字符串的转换。 转换指示编译器会生成关联表达式的值的代码,如果没有生成,则会抛出异常。例如,从double到integer的转换。 两种类型转换都是很危险的。...调用助手(p)传递p的副本,而不是p的引用,因此Helper()中执行的变化将丢失。相反,Helper会返回修改的p的副本。 意外的算术 C#编译器保护你出现常量的算术溢出,但不一定是计算值。...当重命名间接属性时要小心。例如,WPF中的数据绑定,会将属性名称指定为字符串。如果不小心更改该属性名称,你将会无意中创建了一个编译器无法防护的问题。 以上就是所有C#开发人员应该知道的13件事情。...了解了C#开发中应该知道的13件事情,有助于我们更好地使用C#进行开发,当然在开发时,也可以借助一些使用C#编写的开发工具。
在目标进程中创建一个远程线程,将获取到的导出函数地址作为线程的入口点,并将DLL路径等参数传递给导出函数。 远程线程在目标进程中运行,并调用导出函数。...生成拉起特定DLL的ShellCode片段 6.通过NtCreateThreadEx将ShellCode执行起来,并自动加载DLL 7.通过KeUnstackDetachProcess取消附加远程进程,...Peb->Ldr && i < 10; i++) { // 将当前线程置于指定间隔的可警报或不可操作的等待状态 KeDelayExecutionThread(KernelMode,...,地址传递到ZwCreateThreadEx必须在用户模式空间 // 切换到内核模式允许使用内核模式地址 /* dt !...C:\\hook.dll目录下,并运行x32.exe程序,手动加载驱动即可注入成功,输出效果图如下所示; 回到应用层进程中,可看到我们的DLL已经被注入到目标进程内了,效果图如下所示; 参考文献 Blackbone
在目标进程中创建一个远程线程,将获取到的导出函数地址作为线程的入口点,并将DLL路径等参数传递给导出函数。远程线程在目标进程中运行,并调用导出函数。...生成拉起特定DLL的ShellCode片段6.通过NtCreateThreadEx将ShellCode执行起来,并自动加载DLL7.通过KeUnstackDetachProcess取消附加远程进程,并做好最后的清理工作首先需要定义一个标准头文件...Peb->Ldr && i 将当前线程置于指定间隔的可警报或不可操作的等待状态KeDelayExecutionThread(KernelMode, TRUE, &Time);...,地址传递到ZwCreateThreadEx必须在用户模式空间// 切换到内核模式允许使用内核模式地址/*dt !...\\hook.dll");DriverObject->DriverUnload = Unload;return STATUS_SUCCESS;}运行如上这段代码片段,将编译好的DLL文件放入到C:\\hook.dll
利用非传统方法显示调用 api 函数 前言 本文将介绍一种在内存中查找函数地址的方法,从而隐藏导入表存在调用函数的痕迹。 下面将对该方法进行详细的介绍。...此处存储着当前找到的模块中的所有的导出函数的名称,通过与这些字符串逐个比较,可以找到指定的函数名称。...将此时数组的索引记作 Index 查找并跳转到 ordinal地址数组所在的位置,即 IMAGE_EXPORT_DIRECTORY.AddressOfNameOrdinals 在 ordinal 地址数组中利用之前找到的索引...2.版本兼容性好一些,因为其是遍历到指定的模块,然后检查指定模块的IAT表,从中获得函数名,转换成hash与要寻找的函数hash进行比较。...4.缺点也有,不如特定顺序寻址的方式灵活小巧。
作为ref传递的参数必须在传递给方法之前进行初始化,而out参数在传递给方法之前无需进行初始化。 10、C#中“ using”语句的用途是什么?...我们可以轻松地将自定义控件添加到多个应用程序(如果共享的Dll)。因此,如果它们是私有的,那么我们可以将其复制到dll到Web应用程序的bin目录中,然后添加引用并可以使用它们。...他们有自己的设计和代码背后。用户控件的文件扩展名为ascx。 17、 C#中的密封类是什么? 当我们想限制继承的类时,我们创建密封的类。密封的修饰符,用于防止从类派生。...如果我们强制将密封类指定为基类,则会发生编译时错误。 18、什么是方法重载? 方法重载是在同一个类中创建多个具有相同名称且具有唯一签名的方法。编译时,编译器使用重载解析来确定要调用的特定方法。...System.String是不可变的。当我们修改字符串变量的值时,会将新的内存分配给新值,并释放先前的内存分配。
因此,调用者可以忽略它们,并使用默认值。正如你声明的那样,我们可以通过只传递 storedProcedure 参数来调用它。...对于调用者,GetJokeAsync 方法最终会给你一个字符串 - 或可能出错。 当响应返回时,从被暂停的地方恢复延续执行。...然后,将结果 JSON 反序列化到 Result类的实例中,并返回 Joke 属性。 C# 6.0 C# 6.0 有很多很不错的改进,很难选择我最喜欢的特性。...使用 $ 符号插入字符串文字时,将启用 C# 中的字符串插值语法。相当于告诉 C# 编译器,我们要用到各种 C# 变量、逻辑或表达式来插入到此字符串。...不要怀疑,它使我们的 C# 代码更具有表现力。
然后,调用 ZwSetInformationFile 函数,将文件句柄作为参数传递给它,并指定 FILE_DISPOSITION_INFORMATION 类型,以删除文件。...使用 NtQuerySystemInformation 函数获取系统进程信息,并枚举每个进程以查找拥有要删除文件的句柄的进程。...然后,使用 ZwQuerySystemInformation 函数获取有关进程打开句柄的信息,并枚举每个句柄以查找要删除的文件句柄。...3.通过调用ZwQueryObject并传入ObjectNameInformation查询到句柄的名称,并将其放入到pNameInfo变量内。...,则会分别将c://lyshark.exe以及驱动程序自身删除,并输出如下图所示的提示信息;
因此,请始终根据您作为开发人员的判断来确定要实施哪些建议。 例子 ChatGPT 提示:请分析以下 C# 代码并识别其中存在的任何潜在代码。...此依赖项通过其构造函数传递,并且可以从类外部访问。您可能需要重新考虑这一点,以将数据完全封装在您的类中。如果绝对有必要从外部提供它,那么请考虑进行深层复制以避免可变数据的潜在问题。...将 ChatGPT 集成到开发流程中 将 ChatGPT 集成到 C#/.NET 开发流程中可以提高工作效率和代码质量。...ChatGPT Whisper API 使您能够在 C#/.NET 开发流程中以编程方式使用 AI,从而提高生产力和代码质量。...实施这些最佳实践以将 ChatGPT 成功集成到您的 C#/.NET 开发流程中: 确定使用领域——选择开发过程中 ChatGPT 可以增加价值的部分。
在过去的几个月里,Gamaredon 使用了许多不同的编程语言,从 C# 到 VBScript、批处理文件和 C/C++。...在调查恶意活动时,我们很少看到使用 Outlook 宏来传递恶意软件。...它将生成的可执行文件放在现有目录中,并创建一个计划任务,该任务将每 10 分钟启动一次。从图 6 中可以看出,解码后的源代码中仍然有注释,说明 Gamaredon 的运算符明显草率。...模块的字符串存储在其 .data 部分中,使用简单的 XOR 密钥进行加密。它还能够从其 C&C 服务器下载和执行任意代码。 C# 这是 C/C++ 版本的 C# 重新实现。...那里提交的代码清楚地显示了 C# 下载器的演变。第一个版本没有任何混淆的迹象;然后开发人员添加了不同的字符串混淆和垃圾代码,使分析更加困难。
在本文中,我们将深入探讨 C# 12.0 的 10 大功能,探讨它们是什么、它们为什么重要、何时使用它们以及它们与以前的替代方案相比如何。在我们踏上 C# 最新创新的激动人心的旅程时,请系好安全带!...以前的版本:在早期版本中,您必须声明一个单独的构造函数,并手动将参数分配给字段或属性。...Lambda 改进:增强函数式编程的灵活性 内容:C# 12.0 提供了增强的类型推理,并支持 lambda 表达式中的默认参数。...从使用主构造函数和集合表达式的简化语法到强大的元编程工具(如拦截器),这些新增功能为开发人员提供了更多工具,以编写更简洁、更高效、更具表现力的代码。...无论您是在构建高性能应用程序、处理数据密集型项目,还是只是希望编写更优雅的代码,C# 12.0 都能满足您的需求。采用这些新功能,在您的项目中试用它们,并将您的 C# 编程提升到一个新的水平!
CoreML为iOS带来了机器学习 - 应用程序可以利用训练有素的机器学习模型来执行从问题解决到图像识别的各种任务。...此代码还创建了两个Vision请求:首先用于查找图像中的矩形,然后使用CoreML模型处理矩形: C#复制 该类仍然需要实现 Vision请求的方法HandleRectangles和HandleClassification...在CoreMLVision示例中,此代码在用户选择图像后运行: C#复制 此处理程序将传递ciImage给VNDetectRectanglesRequest在步骤1中创建的Vision框架。...observations[0]提取第一个矩形并传递给CoreML模型: C#复制 的ClassificationRequest在步骤1中使用的初始化HandleClassification 在下一步骤中定义的方法...所述影像与CoreML样品接受一个图像参数,并使用视觉框架的图像,其被传递到识别单位的CoreML模型中,以确定正方形区域。 最后,CoreML图像识别示例使用CoreML来识别照片中的要素。
在MVC程序中Razor视图被编译成C#类,而其基类(RazorView)定义了一个Layout属性,我们在18章中我们将介绍更详细的内容。...当呈现一个视图时,MVC框架将查找名为_ViewStart.cshtml的文件。该文件的内容被当作它好像包含在视图文件自身中,我们可以使用这个特性来自动地设置layout属性的值。...因为你将看到,你可以使用Razor做很多事情,包括在Razor中使用C#语句,但是你绝对不应该使用Razor去执行业务逻辑,或者使用任何方式更改域模型对象。...但这个例子强调了如何使用Razor表达式来显示从行为方法传递到视图的数据, 设置特性值 到目前为止的四个例子都是想元素设置内容,此外你还可以使用Razor表达式设置原色的特性。...但是,如果你先插入文本到视图中,并且这个文本没有包含在一个HTML元素中,那么你需要使用下面这种方式: @: Out of stock @:使Razor将其后的内容当作C#语句
CLR类型,但是由于CLR类型不能被识别,所以必须从另一个实体类型导航到它。...包含定义导航的实体是所有者。当查询所有者时,默认情况下将包含所有类型。 按照惯例,将为所属类型创建一个影子主键,并通过使用表分割将其映射到与所有者相同的表。...(db, 147); } 3.查询方面 3.1改进LINQ翻译 使更多的查询成功执行,并将更多的逻辑生成SQL让它在数据库中执行(而不是内存中),并且从数据库中检索更少的不必要的数据。...3.3FromSql和ExecuteSqlCommand中的字符串插值 C#6(C#6.0特性请移步:这里)中引入了字符串插值,这是一个允许C#表达式直接嵌入到字符串文字中的功能,提供了一种在运行时构建字符串的好方法...这种新的支持允许以“安全”的方式使用C#字符串插值。这样就可以防止在运行时动态构建SQL时发生的常见SQL注入攻击.
将 20224 字节 (0x4f00) 写入临时文件后,关闭文件描述符,然后使用 insmod 命令安装此内核模块。通过stdout/stderr重定向到/ dev / null,错误随后被忽略。...在写入文件时,这些附加模块包括一个键盘记录器、一个特定事件下载和执行 (DLEXEC) 二进制文件的模块,以及一个在触发事件之前监视特定“magic字节”的 ICMP 模块。...当接收到特定的 ICMP 数据包时,DLEXC 和 ICMP 模块可以一起使用来触发二进制文件的下载和执行。它们也可以独立使用。...图-11 覆盖之前创建的文件 接下来,userland 二进制文件确保它可以访问 /root/ 目录(图 12 中的变量 pathName),然后将当前正在执行的二进制文件读入本地缓冲区,以执行二进制文件并伪装成进程名称为...二进制文件中的其他硬编码字符串表明这是 protobuf 版本 2,该版本允许字段可选。当考虑一个字段在发送回 C2 服务器的protobuf 消息是否总是包含数据时,字段可选一个重要的考量。
我们还发现,当使用c#而不是C时,有更多的贡献者对探索性能改进感兴趣,而且更多的人以更快的速度进行实验,从而获得更好的性能。 然而,我们从移植中看到了更直接的性能改进。...请注意,c#编译器只允许在不安全的上下文中使用SkipLocalsInit,因为它很容易导致未经过适当验证的代码损坏(因此,如果/当您应用它时,请三思)。...将PopCount转换为一个内因,使JIT能够识别何时使用常量参数调用它,并将整个操作替换为一个预先计算的常量。或dotnet/runtime#37254,它删除使用const字符串时发出的空检查。...对于一个公共方法,类型,并通过MethodInfo到另一个应用程序调用它的一部分。...这个分析器并不能很大程度上帮助您使代码更快,但是当您使用了使代码更快的解决方案时,它可以帮助您使代码正确。具体来说,它标记使用stackalloc从堆栈分配内存,但在循环中使用它的情况。
领取专属 10元无门槛券
手把手带您无忧上云