client

package
v0.0.0-...-6eb8e6c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 4, 2022 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RunFuzzerForever

func RunFuzzerForever(fuzzer *Fuzzer, serverClient *RovingServerClient, syncInterval time.Duration)

RunFuzzerForever kicks off a fuzzer. It constructs all of the necessary output and input dirs, as well as the machinery needed to upload the fuzzer's state to the server.

func SetupAndRun

func SetupAndRun(conf types.ClientConfig, workdir string, isNewRun bool)

SetupAndRun runs a fleet of fuzzers. It constructs and starts all of the individual fuzzers, as well as the fleet's monitoring and synchronization machinery.

Types

type Fuzzer

type Fuzzer struct {
	Id string
	// contains filtered or unexported fields
}

Fuzzer runs an AFL fuzzer by shelling out to `afl-fuzz`. It keeps track of the fuzzer's process, and of its progress using an AflFileManager.

func (*Fuzzer) ReadState

func (f *Fuzzer) ReadState() (types.State, error)

ReadState returns the State of the Fuzzer.

type QueueDownloader

type QueueDownloader struct {
	Interval time.Duration
	Server   *RovingServerClient
	// contains filtered or unexported fields
}

QueueDownloader periodically downloads the queues of all the fuzzers in the roving cluster from the server. It writes them to disk using the FleetFileManager. Because all clients on a client machine share the same FleetFileManager, we only need to run 1 QueueDownloader per client machin.

type RovingServerClient

type RovingServerClient struct {
	// contains filtered or unexported fields
}

RovingServerClient is a wrapper around the roving server API. It is used for communicating between client and server. The roving client uses it for operations like uploading its state and downloading the cluster's queues.

func NewRovingServerClient

func NewRovingServerClient(hostport string) *RovingServerClient

NewRovingServerClient builds a RovingServerClient that points at the given hostport. It uses sane HTTP Client defaults, specified at the top of this file (server_client.go).

func (*RovingServerClient) FetchDict

func (s *RovingServerClient) FetchDict() ([]byte, error)

FetchDict fetches the dict of key tokens, if appropriate

func (*RovingServerClient) FetchFuzzerConfig

func (s *RovingServerClient) FetchFuzzerConfig() (*types.FuzzerConfig, error)

FetchFuzzerConfig fetches the target's metadata, including whether the client should download the target and what command it should use to run it.

func (*RovingServerClient) FetchInputs

func (s *RovingServerClient) FetchInputs() (*types.InputCorpus, error)

FetchInputs fetches the inputs that AFL uses to bootstrap fuzzing.

func (*RovingServerClient) FetchQueues

func (s *RovingServerClient) FetchQueues() (*map[string]*types.InputCorpus, error)

FetchQueues fetches all of the queues in the roving cluster. It returns them as a map from fuzzerId => *InputCorpus.

func (*RovingServerClient) FetchTargetBinary

func (s *RovingServerClient) FetchTargetBinary(file string) error

FetchTargetBinary fetches the target binary, if appropriate

func (*RovingServerClient) UploadState

func (s *RovingServerClient) UploadState(state types.State) error

UploadState uploads the given State

type StateUploader

type StateUploader struct {
	Interval time.Duration
	Fuzzer   *Fuzzer
	Server   *RovingServerClient
}

StateUploader periodically uploads a fuzzer's state to the remote server. We need to run a separate StateUploader for each fuzzer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL