Analisando propostas

Engenharia Inversa

Publicado em 12 de Março de 2019 dias na TI e Programação

Sobre este projeto

Aberto

Foi obtido um arquivo binário executável que, após sua execução, mostra um texto com um código numérico. Este código é gerado a partir de uma string de texto armazenada no próprio binário.  Depois de listar o código asm, o arquivo binário foi excluído e não é possível acessá-lo, apenas o código asm copiado no final do exercício.

É  Necessário ser capaz de reutilizar o referido algoritmo de geração de código, e é por isso que o trabalho de engenharia reversa é necessário para analisar o binário e reconstruir o código fonte de tal maneira que ele possa ser modificado e recompilado corretamente.


Pretendemos que:

divida o código em blocos básicos.
(Leve em conta as quebras existentes dentro da função e divida as linhas em blocos básicos de código.)

Faça o diagrama de fluxo com os blocos básicos. 
(Uma vez que os blocos básicos do exercício anterior tenham sido obtidos, execute o fluxograma juntando os blocos básicos com setas.)


Existe alguma estrutura de controle?
Indica quais blocos básicos estão envolvidos.

Converta o código completo da função para o código C. 
Com o que você aprendeu sobre a reconstrução de código, converta essa função main () em código C. Em <+36> o endereço da string indicada em negrito é carregado em eax.

"3jd9cjfk98hnd"
Em <+110> o endereço da string indicada em vermelho é carregado em eax "[+] Código gerado:% i \ n"

Compile o código gerado e indique o código resultante após sua execução.
Compile em 32bits adicionando a opção -m32 como indicado no seguinte comando:  $ gcc source.c -o source -m32  Uma vez executado, um texto aparecerá na tela, indicando o texto completo.

Modifique o código fonte em C, para que ele gere um novo código a partir de outra string.
Modifique a string <+36> no código C, pela seguinte string: "Parabéns!"  Compile o código C, execute e indique o texto completo obtido.
















Código asm – x86 32 bits
dump of assembler code for function main:
0x0000054d <+0>: lea ecx,[esp+0x4]
0x00000551 <+4>: and esp,0xfffffff0
0x00000554 <+7>: push dword ptr [ecx-0x4]
0x00000557 <+10>: push ebp
0x00000558 <+11>: mov ebp,esp
0x0000055a <+13>: push ebx
0x0000055b <+14>: push ecx
0x0000055c <+15>: sub esp,0x10
0x0000055f <+18>: call 0x450 <__x86.Get_pc_thunk.bx>
0x00000564 <+23>: add ebx,0x1a9c
0x0000056a <+29>: mov dword ptr [ebp-0x10],0x0
0x00000571 <+36>: lea eax,[ebx-0x19a0] ; “3jd9cjfk98hnd”
0x00000577 <+42>: mov dword ptr [ebp-0x14],eax
0x0000057a <+45>: sub esp,0xc
0x0000057d <+48>: push dword ptr [ebp-0x14]
0x00000580 <+51>: call 0x3e0 <strlen@plt>
0x00000585 <+56>: add esp,0x10
0x00000588 <+59>: mov dword ptr [ebp-0x18],eax
0x0000058b <+62>: mov dword ptr [ebp-0xc],0x0
0x00000592 <+69>: jmp 0x5ad <main+96>
0x00000594 <+71>: mov edx,dword ptr [ebp-0xc]
0x00000597 <+74>: mov eax,dword ptr [ebp-0x14]
0x0000059a <+77>: add eax,edx
0x0000059c <+79>: movzx eax,byte ptr [eax]
0x0000059f <+82>: movsx eax,al
0x000005a2 <+85>: imul eax,dword ptr [ebp-0x18]
0x000005a6 <+89>: add dword ptr [ebp-0x10],eax
0x000005a9 <+92>: add dword ptr [ebp-0xc],0x1
0x000005ad <+96>: mov eax,dword ptr [ebp-0xc]
0x000005b0 <+99>: cmp eax,dword ptr [ebp-0x18]
0x000005b3 <+102>: jl 0x594 <main+71>
0x000005b5 <+104>: sub esp,0x8
0x000005b8 <+107>: push dword ptr [ebp-0x10]
0x000005bb <+110>: lea eax,[ebx-0x1992] ; “[+] codigo generado: %i\n”
0x000005c1 <+116>: push eax
0x000005c2 <+117>: call 0x3d0 <printf@plt>
0x000005c7 <+122>: add esp,0x10
0x000005ca <+125>: mov eax,0x0
0x000005cf <+130>: lea esp,[ebp-0x8]
0x000005d2 <+133>: pop ecx
0x000005d3 <+134>: pop ebx
0x000005d4 <+135>: pop ebp
0x000005d5 <+136>: lea esp,[ecx-0x4]
0x000005d8 <+139>: ret
end of assembler dump.

Categoria TI e Programação
Subcategoria Programação
Qual é o alcance do projeto? Bug ou alteração pequena
Isso é um projeto ou uma posição de trabalho? Um projeto
Tenho, atualmente Não se aplica
Disponibilidade requerida Conforme necessário
Integrações de API Outros (Outras APIs)
Funções necessárias Outro
Outras funções necessárias Resolução de um exercício de Programação

Prazo de Entrega: Não estabelecido

Habilidades necessárias

Outro projetos publicados por C.