攻防平台搭建与简易渗透工具箱编写
知识点:攻防平台搭建,虚拟机的网络模式详解,安全脚本编写
虚拟机的网络模式:
虚拟机(VM)的网络模式决定了虚拟机与宿主机以及外部网络之间的连接方式。不同的虚拟化平台(如VMware, VirtualBox, Hyper-V等)可能有不同的术语和实现方式,但通常有以下几种基本的网络模式:
1. **桥接模式(Bridged Mode)**:
- 虚拟机在网络上表现为一个独立的设备,拥有自己的IP地址。
- 虚拟机直接连接到物理网络,就像宿主机上的另一台独立的物理机。
- 适合需要从网络中获得独立IP地址的场景。
2. **NAT模式(Network Address Translation, NAT)**:
- 虚拟机共享宿主机的IP地址,通过宿主机访问外部网络。
- 宿主机充当网关设备,为虚拟机提供网络地址转换服务。
- 适用于内部网络隔离,外部访问控制严格的环境。
3. **仅主机模式(Host-Only Mode)**:
- 虚拟机只能与宿主机通信,不能直接访问外部网络。
- 适用于需要隔离虚拟机与外部网络,但允许宿主机访问的场景。
4. **内部网络模式(Internal Network Mode)**:
- 虚拟机之间可以相互通信,但无法访问宿主机或外部网络。
- 适用于构建隔离的虚拟网络环境,进行内部测试或模拟。
5. **混合模式(Mixed Mode)**:
- 结合了以上几种模式的特点,允许虚拟机根据需要选择不同的网络连接方式。
6. **端口转发(Port Forwarding)**:
- 允许将宿主机的某个端口的流量转发到虚拟机的指定端口。
- 常用于提供虚拟机上的服务能够从外部网络访问。
7. **VPN访问(VPN Access)**:
- 通过虚拟专用网络连接,允许虚拟机安全地连接到远程网络。
8. **无线接入点(Soft AP)**:
- 虚拟机可以作为无线接入点,允许其他无线设备连接。
每种网络模式都有其特定的用途和配置方式,选择哪种模式取决于你的具体需求,比如安全性、隔离级别、网络访问控制等。例如,如果你需要进行网络安全测试,可能会选择桥接模式来模拟真实的网络环境;如果你需要隔离虚拟机以进行内部测试,可能会选择NAT或仅主机模式。在配置虚拟机网络时,应根据虚拟化平台的文档进行相应的设置。
简易渗透工具箱编写:
bat文件:
`.bat` 文件是 Windows 操作系统中的一种批处理脚本文件。它包含了一系列的命令,这些命令会按照顺序被 Windows 命令提示符(cmd.exe)执行。用户可以通过编写 `.bat` 脚本来自动化一些常见的任务,例如文件管理、程序启动、系统设置等。
创建一个 `.bat` 文件非常简单,你只需要使用文本编辑器(如记事本)编写命令,然后保存文件时选择 "所有文件" 类型,并以 `.bat` 作为文件扩展名即可。当双击 `.bat` 文件时,它就会执行里面的命令。
例如,一个简单的 `.bat` 文件可能看起来像这样:
@echo off
echo Hello, this is a batch script!
pause
这个脚本会关闭命令的回显(`@echo off`),然后打印 "Hello, this is a batch script!" 到屏幕上,最后暂停脚本的执行,等待用户按下任意键。
`.bat` 文件非常有用,尤其是在需要快速执行一系列命令或者自动化常规任务时。
bat脚本文件的常用命令:
1. 清理磁盘脚本
`rd` 是 Windows 命令提示符(cmd.exe)中的一个命令,它代表 "rmdir",即 "remove directory" 的缩写。这个命令用于删除一个目录(文件夹)及其所有子目录和文件。
命令的基本语法是:
rd [/s] [/q] [drive:]path
- `/s` 参数表示删除指定目录及所有子目录和文件。
- `/q` 参数表示安静模式,即删除时不要求确认。
- `drive:` 是可选的,指定要操作的驱动器。
- `path` 是要删除的目录的路径。
所以,当你看到 `rd d:\123` 这个命令时,它的含义是删除 `D:` 驱动器上的 `123` 目录及其所有子目录和文件。但是,请注意,如果 `123` 目录内有文件或子目录,并且没有使用 `/s` 参数,命令将不会执行,因为默认情况下 `rd` 不会删除非空目录。
如果 `123` 目录是空的,那么它将被删除。如果目录不为空,你将需要使用 `/s` 参数,例如 `rd /s d:\123`,来强制删除所有内容。同时,如果希望在删除过程中不出现任何提示,可以添加 `/q` 参数,如 `rd /s /q d:\123`。
@echo off
echo===========================
echo.
echo 您好,我可以帮你清理垃圾文件
echo --by XXX
echo===========================
pauseset /p pan=请输入需要清理的盘符:
rd %pan%: /s/q >nul 2>null
echo 感谢使用,%pan%盘已清空
pause
start %pan%:
这个批处理脚本(.bat 文件)的功能是帮助用户清理指定盘符中的所有文件和目录。下面是对脚本中每条命令的解释:
1. `@echo off`:
关闭命令的回显,即在执行命令时不显示命令本身。即屏蔽了执行过程
2. `echo===========================`:
打印一系列等号,作为分隔线。
3. `echo.`:
打印一个空行。
4. `echo 您好,我可以帮你清理垃圾文件`:
打印一条消息,告知用户脚本的功能。
5. `echo --by XXX`:
打印作者信息,`XXX` 是作者的名字或标识。
6. `echo===========================`:
再次打印分隔线。
7. `pause`:
暂停脚本的执行,直到用户按下任意键。
8. `set /p pan=请输入需要清理的盘符:`:
提示用户输入一个盘符,例如 `C:` 或 `D:`,并将用户输入的值存储在变量 `pan` 中。
9. `rd %pan%: /s/q >nul 2>null`:
- `rd` 是 "remove directory" 的缩写,用于删除目录。
- `%pan%:` 是用户输入的盘符。
- `/s` 参数表示删除指定目录及其所有子目录和文件。
- `/q` 参数表示安静模式,不提示确认。
- `>nul` 表示将命令的标准输出重定向到空设备,即不显示输出。
- `2>null` 表示将命令的错误输出也重定向到空设备,即不显示错误信息。
10. `echo 感谢使用,%pan%盘已清空`:
打印感谢信息,并告知用户指定的盘符已经被清空。
11. `pause`:
再次暂停脚本的执行。
12. `start %pan%:`:
使用 `start` 命令打开用户指定的盘符的窗口。如果盘符已经被清空,这个命令将打开一个空的文件夹窗口。
请注意,这个脚本具有很高的风险性,因为它会删除指定盘符上的所有内容,包括系统文件和用户数据。在没有充分了解后果的情况下,不应该运行这样的脚本。此外,使用批处理脚本进行这样的操作可能违反了操作系统的安全策略
如果不想显示“请按任意键继续”,即pause后的字,可以在pause后使用>nul 2>null
2.关机小程序
@echo off
echo===========================
echo.
echo 关机小程序
echo --by XXX
echo===========================
pauseset /p num=请输入定时关机时间(秒):
shutdown /s /t %num%
这个批处理脚本是一个简单的关机程序,允许用户设置一个定时关机的时间。下面是对脚本中每条命令的详细解释:
1. `set /p num=请输入定时关机时间(秒):`:
提示用户输入一个数值,这个数值代表关机前的倒计时时间(单位是秒)。用户输入的值将被存储在变量 `num` 中。
2. `shutdown /s /t %num%`:
- `shutdown` 是 Windows 系统命令,用于执行关机、重启或注销等操作。
- `/s` 参数表示关机。
- `/t` 参数后面跟的是要延迟的时间(秒),这里使用 `%num%` 来引用用户之前输入的秒数。
这个脚本允许用户通过输入一个时间(秒为单位)来设置 Windows 系统的自动关机。例如,如果用户输入 `3600`,那么计算机将在一个小时后自动关机。
请注意,运行此脚本前,确保你已经保存了所有工作,因为一旦执行,计算机将在指定时间后关闭,所有未保存的工作可能会丢失。此外,确保你有足够的权限来执行关机命令。
可以在终端使用 shutdown /a 来终止一切关机进程。
/s表示关机,/r表示重启,/l表示注销
3.无限重启病毒
copy xxx.bat "C:\Users\allen\AppData\Windows\Start Menu\Programs\Startup"
这个命令是用来将名为 `xxx.bat` 的批处理脚本复制到特定文件夹中的,具体来说,是复制到当前用户启动文件夹中的 "程序" -> "启动" 子文件夹。下面是命令各部分的解释:
- `copy`:这是 Windows 命令提示符中的一个命令,用于复制文件。
- `xxx.bat`:这是要复制的源文件的名称,其中 `xxx` 是你想要复制的批处理文件的实际名称。
- `"C:\Users\allen\AppData\Windos\Start Menu\Programs\Startup"`:这是目标文件夹的路径。这个路径是当前用户(在这个例子中是用户名为 `allen` 的用户)的 "启动" 文件夹的路径。当计算机启动时,这个文件夹中的程序或脚本会被自动执行。
- `C:\Users\allen`:表示 `allen` 用户的主文件夹。
- `Startup`:这是 "启动" 文件夹,用于存放启动时自动运行的程序或脚本的快捷方式。
这个命令的目的是将 `xxx.bat` 脚本添加到启动文件夹中,使得每次计算机启动时,该脚本会自动执行。这可以用于自动化一些任务,比如启动时运行特定的程序或脚本。
请注意,如果你想要执行这个命令,需要确保源文件 `xxx.bat` 的路径是正确的,并且你有足够的权限来复制文件到 "启动" 文件夹。
4.工具箱
echo=====================
set /p num=请输入你的选择:
if "%num%"=="1" goto 1
if "%num%"=="2" goto 2
if "%num%"=="3" goto 3
if "%num%"=="4" goto 4
echo 请从1~4中选择
pause
goto menu
:1
echo 001
pause
goto menu
:2
echo 002
pause
goto menu
:3
echo 003
pause
goto menu
:4
exit
这个批处理脚本提供了一个简单的菜单系统,允许用户通过输入数字选择不同的选项。以下是对脚本中每条命令的解释:
1. `echo ===============`:
打印一系列等号,通常用作菜单的分隔线或标题。
2. `set /p num=请输入你的选择:`:
提示用户输入他们的选择,并将输入的值存储在变量 `num` 中。`/set /p` 命令用于设置变量并从用户那里获取输入。
3. `if "%num%"=="1" goto 1`:
如果用户输入的是 `1`,则跳转到标签 `:1`。
4. `if "%num%"=="2" goto 2`:
如果用户输入的是 `2`,则跳转到标签 `:2`。
5. `if "%num%"=="3" goto 3`:
如果用户输入的是 `3`,则跳转到标签 `:3`。
6. `if "%num%"=="4" goto 4`:
如果用户输入的是 `4`,则跳转到标签 `:4`。
7. `echo 请从1~4中选择`:
如果用户的输入不是 `1` 到 `4` 中的一个,打印一条消息提示用户只能选择 `1` 到 `4`。
8. `pause`:
在每个选择后暂停脚本的执行,直到用户按下任意键。
9. `goto menu`:
跳转回 `menu` 标签,这通常是脚本开始的地方,允许用户重新选择。
10. `:1`,`:2`,`:3`,`:4`:
这些是标签,用于标记脚本中的不同部分。当 `goto` 命令执行时,脚本会跳转到相应的标签。
11. `echo 001`,`echo 002`,`echo 003`:
在每个标签下,打印一个特定的消息,表示用户选择了哪个选项。
12. `exit`:
在标签 `:4` 下,使用 `exit` 命令来退出脚本。
这个脚本是一个循环的菜单系统,用户可以多次选择不同的选项,每次选择后都会返回到菜单开始的地方,直到选择退出(选项4)。脚本中的 `pause` 命令确保用户有足够的时间阅读屏幕上的信息,并且在每次选择后给予反馈。
5.高级隐藏
attirb +h +s d:\*.* /D /S
attirb 修改文件或目录属性
+h 增加隐藏属性
+s 增加系统级别属性
/D 文件
/S 递归
`attrib` 是 Windows 命令提示符中的一个命令,用于显示或修改文件或目录的属性。以下是对 `attrib` 命令及其参数的解释:
1. `attrib +h +s d:\*.* /D /S`:
这个命令用于修改 `D:` 盘根目录下的所有文件和文件夹的属性,包括子目录中的文件和文件夹。
2. `+h`:
增加隐藏属性。当文件或目录设置了隐藏属性后,在文件资源管理器中默认不会显示,除非用户设置了显示隐藏文件和文件夹的选项。
3. `+s`:
增加系统属性。系统文件通常是 Windows 系统运行所必需的文件,通常不建议用户修改或删除。
4. `d:\*.*`:
指定操作的路径和模式。这里 `d:\` 是盘符,`*.*` 是一个模式,表示匹配 `D:` 盘根目录下的所有文件和文件夹。
5. `/D`:
这个参数用于指定 `attrib` 命令应用于目录。但在这个命令中,`/D` 并没有实际作用,因为 `*.*` 已经匹配了所有文件和文件夹,包括目录。
6. `/S`:
递归。这个参数告诉 `attrib` 命令要递归地应用属性更改到所有子目录中的文件和文件夹。
综合来看,`attrib +h +s d:\*.* /D /S` 命令的作用是将 `D:` 盘根目录及其所有子目录中的所有文件和文件夹设置为隐藏和系统属性。这通常用于保护重要文件不被意外访问或修改,或者用于隐藏不希望用户看到的文件和文件夹。
要创建一个批处理脚本(.bat 文件),用于消除 `D:` 盘根目录及其所有子目录中文件和文件夹的隐藏属性与上同理,你可以使用 `attrib` 命令并结合相应的参数来实现。以下是一个简单的脚本示例:
@echo off
echo 正在清除D盘所有文件和文件夹的隐藏属性...
attrib -h -s /D /S D:\*.* >nul
echo 隐藏属性已清除。
pause
下面是对这个脚本中每条命令的解释:
1. `@echo off`:
关闭命令的回显,使得脚本执行时命令本身不会显示在屏幕上。
2. `echo 正在清除D盘所有文件和文件夹的隐藏属性...`:
打印一条消息,告知用户脚本正在执行的操作。
3. `attrib -h -s /D /S D:\*.* >nul`:
- `attrib`:用于修改文件或目录属性的命令。
- `-h`:删除隐藏属性。
- `-s`:删除系统属性。
- `/D`:指定 `attrib` 命令应用于目录。
- `/S`:递归地应用属性更改到所有子目录中的文件和文件夹。
- `D:\*.*`:指定 `D:` 盘根目录下的所有文件和文件夹。
- `>nul`:将命令的标准输出重定向到空设备,即不显示任何输出。
4. `echo 隐藏属性已清除。`:
打印一条消息,告知用户隐藏属性已经被清除。
5. `pause`:
暂停脚本的执行,直到用户按下任意键,这允许用户在脚本执行完成后查看结果。
相关文章:
攻防平台搭建与简易渗透工具箱编写
知识点:攻防平台搭建,虚拟机的网络模式详解,安全脚本编写 虚拟机的网络模式: 虚拟机(VM)的网络模式决定了虚拟机与宿主机以及外部网络之间的连接方式。不同的虚拟化平台(如VMware, VirtualBox,…...
SQL EXISTS 关键字的使用与理解
SQL EXISTS 关键字的使用与理解 SQL(Structured Query Language)是一种用于管理关系数据库管理系统(RDBMS)的标准编程语言。在SQL中,EXISTS关键字是一个逻辑运算符,用于检查子查询中是否存在至少一行数据。…...
开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布
项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…...
名侦探李先生第一话:谁是真正的凶手(只出现一次的数字相关题解(力扣)+位操作符回忆)
引子:我们在之前的案子中破解过基础的单身狗问题,那面对更有挑战的案子,且看李先生如何破局,那下凶手! 复习: 1,位操作符: 正整数原,反,补码都相同 首位是…...
【PA交易】BackTrader(一): 如何使用实时tick数据和蜡烛图
背景和需求 整合Tick数据是PA交易的回测与实盘基本需求。多数交易回测框架往往缺乏对大规模Tick数据直接而全面的支持。Tick数据因其体量庞大(例如,某棕榈油主力合约四年间的数据达8GB)为结合价格趋势与PA分析带来挑战,凸显了实时…...
HTML(16)——边距问题
清楚默认样式 很多标签都有默认的样式,往往我们不需要这些样式,就需要清楚默认样式 写法: 用通配符选择器,选择所有标签,清除所有内外边距选中所有的选择器清楚 *{ margin:0; padding:0; } 盒子模型——元素溢出 作…...
【Godot4自学手册】第四十二节实现拖拽进行物品交换和数量叠加
这一节我们主要学习背包系统中的物品拖拽后,物品放到新的位置,或交换物品位置,如果两个物品属于同一物品则数量相加。具体效果如下: 一、修改item.tscn场景 给item.tscn场景的根节点Item添加Label子节点,命名为Numv…...
存储系统概述
目录 层次结构 存储器的分类 存储器的编址和端模式 存储器端模式 存储器的技术指标 1. 存储容量 示例: 2. 访问速度 访问速度的表现形式: 示例: 3. 功耗 示例: 4. 可靠性 可靠性指标: 示例:…...
Trilium windows上修改笔记目录,创建多个笔记空间方法
一开始使用trilium会非常的不舒服,不像是obsidian可以创建多个笔记空间,指定多个笔记目录。这里摸索到了解决方案 修改目录的方法一 ——修改系统环境变量 打开控制面板-系统-高级系统设置 新增如上条目 修改目录的方法二——直接写bat脚本运行 新建位…...
<Rust><iced>在iced中显示gif动态图片的一种方法
前言 本文是在rust的GUI库iced中在窗口显示动态图片GIF格式图片的一种方法。 环境配置 系统:window 平台:visual studio code 语言:rust 库:iced、image 概述 在iced中,提供了image部件,从理论上说&…...
【Unity设计模式】状态编程模式
前言 最近在学习Unity游戏设计模式,看到两本比较适合入门的书,一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式,因此很值得学习 本…...
圆的面积并三角形面积并
三角形面积并 #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<vector> using namespace std; const int maxn 110; #define x first #define y second typedef pair<double, double> PDD; const d…...
Spring Data JPA介绍与CRUD实战演练
文章目录 一、Spring Data JPA 简介二、Spring Data JPA 与 MyBatis Plus 比较设计哲学和抽象层次SQL 控制学习曲线和技术要求性能与优化综合考虑 三、SpringDataJpa实战演练1. 创建user表2. 搭建Spring Boot开发环境3. pom.xml文件内容4. application.yml文件内容5. Applicati…...
Python网络爬虫实战6—下一页,模拟用户点击,切换窗口
【前期提要】感兴趣的可以看看往期文章哈~ Python网络爬虫5-实战网页爬取 Python网络爬虫4-实战爬取pdf Pyhon网络爬虫3-模拟用户点击 Python网络爬虫实战2-下载url下的pdf Python网络爬虫基础1 1.需求背景 针对长虹美菱电器说明书网页形式,编写爬虫代码ÿ…...
Notepad++插件 Hex-Edit
Nptepad有个Hex文件查看器,苦于每次打开文件需要手动开插件显示Hex,配置一下插件便可实现打开即调用 关联多个二进制文件,一打开就使用插件的方法,原来是使用空格分割!!!...
Matlab要这样批量读取txt数据!科研效率UpUp第10期
假如我们有多组txt格式的数据: 其数据格式是这样的: 想要批量读取这些数据,并把他们画在一张图上,该怎么操作呢? 之前有分享load函数的版本,本期进一步分享适用性更强的readtable函数的实现方法。 首…...
buuctf----firmware
- -一定不能再ubutu22进行,我是在18(血泪教训) binwalk安装 buuctf firmware(binwalk和firmware-mod-kit的使用)_buu firmware-CSDN博客 参考博客 指令 sudo apt-get update sudo apt-get install python3-dev python3-setuptools python3-pip zlib1g-dev libmagic-dev pi…...
ssl证书90天过期?保姆级教程——使用acme.sh实现证书的自动续期
腾讯云相关文档相关参考-有的点不准确 前言 最近https到期了,想着手动更新一下https证书,结果发现证书现在的有效期只有90天,于是想找到一个自动更新证书的工具,发现了acme.sh,但是网上的文章质量参差不齐࿰…...
由于bug造成truncate table卡住问题
客户反应truncate table卡主,检查awr发现多个truncate在awr报告期内一直没执行完,如下: 检查ash,truncate table表的等待事件都是“enq: RO - fast object reuse”和“local write wait” 查找“enq: RO - fast object reuse”&am…...
Charles抓包工具系列文章(二)-- Repeat 回放http请求
一、什么是http请求回放 当我们对客户端进行抓包,经常会想要重试http请求,或者改写原有部分进行重新请求,都需要用到回放http请求。 还有一种场景是压力测试,对一个请求进行重复请求多少次,并加上适当的并发度。 这里…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
