
Esta é a edição comunitária do framework de fuzzing de protocolos do GitLab. Este framework é baseado no Peach Fuzzer Professional com alguns recursos removidos.
:toc:
= GitLab Protocol Fuzzer Community Edition
Este projeto é baseado no Peach Fuzzer Professional v4, que foi https://about.gitlab.com/press/releases/2020-06-11-gitlab-acquires-peach-tech-and-fuzzit-to-expand-devsecops-offering.html[adquirido pela GitLab] em 2020. Algumas funcionalidades do Peach Fuzzer Professional foram removidas e serão disponibilizadas como parte do GitLab no futuro. Este projeto substitui os projetos Peach Fuzzer Community hospedados no GitLab e também no Source Forge.
Como este código foi originalmente desenvolvido pela Peach Tech, pode haver referências em todo o repositório a pessoal, endereços de e-mail, sites ou capacidades específicas da Peach Tech. Elas serão atualizadas ao longo do tempo para se referirem ao GitLab. Se encontrar alguma, sinta-se à vontade para abrir um MR para pedir esclarecimentos e/ou atualizá-la.
Por favor, siga as instruções de compilação local até que os binários estejam disponíveis.
== Estrutura do Repositório
build::
Scripts de compilação para compilar o repositório.
Isso inclui o waf (sistema de compilação usado pelo Peach),
templates asciidoctor e vários scripts usados pelo Jenkins
para compilações de integração.
core::
Classes e interfaces comuns entre o Peach OSS e o Peach fechado.
docs::
Toda a documentação para o guia do usuário, guia do desenvolvedor e guias de teste.
packer::
O template e os scripts usados pelo packer (https://packer.io) para gerar
a AMI de teste hospedada e a OVA de teste on-premise.
pro::
O código-fonte do Peach Professional e dos aplicativos e testes associados.
tools::
Scripts necessários para a compilação (lançador nunit e gerador de *.exe.config).
== Fluxo de Trabalho Git
Os scripts de compilação esperam que todas as mensagens de commit sigam um conjunto de regras.
As mensagens DEVEM começar com um dos seguintes prefixos:
new: chg: fix: dev:.
Nenhum commit de merge é permitido, e é recomendado que todos os PRs
sejam squashados em um único commit.
A primeira linha da mensagem de commit é usada para gerar automaticamente o changelog voltado para o cliente.
As linhas subsequentes da mensagem de commit podem conter qualquer coisa e são ignoradas durante a geração do changelog.
Se a mensagem de commit começar com dev:, o commit será omitido do changelog.
Os outros commits são categorizados como novo, alterado ou corrigido.
== Instruções de Compilação Local
O Peach suporta compilação em computadores Windows, Linux e OSX. O Peach usa o waf (https://waf.io/) como seu sistema de compilação. O Waf suporta a ideia de 'variantes de compilação', que é usada para compilar o Peach para várias plataformas e arquiteturas.
O Peach usa 11 variantes de compilação diferentes:
Windows::
win_x86_debug win_x86_release win_x64_debug win_x64_release
Linux::
linux_x86_debug linux_x86_release linux_x86_64_debug linux_x86_64_release
OSX::
osx_debug osx_release
Documentação::
doc
O Waf compila fora da árvore, ou seja, os arquivos intermediários e binários de saída
são colocados em um diretório diferente do código-fonte.
Para a compilação do Peach, os arquivos intermediários são colocados no diretório slag/{variant}
e são instalados no diretório output/{variant}.
O Waf procura por arquivos wscript_build em todos os subdiretórios da raiz
e executa o que estiver neles. Para a maioria dos arquivos wscript_build de nível superior,
eles normalmente contêm apenas a próxima lista de subdiretórios nos quais recorrer.
=== Pré-requisitos de compilação no Windows:
Adicione as seguintes duas entradas de registro via PowerShell:
=== Pré-requisitos de compilação no Linux:
=== Comandos de Compilação
Os comandos mínimos necessários para compilar o Peach são mostrados abaixo:
waf configure::
Este é o primeiro passo que deve ser executado para compilar o Peach.
Este passo é análogo à fase autoconf da compilação de bibliotecas Linux. +
+
O Waf tentará localizar todas as dependências de compilação e salvará seus caminhos.
Se uma dependência de compilação não puder ser localizada para uma variante específica,
a variante de compilação será marcada como não suportada.
Isso pode ser útil se você quiser compilar apenas para linux_x86_64, mas não quiser compilar a documentação. +
+
A fase de configuração executará o programa Paket (https://fsprojects.github.io/Paket/) e buscará
todas as dependências de terceiros do nuget usando os requisitos listados em paket/paket.dependencies. +
+
NOTA: waf configure só precisa ser executado uma vez.
Para o fluxo de trabalho normal do desenvolvedor de modificar as fontes do Peach, você não
precisará executar este comando. No entanto, se você fizer alterações nos scripts de compilação
(localizados no diretório build, ou se alterar o conjunto instalado de ferramentas de compilação,
precisará executar novamente este comando para que o caminho atualizado da ferramenta seja resolvido. +
+
DICA: Se ocorrer um erro porque uma ferramenta necessária não pode ser localizada, tente
executar novamente com verbosidade aumentada. waf configure -v exibirá
cada dependência que está sendo localizada, bem como o caminho completo onde é detectada. +
+
A fase de configuração também é como a compilação de integração define o número da versão.
Executando waf configure --buildtag=4.3.100, todos os artefatos compilados serão
carimbados com o buildtag especificado. Se nenhuma opção for especificada, o buildtag
padrão é 0.0.0.
waf build::
Este é o comando que compilará todos os bits no repositório.
A compilação inclui gerar arquivos com versão,
executar qualquer transpilação de código-fonte,
compilar o código-fonte e vincular os resultados. +
+
Este comando é análogo a executar make no Linux. +
+
Todos os artefatos da fase de compilação terminarão no diretório slag/{variant}.
waf install::
Este comando instala as saídas do programa, bem como todas as dependências de biblioteca, no diretório output/{variant}. +
+
Este comando é análogo a executar make install no Linux. +
+
O fluxo de trabalho usual do desenvolvedor para Linux é executar waf install --variant=linux_x86_64_debug
e então executar ./output/linux_x86_64_debug/bin/peach.
=== Comandos de Compilação Opcionais
waf pkg::
Isso gera os zips do instalador.
Para o Peach, há dois zips, um para uso interno (execução de testes unitários/testes de integração)
e um para uso externo (upload para o site de download).
Os dois zips vão para a pasta output/{variant}/pkg.
Por fim, este comando waf criará o zip do servidor de licenças local.
waf test::
Executa todos os testes unitários. Para executar testes unitários para a variante debug x64 do Windows, você pode executar
waf test --variant=win_x64_debug.
waf msvs2017::
Cria todos os arquivos .csproj e o arquivo Peach.sln para uso com o Visual Studio 2017.
waf zip:: Compacta todas as saídas da fase de instalação em um único artefato.
=== Notas sobre o Waf