Skip to content

Commit 2c30790

Browse files
committed
修改部分文章摘要及相关配置
1 parent 8655270 commit 2c30790

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+2736
-3144
lines changed

src/.vuepress/theme.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export default hopeTheme({
9292
link: "https://echo0d.github.io/",
9393
},
9494
},
95-
blog: true,
95+
blog: { excerptLength: 0 },
9696
},
9797
blog: {
9898
avatar: "logo.jpg",

src/CodeAudittutorial/1-JavaBase/1-FileSystem.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,28 @@ category: 代码审计
33
tag: Java
44
---
55

6+
# 1-Java 代码审计基础-文件系统
67

7-
# 1-Java代码审计基础-文件系统
8+
<!-- more -->
89

9-
## 1、Java文件系统
10+
## 1、Java 文件系统
1011

11-
在Java语言中对文件的任何操作最终都是通过`JNI`调用`C语言`函数实现的。Java SE中内置了两类文件系统`java.io``java.nio``java.nio`的实现是`sun.nio`
12+
在 Java 语言中对文件的任何操作最终都是通过`JNI`调用`C语言`函数实现的。Java SE 中内置了两类文件系统`java.io``java.nio``java.nio`的实现是`sun.nio`
1213

13-
Java为了能够实现跨操作系统对文件进行操作抽象了一个叫做文件系统的对象:`java.io.FileSystem`,不同的操作系统有不一样的文件系统,例如`Windows``Unix`就是两种不一样的文件系统: `java.io.UnixFileSystem``java.io.WinNTFileSystem`,不同的操作系统只需要实现起抽象出来的文件操作方法即可实现跨平台的文件操作
14+
Java 为了能够实现跨操作系统对文件进行操作抽象了一个叫做文件系统的对象:`java.io.FileSystem`,不同的操作系统有不一样的文件系统,例如`Windows``Unix`就是两种不一样的文件系统: `java.io.UnixFileSystem``java.io.WinNTFileSystem`,不同的操作系统只需要实现起抽象出来的文件操作方法即可实现跨平台的文件操作
1415

15-
`FileSystem`类的对象表示Java程序中的文件系统`FileSystem`对象用于执行两个任务:
16+
`FileSystem`类的对象表示 Java 程序中的文件系统`FileSystem`对象用于执行两个任务:
1617

17-
- Java程序和文件系统之间的接口
18+
- Java 程序和文件系统之间的接口
1819
- 一个工厂,它用于创建许多类型的文件系统相关对象和服务。
1920

20-
## 2、Java读写文件的方式举例
21+
## 2、Java 读写文件的方式举例
2122

22-
### 2.1 FileWriter和FileReader
23+
### 2.1 FileWriter 和 FileReader
2324

2425
> 对文件内容按字符读取
2526
26-
这种方式可以修改27行`new char[]`的长度,读取特定长度的字符。
27+
这种方式可以修改 27 行`new char[]`的长度,读取特定长度的字符。
2728

2829
```java
2930
import java.io.File;
@@ -64,11 +65,11 @@ public class FileWriterTest {
6465
}
6566
```
6667

67-
### 2.2 BuffredReader和BufferedWriter
68+
### 2.2 BuffredReader 和 BufferedWriter
6869

6970
> 对文件内容进行整行读取
7071
71-
通过修改下面25行`int readLine`,即可修改想要读取的行数。
72+
通过修改下面 25 行`int readLine`,即可修改想要读取的行数。
7273

7374
```java
7475
import java.io.*;
@@ -110,7 +111,7 @@ public class BuffredReaderTest {
110111

111112
```
112113

113-
### 2.3 FileInputStream和FileOutputStream
114+
### 2.3 FileInputStream 和 FileOutputStream
114115

115116
> 以字节的形式写入文件,读取文件时先读取字节数组,再将字节数组转换为字符串形式
116117
@@ -157,8 +158,6 @@ public class FileInputStreamTest {
157158

158159
### 2.4 RandomAccessFile
159160

160-
161-
162161
```java
163162
import java.io.*;
164163

@@ -235,4 +234,3 @@ public class FileSystemProviderTest {
235234
}
236235

237236
```
238-

src/CodeAudittutorial/1-JavaBase/2-commandExecute.md

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ category: 代码审计
33
tag: Java
44
---
55

6-
# 2-Java代码审计基础-命令执行
6+
# 2-Java 代码审计基础-命令执行
77

8-
Java调用外部可执行程序或系统命令,主要有以下两种调用方式
8+
<!-- more -->
9+
10+
Java 调用外部可执行程序或系统命令,主要有以下两种调用方式
911

1012
```java
1113
1Runtime.getRuntime().exec
@@ -17,11 +19,11 @@ Java调用外部可执行程序或系统命令,主要有以下两种调用方
1719

1820
### 1.1 简介
1921

20-
`Runtime.getRuntime().exec`用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。功能和windows“运行”类似。
22+
`Runtime.getRuntime().exec`用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。功能和 windows“运行”类似。
2123

2224
- `Runtime`是一个单例的实例
2325
- `Runtime`运行应用程序与运行应用程序的环境进行交互
24-
- `Runtime`是Java运行时环境,应用程序不能创建属于自己的实例,需要通过`getRuntime()`方法获取
26+
- `Runtime`是 Java 运行时环境,应用程序不能创建属于自己的实例,需要通过`getRuntime()`方法获取
2527

2628
调用方式如下:
2729

@@ -33,15 +35,11 @@ private Process exec(String command) throws IOException {
3335
}
3436
```
3537

36-
`command`是要执行的命令,`Runtime.getRuntime()`返回当前应用程序的`Runtime`对象,该对象的`exec()`方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的`Process`对象实例。通过`Process`可以控制该子进程的执行或获取该子进程的信息。`Procss`类将持有该程序返回Java VM的引用。这个`Procss`类是一个抽象类,具体子类的实现依赖于不同的底层操作系统。
38+
`command`是要执行的命令,`Runtime.getRuntime()`返回当前应用程序的`Runtime`对象,该对象的`exec()`方法指示 Java 虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的`Process`对象实例。通过`Process`可以控制该子进程的执行或获取该子进程的信息。`Procss`类将持有该程序返回 Java VM 的引用。这个`Procss`类是一个抽象类,具体子类的实现依赖于不同的底层操作系统。
3739

3840
> `Runtime.exec()`不是`cmd``shell`环境,因此无法直接调用`dir`等命令,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器(NT:cmd.exe,windows 95/98:command.exe,linux:/bin/sh)
3941
40-
41-
42-
43-
44-
### 1.2 方法API
42+
### 1.2 方法 API
4543

4644
`Runtime.getRuntime().exec`共有六个重载方法:
4745

@@ -53,8 +51,8 @@ private Process exec(String command) throws IOException {
5351
6. `public Process exec(String[] cmdarray, String[] envp, File dir)`// 在指定环境和工作目录的独立进程中执行指定的命令和变量
5452

5553
`cmdarray`:包含所调用命令及其参数的数组。数组第一个元素是命令,其余是参数
56-
`envp`:字符串数组,其中每个元素的环境变量的设置格式为 name=value,如果子进程应该继承当前进程的环境,则该参数为null
57-
`dir`:子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为null
54+
`envp`:字符串数组,其中每个元素的环境变量的设置格式为 name=value,如果子进程应该继承当前进程的环境,则该参数为 null
55+
`dir`:子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为 null
5856

5957
参数`cmdArray`示例:
6058

@@ -119,15 +117,13 @@ public class RuntimeTest {
119117

120118
```
121119

122-
123-
124120
## 2、ProcessBuilder
125121

126122
### 2.1 简介
127123

128-
`ProcessBuilder`类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法,是J2SE 1.5在`java.lang`中新添加的一个新类,之前都是由Process类处理实现进程的控制管理
124+
`ProcessBuilder`类用于创建操作系统进程,它提供一种启动和管理进程(也就是应用程序)的方法,是 J2SE 1.5 在`java.lang`中新添加的一个新类,之前都是由 Process 类处理实现进程的控制管理
129125

130-
每个`ProcessBuilder`实例管理一个进程属性集合。`start()`方法使用这些属性创建一个新的流程实例。可以从同一个实例多次调用start()方法,以创建具有相同或相关属性的新子进程。`ProcessBuilder`的构造方法接收一个命令参数的数组形式,其中,第一个元素代表要执行的系统命令,后面的元素代表要传给该命令的参数。
126+
每个`ProcessBuilder`实例管理一个进程属性集合。`start()`方法使用这些属性创建一个新的流程实例。可以从同一个实例多次调用 start()方法,以创建具有相同或相关属性的新子进程。`ProcessBuilder`的构造方法接收一个命令参数的数组形式,其中,第一个元素代表要执行的系统命令,后面的元素代表要传给该命令的参数。
131127

132128
例如
133129

@@ -167,7 +163,7 @@ public class ProcessBuilderTest {
167163

168164
```
169165

170-
test.py如下
166+
test.py 如下
171167

172168
```python
173169
import os
@@ -177,34 +173,34 @@ def runcmd(cmd):
177173
return result
178174

179175
if __name__ == '__main__':
180-
result = runcmd("calc")
176+
result = runcmd("calc")
181177
print(result)
182178
```
183179

184180
运行结果
185181

186182
![image-20231017224619085](./img/2-commandExecute/image-20231017224619085.png)
187183

188-
或者cmd改成ipconfig
184+
或者 cmd 改成 ipconfig
189185

190186
![image-20231017231030708](./img/2-commandExecute/image-20231017231030708.png)
191187

192-
### 2.2 方法API
188+
### 2.2 方法 API
193189

194190
构造方法
195191

196-
- `ProcessBuilder(List<String> command) `利用指定的操作系统程序和参数构造一个进程生成器。
192+
- `ProcessBuilder(List<String> command) `利用指定的操作系统程序和参数构造一个进程生成器。
197193
- `ProcessBuilder(String… command) `利用指定的操作系统程序和参数构造一个进程生成器。
198194

199-
- 方法摘要
195+
- 方法摘要
200196
`command() `返回此进程生成器的操作系统程序和参数。设置此过程构建器的操作系统程序和参数。此方法不会复制命令列表。该列表的后续更新将反映在流程构建器的状态中。不检查命令是否对应于有效的操作系统命令。
201-
- `command(List<String> command) `设置此进程生成器的操作系统程序和参数。
202-
- `command(String… command) `设置此进程生成器的操作系统程序和参数。
203-
- `directory() `返回此进程生成器的工作目录。
204-
- `directory(File directory) `设置此进程生成器的工作目录。
205-
- `environment() `返回此进程生成器环境的字符串映射视图。 environment方法获得运行进程的环境变量,得到一个Map,可以修改环境变量
206-
- `redirectErrorStream() `通知进程生成器是否合并标准错误和标准输出。如果该属性为真,则由该对象的`start()`方法启动的子进程生成的任何错误输出都将与标准输出合并,以便两者都可以使用`Process.getInputStream()`方法读取。这使得将错误消息与相应的输出关联起来更容易,而从 `Process.getErrorStream()`返回的流读取将直接到达文件尾,初始值为false
207-
- `redirectErrorStream(boolean redirectErrorStream) `设置此进程生成器的 redirectErrorStream 属性。
197+
- `command(List<String> command) `设置此进程生成器的操作系统程序和参数。
198+
- `command(String… command) `设置此进程生成器的操作系统程序和参数。
199+
- `directory() `返回此进程生成器的工作目录。
200+
- `directory(File directory) `设置此进程生成器的工作目录。
201+
- `environment() `返回此进程生成器环境的字符串映射视图。 environment 方法获得运行进程的环境变量,得到一个 Map,可以修改环境变量
202+
- `redirectErrorStream() `通知进程生成器是否合并标准错误和标准输出。如果该属性为真,则由该对象的`start()`方法启动的子进程生成的任何错误输出都将与标准输出合并,以便两者都可以使用`Process.getInputStream()`方法读取。这使得将错误消息与相应的输出关联起来更容易,而从 `Process.getErrorStream()`返回的流读取将直接到达文件尾,初始值为 false
203+
- `redirectErrorStream(boolean redirectErrorStream) `设置此进程生成器的 redirectErrorStream 属性。
208204
- `start()`使用此进程生成器的属性启动一个新进程。
209205

210206
完整例子:
@@ -241,4 +237,3 @@ public class ProcessBuilderTest {
241237
}
242238
}
243239
```
244-

0 commit comments

Comments
 (0)