Evaluating bids

Engenharia Inversa

Published on the March 12, 2019 in IT & Programming

About this project

Open

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.

Category IT & Programming
Subcategory Web development
What is the scope of the project? Small change or bug
Is this a project or a position? Project
I currently have I have specifications
Required availability As needed
API Integrations Other (Other APIs)
Roles needed Other
Other roles needed 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.

Delivery term: Not specified

Skills needed

Other projects posted by C.