渗透测试框架——Cobalt Strike

渗透测试框架——Cobalt Strike

Cobalt Strike是一款非常成熟的渗透测试框架。Cobalt Strike在3.0版本之前是基于Metasploit框架工作的,可以使用Metasploit的漏洞库。从3.0版本开始,Cobalt Strike不再使用Metasploit的漏洞库,成为一个独立的渗透测试平台。Cobalt Strike是用Java语言编写的。可以进行团队协作,以搭建了Cobalt Strike的TeamServer服务的服务器为中转站,使目标系统权限反弹到该TeamServer服务器上。同时,Cobalt Strike提供了良好的UI界面。

1. 安装Cobalt Strike

1.1 安装Java运行环境

1)下载

因为启动Cobalt Strike需要JDK的支持,所以需要安装Java环境。打开Oracle官方网站(https://www.oracle.com/java/technologies/downloads/#jdk21-windows),如下图所示:下载安装包。

Cobalt strike1

2)查看Java环境

打开命令模式,输入如下命令查看所安装的Java环境版本信息,如下图所示:

java -version
cobaltstrike2

1.2 部署TeamServer

在安装Cobalt Strike时,必须搭建团队服务器(也就是TeamServer服务器)。打开cobaltstrike文件夹,如下图所示:

cobalt3

输入“ls -l"命令,查看TeamServer和Cobalt Strike是否有执行权限。当前TeamServer权限为rw, 没有x(执行)权限,如下图所示:

cobalt4

接着, 输入如下命令, 为TeamServer和Cobalt Strike赋予执行权限,如下图所示:

chmod +x teamserver cobaltstrike

cobalt5

再次输入"ls -l"命令,查看当前TeamServer和Cobalt Strike的权限。TeamServer和CobaltStrike已经获得了执行权限,如下图所示:

cobalt6

cobaltstrike文件夹中有多个文件和文件夹,其功能如下:

  • agscript:拓展应用的脚本
  • c2lint:用于检查profile的错误和异常
  • teamserver:团队服务程序
  • cobaltstrike和cobaltstrike.jar:客户端程序。因为teamserver文件事通过Java来调用Cobalt Strike的,所以直接在命令行环境中输入第一个文件的内容也能启动Cobalt Strike客户端Strike的, (主要是为了方便操作)。
  • logs:日志,包括Web日志、Beacon日志、截图日志、下载日志、键盘记录日志等。
  • update和update.jar:用于更新Cobalt Strike。
  • data: 用于保存当前TeamServer的一些数据。

最后,运行团队服务器。在这里,需要设置当前主机的IP地址和团队服务器的密码。输入如下命令,如下图所示:

./teamserver 192.168.1.29 test123456

cobalt7

如果要将Cobalt Strike的TeamServer部署在公网上,需要使用强口令,以防止TeamServer被破解。接下来,我们就可以启动Cobalt Strike客户端来连接团队服务器了。

2. 启动 Cobalt Strike

2.1 启动Cobalt Strike.jar

启动cobaltstrike.jar

启动

填写团队服务器的IP地址、端口号、用户名、密码,如下图所示。这里,登录用户名可以任意输入,但要保证当前该用户名没有被用来登录CobaltStrike服务器。

cobalt8

单击”Connect“按钮,会出现指纹校验对话框,如下图所示。指纹校验的主要作用是防篡改,且每次创建Cobalt Strike团队服务器时生成的指纹都不一样。

cobalt9

在客户端想服务端成功获取相关信息后,即可打开Cobalt Strike主界面,如下图所示。CobaltStrike主界面主要分为菜单栏、快捷功能区、目标列表区、控制台命令输出区、控制台命令输入区。

  • 菜单栏: 集成了Cobalt Strike的所有功能
  • 快捷功能区:列出常用的功能
  • 目标列表:根据不同的显示模式,显示已获取权限的主机及目标主机
  • 控制台命令输入区:输出命令的执行结果
  • 控制台命令输入区:输入命令

cobalt主界面

2.2 利用Cobalt Strike获取第一个Beacon

1. 建立 Listener

可以通过菜单栏的第一个选项”Cobalt Strike"进入"Listener"面板,也可以通过快捷功能区进入“Listeners”面板,如下图所示:

cobalt模块1

cobaltlistener2

单击“Add"按钮,新建一个监听器,如图所示。输入名称、监听器类型、团队服务器IP地址、监听端口,然后单击”Save“按钮保存设置,如图所示。第一个监听器(Listener)创建成功,如图所示。

cobaltlistener3
2. 使用Web Delivery执行Payload

单击”Attacks"菜单,选择"Web Driver-by" → "Scripted Web Delivery"选项,或者通过快捷功能区,打开”Scripted Web Delivery"窗口,如图所示。

cobaltlistener5

最后,将Cobalt Strike生成的Payload完整第复制下来,如下图所示。

cobaltlistener6

保持默认配置,选择已经创建的监听器,设置类型为PowerShell,然后单击“Launch”按钮,如图所示。最后,将Cobalt Strike生成的Payload完整复制下来,如图所示。

cobaltlistener7cobaltlistener8

3. 执行Payload

执行Payload,Cobalt Strike会收到一个Beacon,如图所示:

cobaltlistener9

如果一切顺利,就可以在Cobalt Strike的日志界面看到一条日志,如下图所示。

cobaltlistener10

在Cobalt Strike的主界面中可以看到一台机器上线(包含内网IP地址、外网IP地址、用户名、机器名、是否拥有特权、Beacon进程的PID、心跳时间等信息),如图所示:

cobaltlistener11

4. 与目标主机进行交互操作

单击右键,在弹出的快捷菜单中选中需要操作的Beacon,然后单击“Interact"选项,进入主机交互模式,如图所示。

现在就可以输入一些命令来执行相关操作了。如图所示,输入"shell whoami"命令,查看当前用户,在心跳时间后就会执行该命令。在执行命令时,需要在命令前添加”shell“。Beacon的每次回连时间默认为60秒。

回连后,执行命令的任务将被下发,并成功回显命令的执行结果,如图所示。

cobaltlistener12

cobaltlistener13

cobaltlistener14

3. Cobalt Strike模块详解

1. Cobalt Strike模块

Cobalt Strike模块的功能选项,如图所示。

cobalt模块1
  • New Connection:打开一个新的”Connect“窗口。在当前窗口中新建一个连接,即可同时连接不同的团队服务器(便于团队之间的协作)。
  • Preferences:偏好设置,首选项,用于设置Cobalt Strike主界面、控制台、TeamServer连接记录、报告的样式。
  • Visualization:将主机以不同的权限展示出来(主要以输出结果的形式展示)。
  • VPN Interface:设置VPN接口。
  • Listeners:创建监听器。
  • Script Manager:查看和加载CNA脚本。
  • Close:关闭当前与TeamServer的连接。
2. View模块

View模块的功能选项,如下图所示。

cobaltstrikeview
  • Application:显示被控机器的应用信息。
  • Credential:通过HashDump或mimikatz获取的密码或者散列值都存储在这里。
  • Downloads:从被控机器中下载的文件。
  • Event Log:主机上线记录,以及与团队协作相关的聊天记录和操作记录。
  • Keystrokes:键盘记录。
  • Proxy Pivots:代理模块
  • Screenshots:屏幕截图模块
  • Script Console:控制台,在这里可以加载各种脚本。
  • Targets:显示目标。
  • WebLog:Web访问日志。
3. Attacks模块

下面介绍Attacks模块下的Packages和Web Drive-by模块。

  1. Package模块

依次点击”Attacks“ → ”Packages“选项,可以看到一系列功能模块,如下图所示。

cobaltstrikeattack
  • HTML Application:基于HTML应用的Payload模块,通过HTML调用其他语言的应用组件进行攻击测试,提供了可执行文件、PowerShell、VBA三种方法。
  • MS Office Macro:生成基于Office病毒的Payload模块。
  • Payload Generator:Payload生成器,可以生成基于 C、C#、COM Scriptlet、Java、Perl、Powershell、Python、Ruby、VBA等的Payload。
  • Windows Executable:可以生成32位或64位的EXE和基于服务的EXE、DLL等后门程序。在32位的Windows操作系统中无法执行64位的Payload,而且对于后渗透测试的相关模块, 使用32位和64位的Payload会产生不同的影响,因此在使用时硬谨慎选择。
  • Windows Executable(S):用于生成一个Windows可执行文件,其中包含Beacon的完整Payload,不需要阶段性的请求。与Windows Executable模块相比,该模块额外提供了代理设置,以便在较为苛刻的环境中进行渗透测试。该模块还支持PowerShell脚本,可用于将Stageless Payload注入内存。
  1. Web Drive-by模块

依次单击”Attacks“ → ”Web Drive-by“选项,可以看到一系列基于网络驱动的功能模块,如图所示。

cobaltstrike模块attacks
  • Manage:管理器,用于对TeamServer上已经启动的Web服务进行管理,包括Listener及Web Delivery模块。
  • Clone Site:用于克隆指定网站的样式。
  • Host File:用于将指定文件加载到Web目录中,支持修改Mime Type。
  • Script Web Delivery:基于Web的攻击测试脚本,自动生成可执行的Payload。
  • Signed Applet Attack:使用Java自签名的程序进行钓鱼攻击测试。如果用户有Applet运行权限,就会执行其中的恶意代码。
  • Smart Applet Attack:自动检测Java的版本并进行跨平台和跨浏览器的攻击测试。该模块使用嵌入式漏洞来禁用Java的安全沙盒。可利用此漏洞的Java版本位1.6.0_45以下及1.7.0_21以下。
  • System Profiler:客户端检测工具,可以用来获取一些系统信息,例如系统版本、浏览器版本、Flash版本等。
4. Reporting模块

Reporting模块可以配合Cobalt Strike的操作记录、结果等,直接生成相关报告,如图所示。

cobaltstrike模块Reporting

4. Cobalt Strike功能详解

在后渗透测试中,Cobalt Strike作为图形化工具,具有得天独厚的优势。

1. 监听模块
  1. Listeners模块Payload功能详解

Listeners模块的所有Payload,如下表所示。

Listeners模块的所有Payload

Payload说 明
windows/beacon_dns/revser_dns_txt
windows/beacon_dns/reverse_http
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
windows/beacon_smb/bind_pipe只用于x64本地主机
windows/foreign/reverse_http
windows/foreign/reverse_https
windows/foreign/reverse_tcp
  • windows/beacon_dns/reverse_dns_txt:使用DNS中的TXT类型进行数据传输,对目标主机进行管理。
  • windows/beacon_dns/reverse_http:采用DNS的方式对目标主机进行管理。
  • windows/beacon_https/revese_https:采用SSL进行加密,有较高的隐蔽性。
  • windows/beacon_smb/bind_pipe:Cobalt Strike的SMB Beacon。SMB Beacon使用命名管道通过父Beacon进行通信。该对等通信与Beacon在同一主机上工作,点对点地对目标主机进行控制。SMB Beacon也适用于整个网络,Windows将命名管道通信封装在SMB协议中(SMB Beacon因此得名)。Beacon的横向移动功能通过命名管道来调度SMB Beacon。对内网中无法连接公网的机器,SMB Beacon可以通过已控制的边界服务器对其进行控制。
  • windows/foreign/reverse_http:将目标权限通过此监听派发给Metasploit或者Empire。
  1. 设置windows/beacon_http/reverse_http监听器

依次单击”Cobalt Strike“ → ”Listeners“选项,创建一个监听器。如图所示,像Metasploit一样,Cobalt Strike有多种监听程序。在Cobalt Strike中,每种类型的监听器只能创建一个。

cobaltstrike监听器

Cobalt Strike的内置监听器Beacon(针对DNS、HTTP、SMB),外置监听器为Foreign。有外置监听器,就意味着可以和Metasploit或Empire联动。可以将一个在Metasploit或Empire中的目标主机的权限通过外置监听反弹给Cobalt Strike。

Cobalt Strike的Beacon支持异步通信或交互式通信。异步通信过程是:Beacon从TeamServer服务器获取指令,然后断开连接,进入休眠状态,Beacon继续执行获取的指令,直到下一次心跳才与服务器进行连接。

在监听器窗口中单击”Add“按钮,就会出现新建监听器页面。如图所示,在"Payload"下拉列表中选择”Beacon HTTP"选项,表示这个监听器是Beacon通过HTTP协议的GET请求来获取并下载任务、通过HTTP协议的POST请求将任务的执行结果返回的。然后,设置监听端口,单击“Save”按钮保存设置。

cobaltstrike监听器2
2. 监听器的创建于使用
  1. 创建外置监听器

创建一个名为"msf"的外置监听器,如图所示。

cobaltstrike外置监听器
  1. 通过Metasploit启动监听

启动Metasploit,依次输入如下命令,使用exploit/multi/handler模块进行监听,如图所示。使用exploit/multi/handler模块设置的Payload的参数、监听器类型、IP地址和端口,要和在Cobalt Strike中设置的外置监听器的响应内容一致。

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.1.29
set lport 2333
run
metasploit监听器
  1. 使用Cobalt Strike反弹Shell

在Cobalt Strike 主界面上选中已经创建的外置监听器,然后单击右键,在弹出的快捷菜单中单击”Spawn"选项。在打开的窗口中选中“msf"外置监听器,单击”Choose"按钮。在Beacon发生下 一次心跳时,就会与Metasploit服务器进行连接,如图所示。

cobaltstrike反弹shell

切换到Metasploit控制台,发现已经启动了Meterpreter session 1。

接下来, 执行“getuid”命令,查看权限,如图所示。因为当前Cobalt Strike的权限时System,所以分配给Metasploit的权限也是System。由此可知,当前Cobalt Strike有什么权限,分配给Metasploit的就是什么权限。

cobaltStrike-meterpretersession1

除了使用图形化界面进行spawn操作,还可以直接在控股台的命令输入区输入“spawn msf"命令,将权限分配给名为”msf"的监听器,如图所示。

控制台spawnmsf

如下两种监听器的使用方法与上述类似。

  • windows/foreign/reverse_https
  • windows/foreign/reverse_tcp
3. Delivery模块

在Delivery模块中,我们主要了解一下Scripted Web Delivery模块。

依次单击“Attacks" → ”Web Drive-by" → "Scripted Web Delivery"选项,打开“Scripted Web Delivery”窗口,如图所示。

delivery模块
  • URI Path:在访问URL时,此项为Payload的位置。
  • Local Host:TeamServer服务器的地址。
  • Local Port:TeamServer服务器开启的端口。
  • Listener:监听器。
  • Type:Script Web Delivery的类型,如图所示。

Script Web Delivery 主要通过四种类型来加载TeamServer中的脚本,每种类型的工作方式大致相同。Script Web Delivery先在TeamServer上部署Web服务,再生成Payload和唯一的URI。

选择PowerShell类型并单击“Launch"按钮,如图所示,Cobalt Strike会将生成的Payload自动转换为命令。复制这个命令并在目标主机上执行它,在没有安装杀毒软件的情况下,Windows主机会直接下载刚才部署在TeamServer中的Payload,然后将其加载到内存中,以获取目标主机的一个Beacon。

delivery2delivery3

其他类型的Script web Delivery是通过目标主机的不同模块实现的。在渗透测试中,可以根据目标主机的情况选择相应类型的Script Web Delivery。

4. Manager模块

依次单击”Attacks" → “Web Driver-by" → ”Manage“选项,可以看到Manage模块中开启的Web服务,如图所示。

manage模块1

Manage模块主要用于管理团队服务器的Web服务。可以看到,其中不仅有Beacon监听器,还有Script Web Delivery模块的Web服务。如果忘记了由Script Web Delivery自动生成的命令,可以在这里找回。选中一个服务,单击,”Copy URL”按钮,那段被我们忘记的命令就会出现在剪贴板中了。如果想让某个服务停止运行,可以选中该服务并单击“Kill”按钮。

5. Payload模块
  1. Payload的生成

依次单击“Attacks” → “Packages" → "Payload Generator"选项,打开”Payload Generator“窗口,如图所示。

payload模块1

可以生成多种Cobalt Strike的Shellcode。选择一个监听器,设置输出语言的格式,就可以生成相应语言的Shellcode(可以生成C、C#、COM Scriptlet、Java、Perl、Power Shell、Power Shell Command、Python、RAW、Ruby、Veil、VBA等语言的Shellcode)。编写相应语言的用于执行Shellcode的代码,将Shellcode嵌入,然后在目标主机上执行这段Shellcode,就可以回弹一个Beacon。各种语言用于执行Shellcode的代码,可以在GitHub中找到。

  1. Windows可执行文件(EXE)的生成

依次单击”Attacks" → ”Package“ → "Windows Executable"选项,打开”Windows Executable“窗口,如图所示。

payload模块2

在这里,可以生成标准的Windows可执行文件(EXE)、基于服务的Windows可执行文件、Windows DLL文件。

  • Windows EXE:Windows 可执行文件。
  • Windows Service EXE:基于服务的Windows可执行文件。 可以将对应的文件添加到服务中,例如设置开机自动启动。
  • Windows DLL:Windows DLL文件。DLL文件可用于DLL劫持、提权或者回弹Beacon。
  1. Windows可执行文件(Stageless)的生成

依次单击”Attacks" → “Packages" → ”Windows Executable(S)"选项,打开“Windows Executable”窗口,生成一个Windows可执行文件,如图所示。

stagless模块
  • Windows Service EXE:基于服务的Windows可执行文件。 可以将对应的文件添加到服务中,例如设置开机自动启动。
  • Windows DLL:Windows DLL文件。DLL文件可用于DLL劫持、提权或者回弹Beacon。
  1. Windows可执行文件(Stageless)的生成

依次单击”Attacks" → “Packages" → ”Windows Executable(S)"选项,打开“Windows Executable”窗口,生成一个Windows可执行文件,如图所示。

stagless模块

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/245386.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日好题:原来你也玩三国杀(DP动态规划)

I - 原来你也玩三国杀 Description 小 Q 最近听说 “很多” acmer 都爱上了一款游戏《三国杀》。因为小 Q 是一个初学者,所以想自己先偷偷学习一下,然后惊艳所有人。但又因为小 Q 不屑于使用一般的武将,因为他觉得唯有操作型武将才能显得自…

性能监控软件:优化系统运行的得力助手

随着科技的飞速发展,企业和组织对于其信息技术基础设施的性能要求也愈发提高。为了确保系统能够高效稳定地运行,性能监控软件成为不可或缺的工具。本文将探讨性能监控软件的主要作用,以及它们在提升系统性能和稳定性方面的关键作用。 1. 实时…

学习MS Dynamics AX 2012编程开发 1. 了解Dynamics AX 2012

在本章中,您将了解开发环境的结构以及Microsoft Dynamics AX中的开发人员可以访问哪些工具。在本书的第一步演练之后,您将很容易理解著名的Hello World代码,您将知道应用程序对象树中的不同节点代表什么。 以下是您将在本章中学习的一些主题…

10、ble_mesh_node服务节点示例

1。手机APP选择名字,点击provisioner App keys,识别,配网。 2。初始化流程, board_init()初始化IO,初始化存储, bluetooth_init()蓝牙初始化,ble_mesh_get_dev_uuid(dev_uuid)蓝牙组网初始化, 3、蓝牙组网初…

MyBatis缓存机制流程分析

前言 在进行分析之前,建议快速浏览之前写的理解MyBatis原理、思想,这样更容易阅读、理解本篇内容。 验证一级缓存 MyBatis的缓存有两级,一级缓存默认开启,二级缓存需要手动开启。 重复读取跑缓存 可以看到,第二次…

[MySQL] MySQL中的索引

文章目录 一、初识索引 1、1 索引的概念 1、2 索引案例 二、认识磁盘 2、1 磁盘结构 2、2 操作系统与磁盘的数据交互 2、3 磁盘随机访问与连续访问 2、4 MySQL与磁盘的数据交互 三、索引的理解 3、1 建立测试表 3、2 为何MySQL与磁盘IO交互是 Page 3、3 理解Page 3、3、1 页目录…

【WSL】Windows下的Linux子系统使用方法指南

▒ 目录 ▒ 🛫 导读需求开发环境 1️⃣ WSL安装启用或关闭windows功能安装分发命令行启动Linux 2️⃣ WSL 的基本命令显示帮助列出可用的 Linux 发行版列出已安装的 Linux 发行版检查 WSL 版本更新 WSL通过 PowerShell 或 CMD 运行特定的 Linux 发行版关闭WSL全部服…

Centos7防火墙及端口开启

1、防火墙 1.1、查看防火墙是否开启 systemctl status firewalld 1.2、开启防火墙 firewall-cmd --list-ports 1.3、重启防火墙 firewall-cmd --reload 2、端口 2.1、查看所有已开启的端口号 firewall-cmd --list-ports 2.2、手动开启端口 启动防火墙后,默认没有开…

智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于共生生物算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.共生生物算法4.实验参数设定5.算法结果6.…

1、springboot项目运行报错

问题1:获取不到配置文件的参数 我的配置文件获取的参数如下: public class Configures{Value("${configmdm.apk.apkName}")private static String apkName;private void setApkName(String apkName) {Configures.apkName apkName;}private …

【亚马逊云科技】通过高性能低延迟对象存储 S3实现网站资源托管

本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言1 S3 介绍1.1 优点 2 使用步骤2.1 注册账户2.2 创建存储桶2.2.1 打开控制…

C/C++常见面试题(二)

接前面C/C常见面试题(一),继续巩固 目录 1 sizeof和strlen的区别 2 宏定义的陷阱 3 不使用sizeof计算出类型或者变量所占的内存的字节数 4 给定一个数判断是否其是2的N次幂 5 C/C打印所在文件、行号、函数、日期,时间、遵循的…

每日分享,以元旦为题的诗词

元旦佳节即将来临,相信大家都会在朋友圈表达一下自己的情感,不管大家以前是怎么表达的,今天小编给你分享几首以元旦为题的几首诗,喜欢的朋友可以自取,想要更多免费的诗词,请自行百度或小程序搜索&#xff1…

智能守护,数据安全稳中求胜!上海迅软DSE助力家具家电行业引领潮流!

随着中国经济的蓬勃发展,家具家电企业正迎来“精品制造”的时代,业内竞争日益激烈。为了提升产品竞争力、扩大市场占有率,企业亟需加强对自主品牌的安全建设,确保品牌的自主知识产权、产品生产资料以及销售信息等核心数据不受泄漏…

C++二维数组(2)

图形相似度 题目描述: 给出两幅相同大小的黑白图像(用0-1矩阵)表示,求它们的相似度。 说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。 两幅图像的相似度定义为相同像素…

为什么阿里云不能免费帮用户无限抵御DDoS攻击

DDoS防御需要成本,其中最大的成本就是带宽费用。带宽是阿里云向电信、联通、移动等运营商购买,运营商计算带宽费用时不会把DDoS攻击流量清洗掉,而是直接收取阿里云的带宽费用。阿里云云盾在控制成本的情况下会尽量为阿里云用户免费防御 DDoS攻…

PXI总线测试模块-6935B 微波本振源

6935B 微波本振源 PXI总线测试模块 650MHz~10GHz 01 产品综述 6935B微波本振源采用3U 2槽PXIe结构形式,具有频率范围宽、相位噪声低、频率分辨力高、体积小等优点。其优异的性能使其可适用于通信以及导航设备等众多领域产品的研发、生产、检测与维护中&#xff0c…

neuq-acm预备队训练week 9 P3367 【模板】并查集

题目描述 如题&#xff0c;现在有一个并查集&#xff0c;你需要完成合并和查询操作。 输入格式 解题思路 并查集的用法 AC代码 #include <bits/stdc.h> using namespace std; #define Max 1000001 int zi,xi[Max],yi[Max],Fa[Max]; int find(int x); bool qu(int u,…

垃圾回收 (GC) 在 .NET Core 中是如何工作的?

提起GC大家肯定不陌生&#xff0c;但是让大家是说一下GC是怎么运行的&#xff0c;可能大多数人都不太清楚&#xff0c;这也很正常&#xff0c;因为GC这东西在.NET基本不用开发者关注&#xff0c;它是依靠程序自动判断来释放托管堆的&#xff0c;我们基本不需要主动调用Collect(…

【十】python复合模式

10.1 复合模式简介 在前面的栏目中我们了解了各种设计模式。正如我们所看到的&#xff0c;设计模式可分为三大类:结构型、创建型和行为型设计模式。同时&#xff0c;我们还给出了每种类型的相应示例。然而&#xff0c;在软件实现中&#xff0c;模式并是不孤立地工作的。对于所…