OpenCyber Academy
Tecnólogo · Capítulo 3 · Português
Código do curso: OCA-086Capítulo 03: OCA-086-C003

Capítulo 3 — Fundamentos de programação

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Mapa da aula

Aula 03 publicada. Mapa, exemplo, EX007.

flowchart TD
  N0["3.1 Por que tecnólogos escrevem scripts"]
  N1["3.2 Somente leitura por padrão"]
  N2["3.3 Saída clara"]
  N3["3.4 Biblioteca padrão primeiro"]
  N4["3.5 Controle de versão"]
  N5["3.6 Testes"]
  N6["3.7 Comentários"]
  N7["Calculando o hash de um arquivo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX007"]

Desenho lógico

flowchart LR
  N0["3.1 Por que tecnólogos escrevem scripts"]
  N1["3.2 Somente leitura por padrão"]
  N2["3.3 Saída clara"]
  N3["3.4 Biblioteca padrão primeiro"]
  N4["3.5 Controle de versão"]
  N5["3.6 Testes"]
  N6["3.7 Comentários"]
  N7["Calculando o hash de um arquivo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX007"]
[3.1 Por que tecnólogos escrevem scripts]
    |
    v
[3.2 Somente leitura por padrão]
    |
    v
[3.3 Saída clara]
    |
    v
[3.4 Biblioteca padrão primeiro]
    |
    v
[3.5 Controle de versão]
    |
    v
[3.6 Testes]
    |
    v
[3.7 Comentários]
    |
    v
[Calculando o hash de um arquivo]
    |
    v
[Exemplo resolvido] --> [Exercício EX007]

Objetivos de aprendizagem

Você vai (1) escrever pequenos scripts em Python com segurança; (2) ler arquivos sem modificá-los; (3) imprimir saídas claras e verificáveis; (4) usar controle de versão para scripts usados em investigações.

3.1 Por que tecnólogos escrevem scripts

Investigações repetem tarefas: calcular o hash de muitos arquivos, filtrar logs, comparar listas. Scripts tornam o trabalho mais rápido e repetível, mas só se estiverem corretos e registrados. A repetibilidade importa sobretudo quando alguém contesta um resultado. Se Jonah calcula à mão o hash de duzentos arquivos e comete um erro de digitação, ninguém consegue dizer qual resumo está errado. Um script executado duas vezes sobre a mesma entrada dá a mesma saída, e um revisor pode ler exatamente o que ele fez. O custo é que um script errado erra todas as vezes, por isso o teste vem primeiro.

3.2 Somente leitura por padrão

Abra os arquivos de evidência no modo de leitura binária ("rb"). Grave as saídas numa pasta separada. Nunca "conserte" um arquivo de evidência. O modo binário também evita a tradução de quebras de linha em alguns sistemas, que alteraria os bytes vistos pela função de hash. Jonah mantém a evidência numa pasta e as saídas em outra, e nunca aponta o caminho de saída de um script para a pasta de evidências. Se um script precisa criar arquivos temporários, eles também vão para a pasta de saída, para que a cópia da evidência continue exatamente como foi recebida.

3.3 Saída clara

Imprima o que foi processado, quantos itens e quaisquer erros. Um script silencioso, que não imprime nada quando falha, é perigoso. O script de listagem melhorado de Jonah mostra a forma: ele informa quantos arquivos listou, quantos não conseguiu abrir e o caminho de cada falha. Assim, quem lê pode conferir os totais com a pasta e ver na hora se algo ficou de fora. Um script que relata sucesso sem contagens não dá nenhum meio de perceber que metade da pasta foi pulada.

3.4 Biblioteca padrão primeiro

A biblioteca padrão do Python cobre hashing (hashlib), CSV (csv), JSON (json), datas (datetime), expressões regulares (re) e manipulação de arquivos (os, pathlib). Usá-la evita instalar pacotes extras em máquinas sensíveis. Numa estação de trabalho da prefeitura ou numa máquina de evidências, instalar pacotes significa baixar código de fora, o que altera o sistema e acrescenta software cujo comportamento não foi revisado. A função de hash de Jonah usa apenas hashlib e lê os arquivos em blocos, por isso roda em qualquer máquina com Python 3 e dá resultados que outro analista pode reproduzir sem um conjunto igual de pacotes.

3.5 Controle de versão

Os scripts ficam num repositório; cada mudança tem uma mensagem. Os relatórios citam a versão usada. Para Jonah, isso significa que cada script usado num caso é registrado num commit antes de ser executado, e o identificador do commit é anotado nas notas do caso ao lado da saída. Se o script mudar depois, qualquer pessoa pode voltar à versão exata que produziu um achado. Um script passado adiante por e-mail ou editado no lugar não deixa registro do que de fato rodou. Renata também pede, em cada commit, uma mensagem curta que diga por que a mudança foi feita.

3.6 Testes

Execute os scripts sobre entradas sintéticas com respostas conhecidas antes de usá-los em dados do caso. A função de hash de Jonah foi conferida com uma segunda ferramenta em cinco arquivos sintéticos e num arquivo vazio, e os arquivos e os resumos esperados foram guardados no repositório. O arquivo vazio é um caso-limite proposital: ele revela erros no modo como uma função lida com a leitura de zero bytes. Os testes são executados de novo após cada mudança, para que uma edição posterior não quebre um resultado em silêncio. Um teste que passa em dados sintéticos mostra que o script funciona como pretendido; não mostra que a evidência está completa.

3.7 Comentários

Um comentário curto explica o porquê, não o quê: "o modo binário evita a tradução de quebras de linha". Bons comentários registram decisões que um leitor poderia questionar: por que um arquivo é lido em blocos, por que uma falha é registrada em vez de levantar uma exceção, por que um campo é tratado como UTC. Renata revisa os scripts de Jonah lendo primeiro os comentários; onde falta um comentário, ela faz a pergunta que ele deveria ter respondido, e a resposta vira o comentário. Comentários que só repetem o código não acrescentam nada e ficam desatualizados quando o código muda.

Calculando o hash de um arquivo

Uma função curta abre um arquivo no modo binário, lê seu conteúdo em blocos para hashlib.sha256() e devolve o resumo em hexadecimal. Jonah a testa contra uma segunda ferramenta em cinco arquivos sintéticos e num arquivo vazio, confirmando resultados idênticos antes de usá-la. Ele guarda os arquivos de teste e os resumos esperados no repositório para que qualquer pessoa possa refazer a conferência depois de mudanças. Quando um colega edita a função mais tarde, o teste guardado mostra imediatamente se os resultados ainda conferem.

Exemplo resolvido

O primeiro script de Jonah lista os arquivos de uma pasta com seus tamanhos. Renata pergunta o que acontece se um arquivo não puder ser aberto. O script quebra. Ele acrescenta um tratamento de erro que registra "permission denied: caminho" e continua, e depois imprime os totais: 211 listados, 1 erro.

Caso sintético. A pasta é inventada.

Erros e limites

Um script reflete as suposições de quem o escreveu; a revisão por pares pega as suposições que o autor não consegue ver.

Exercícios

Síntese

Scripts somente leitura, verbosos, testados e versionados são ferramentas investigativas seguras.

Continue estudando — capítulo 03 de 30

← Capítulo 02 (rascunho) · Índice de capítulos do curso · Capítulo 04 (rascunho) →

Respostas comentadas

EX007. Modo de leitura binária ("rb"), para que nada seja gravado e nenhuma tradução de quebra de linha ou de codificação altere os bytes lidos.

EX008. Os erros passam despercebidos, e resultados incompletos são tratados como completos.

EX009. Ele registrou "permission denied" com o caminho, continuou com os demais arquivos e imprimiu os totais: 211 listados e 1 erro.