Commit c5a750f0 by 文周繁

feat:修改s2uzzer说明文档

parent ab9fce53
# S2fuzzer说明
# S2fuzzer说明
......@@ -70,16 +70,19 @@
### 1.S2fuzzer工具编译
按如下命令编译`s2fuzzer`工具
安装依赖
```sh
# Install clang (as required by AFL/AFLNet to enable llvm_mode)
sudo apt-get install clang llvm
# Install graphviz development
sudo apt-get install graphviz-dev libcap-dev
```
$ sudo apt update
$ sudo apt install clang llvm make
$ sudo apt install graphviz-dev libcap-dev python3-pip wireshark tshark
$ pip3 install pyshark -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
```
按如下命令编译`s2fuzzer`工具:
```sh
cd s2fuzzer
......@@ -146,18 +149,17 @@ s2fuzzer -d -i in -o out -N <server info> -x <dictionary file> -P <protocol> -D
#### 3.1 有源码程序
`Crow`为例。
`librtsp`为例。
```sh
# 获取源代码
$ git clone https://github.com/CrowCpp/Crow
$ cd Crow
# 安装依赖
$ apt install libasio-dev
# 设置编译器为高性能Clang封装和高性能Clang++封装
$ cmake . build -DCMAKE_C_COMPILER=/path/to/s2fuzzer/afl-clang-fast -DCMAKE_CXX_COMPILER=/path/to/s2fuzzer/afl-clang-fast++
$ git clone https://github.com/cijliu/librtsp
$ cd librtsp
# 设置编译器为高性能Clang封装
$ make CC=/path/to/s2fuzzer/afl-clang-fast
$ make
# 得到可执行程序/path/to/Crow/example/basic_example
# 得到可执行程序/path/to/librtsp/example/demo
```
......@@ -294,17 +296,17 @@ $ make
#define LibPath "/path/to/e9patch/afl-llvm-state-tracer/state-tracer-log.so"
// 将状态推断函数库路径修改为自定义的存放路径,也就是修改"/path/to"为自定义路径
#define LOG_FILE1 "/path/to/e9patch/symfunc.log"
// 修改"/path/to"为自定义路径
// 匹配的所有关键插桩函数,自动生成
```
###### 3.2.4.1 代码覆盖率插桩
###### 3.2.4.1 覆盖率插桩
搭配`s2fuzzer`使用,在`e9patch`目录下,使用`e9tool`工具进行代码覆盖率插桩。
```bash
/path/to/e9patch/e9tool -M 'plugin(e9AFLPlugin).match()' -P 'entry(random)@afl-rt-bk-2' ./二进制程序 -o ./插桩后的二进制程序
./e9tool -M 'plugin(e9AFLPlugin).match()' -P 'entry(random)@afl-rt-bk-2' /path/to/二进制程序 -o /path/to/插桩后的二进制程序
```
通过e9AFLPlugin代码中的match函数确定所有基本块的插桩点位,在所有的插桩点位插入afl-rt中的entry函数,每次调用时,输出信息如下:
......@@ -312,8 +314,8 @@ $ make
```bash
-----------------------------------------------
mode = Linux ELF executable
input_binary = ./二进制程序
output_binary = ./插桩后的二进制程序
input_binary = /path/to/二进制程序
output_binary = /path/to/插桩后的二进制程序
num_patched = 1464 / 1464 (100.00%)
num_patched_B1 = 1312 / 1464 (89.62%)
num_patched_B2 = 124 / 1464 (8.47%)
......@@ -349,9 +351,9 @@ memory_used = 4984KB
搭配`s2fuzzer`使用,在`e9patch`目录下,使用`e9tool`工具进行代码覆盖率+状态推断插桩。
```bash
/path/to/e9tool -M 'plugin(e9AFLPlugin).match()' -P 'entry(random)@afl-rt-bk-2' \
./e9tool -M 'plugin(e9AFLPlugin).match()' -P 'entry(random)@afl-rt-bk-2' \
-M 'plugin(funcMatch).match()' -P 'state_tracer(state,asm,size,offset)@afl-rt-bk-2' \
./二进制程序 -o ./插桩后的二进制程序
/path/to/二进制程序 -o /path/to/插桩后的二进制程序
```
输出信息如下:
......@@ -359,8 +361,8 @@ memory_used = 4984KB
```bash
-----------------------------------------------
mode = Linux ELF executable
input_binary = ./二进制程序
output_binary = ./插桩后的二进制程序
input_binary = /path/to/二进制程序
output_binary = /path/to/插桩后的二进制程序
num_patched = 9263 / 9263 (100.00%)
num_patched_B1 = 8338 / 9263 (90.01%)
num_patched_B2 = 658 / 9263 (7.10%)
......@@ -417,15 +419,13 @@ s2fuzzer -d -i /path/to/in -o out -N tcp://127.0.0.1/2200 -t 1500+ -m none -D 1
#### 4.3 运行S2fuzzer模糊测试
```sh
# 以Crow为例,编译生成的可执行程序为:basic_example
$ cd /path/to/Crow/example/
$ /path/to/s2fuzzer -d -i -m none -d -i /path/to/Crow-in-replay/ -o ./output -N tcp://127.0.0.1/18080 -D 10000 -q 3 -s 3 -E -K -R ./basic_example
# 以librtsp为例,编译生成的可执行程序为:demo
$ cd /path/to/librtsp/example/
$ /path/to/s2fuzzer -m none -d -i /path/to/librtsp-in-replay/ -o ./output -N tcp://127.0.0.1/8554 -D 10000 -q 3 -s 3 -K -R ./demo
# 注意将以上命令中的 /path/to 改为自定义的路径
```
![image-20250624175300187](./images/image-20250624175300187.png)
![image-20250704155816637](./images/image-20250704155816637.png)
### 5.输出文件说明
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment