Documentation ¶
Index ¶
- func RunFuzzerForever(fuzzer *Fuzzer, serverClient *RovingServerClient, syncInterval time.Duration)
- func SetupAndRun(conf types.ClientConfig, workdir string, isNewRun bool)
- type Fuzzer
- type QueueDownloader
- type RovingServerClient
- func (s *RovingServerClient) FetchDict() ([]byte, error)
- func (s *RovingServerClient) FetchFuzzerConfig() (*types.FuzzerConfig, error)
- func (s *RovingServerClient) FetchInputs() (*types.InputCorpus, error)
- func (s *RovingServerClient) FetchQueues() (*map[string]*types.InputCorpus, error)
- func (s *RovingServerClient) FetchTargetBinary(file string) error
- func (s *RovingServerClient) UploadState(state types.State) error
- type StateUploader
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.
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.