Featured image of post Patch

Patch

Write-up do desafio “Patch”, analisando strings, metadados e funções internas do binário até a execução da rotina que revela a flag.

Enunciado

Você sabe como faz um patch?

👉 Clique para baixar o arquivo patch

Objetivo

O objetivo deste desafio era localizar e analisar as funções do arquivo patch para identificar a rotina responsável pela geração da flag.

Solução

Metadados

Verifiquei os metadados do binário em busca de dicas ou incongruências; não encontrei nada relevante.

Metadados

Strings legíveis

Listei as strings legíveis do arquivo para procurar pistas. Encontrei uma frase e duas palavras que não apontavam diretamente para a flag. A única associação óbvia foi entre “derrota” e a string “Boa sorte da próxima”.

Strings Input

Strings Output

Verificando as funções do programa

Ao revisar as funções do programa, ficou claro que as palavras encontradas nas strings faziam parte do fluxo do código. Isso sugeriu que as funções derrota() e vitoria() seriam relevantes, provavelmente vitoria() retornaria a flag.

Funções Input

Funções Output

Executando as funções

Inicialmente tentei executar as funções em modo de debug, mas recebi um erro por falta de permissão. Após ajustar as permissões/ambiente (permitindo o debug/execução), consegui chamar as funções.

Erro Execução

Ativa Permissão

Tive que lidar com o tipo de retorno desconhecido das funções; para contornar isso, tratei o retorno como void temporariamente para forçar a execução. Ao executar:

  • derrota() imprimiu a mesma frase encontrada nas strings legíveis;
  • vitoria() retornou a flag buscada.

Execução Sucesso

Interpretação / explicação

A função derrota() apenas devolve a string armazenada “crua” no binário, por isso já aparecia listada nas strings legíveis. Já a função vitoria() aparentemente realiza um processo de decodificação sobre um dado previamente armazenado; ao executar essa rotina, a flag é revelada.

Análise da Função

Criado com Hugo
Tema Stack desenvolvido por Jimmy