Jump to content
Sign in to follow this  
Fernando Mercês

AnalyseMe - Nível 03

Recommended Posts

Salve, pessoal! Perdoem o atraso, mas aqui está o AnalyseMe-03, o quarto da série (começou com o nível 00). Lembra de postar a reposta com a tag spoiler, pra não dar a resposta de cara pra quem quer tentar. 😉

Esse tem umas surpresinhas. hehe

Em tempo, podem dar feedback do que estão achando da série? Tá legal? Muito fácil? Muito difícil? Queremos saber. Olha o binário aí e manda seus comentários por favor!

Grande abraço e boa sorte!

AnalyseMe-03.exe

Share this post


Link to post
Share on other sites

Olá Merceix!

 

Segue minha análise rápida;

Spoiler

Primeiro testa se está executando em um ambiente virtualizado, procurando a existência destes dois arquivos.

C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll

C:\windows\System32\Drivers\Vmmouse.sys

 

Se algum deles existir, então ele termina a execução. 

Se não, ele abre uma conexão com o site http://2016.eicar.org/download/eicar.com ,

usando o User-Agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" e salva o conteúdo em um arquivo chamado payload.exe na pasta temporária do usuário.

 

Fim rs

 

  • Curtir 1
  • Haha 1

Share this post


Link to post
Share on other sites

Agora sim, com essa tag Spoiler ficou melhor pra todos.

vlw

Edited by Aof

Share this post


Link to post
Share on other sites
18 minutos atrás, Thiago de Queiroz disse:

Olá Merceix!

 

Segue minha análise rápida;

  Mostrar conteúdo oculto

Primeiro testa se está executando em um ambiente virtualizado, procurando a existência destes dois arquivos.

C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll

C:\windows\System32\Drivers\Vmmouse.sys

 

Se algum deles existir, então ele termina a execução. 

Se não, ele abre uma conexão com o site http://2016.eicar.org/download/eicar.com ,

usando o User-Agent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" e salva o conteúdo em um arquivo chamado payload.exe na pasta temporária do usuário.

 

Fim rs

 

muito bom @Thiago de Queiroz só faltou vc seguir o modelo de analise padrão daqui do forum que o @Fernando Mercês não mencionou acima.

 

Spoiler
  • Tipo de arquivo: PE EXE
  • Compilador/linguagem: Borland C++
  • Protector/packer: Nenhum
  • SHA-256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
  • Strings interessantes: X, Y, Z
  • Funções locais maliciosas: 405040 (faz tal coisa), 403570 (faz coisa e tal)
  • Chamadas à API do Windows e outras bibliotecas: CreateWindowExA(parâmetros), InternetOpenFileA(parâmetros)...
  • Atividades de rede: resolve o domínio X, baixa Y da URL Z
  • O que o binário faz em linhas gerais: Rouba as senhas armazenadas no browser.
  • O que foi modificado no sistema: o arquivo X é criado e uma chave de registro é adicionada em HKLM\Microsoft\Windows\CurrentVersion\Run com o valor c:\binario.exe

 

Share this post


Link to post
Share on other sites
1 hora atrás, Aof disse:

muito bom @Thiago de Queiroz só faltou vc seguir o modelo de analise padrão daqui do forum que o @Fernando Mercês não mencionou acima.

 

  Mostrar conteúdo oculto
  • Tipo de arquivo: PE EXE
  • Compilador/linguagem: Borland C++
  • Protector/packer: Nenhum
  • SHA-256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
  • Strings interessantes: X, Y, Z
  • Funções locais maliciosas: 405040 (faz tal coisa), 403570 (faz coisa e tal)
  • Chamadas à API do Windows e outras bibliotecas: CreateWindowExA(parâmetros), InternetOpenFileA(parâmetros)...
  • Atividades de rede: resolve o domínio X, baixa Y da URL Z
  • O que o binário faz em linhas gerais: Rouba as senhas armazenadas no browser.
  • O que foi modificado no sistema: o arquivo X é criado e uma chave de registro é adicionada em HKLM\Microsoft\Windows\CurrentVersion\Run com o valor c:\binario.exe

 

Obrigado! Me desculpe eu nao sabia deste modelo de post... 🙂 Abraco

Share this post


Link to post
Share on other sites
Spoiler

 

C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll

C:\windows\System32\Drivers\Vmmouse.sys


 

interessante @Fernando Mercês nem tinha visto essas verificações de anti-VM. heheh

ta ficando cada vez mais interessante a saga AnalyseMe 

 

Share this post


Link to post
Share on other sites
Spoiler

 

  1. Tipo de arquivo: PE EXE
  2. Compilador/linguagem: Visual C++ (2017) (Debug)
  3. Protector/packer: Nenhum
  4. SHA-256: 275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f(eicar.com), c704af52eeabac166822ddb77000528213ceae5402c34a8443006992ecc46b49 (AnalyseMe-03.exe)
  5. Strings interessantes: http://2016.eicar.org/download/eicar.com (URL Decriptada), Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) (User-agent para acesso da url), \payload.exe, C:\windows\System32\Drivers\Vmmouse.sys (driver do mouse da maquina virtual), C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll (parte de um componente para instalação de drivers). C:\Users\Homer\Documents\Visual Studio 2017\Projects\Project3\Release\Project3.pdb (String iinteressante, pois podemos saber parte da origem do criador do arquivo ou do arquivo em si)
  6. Funções locais maliciosas: 0x00401120 (Decripta strings), 0x00401110 (Geralmente chamada quando ocorre algum retorno inválido, exemplo: INVALID HANDLE...), 0x00401310 (verifica se o sistema está sob uma maquina virtual atraves da verificação da existencia de arquivos no sistema)
  7. Chamadas à API do Windows e outras bibliotecas: InternetOpenUrlA(http://2016.eicar.org/download/eicar.com), CreateFileA(READ, DIFxAPI.dll && Vmmouse.sys), GetTempPathA(buffer)(local para esconder o arquivo) (GetCommandLineA() ???) WriteFile(salvar o arquivos que foi baixado)
  8. Atividades de rede: resolve a url http://2016.eicar.org/download/eicar.com, baixa o arquivo eicar.com, e salva em TEMPPATH\payload.exe (Temp path = pasta temporaria)
  9. O que o binário faz em linhas gerais: Baixa um arquivo virus de teste e esconde na maquina.
  10. O que foi modificado no sistema: o arquivo baixado é salvo em TEMPPATH\payload.exe (Temp path = pasta temporaria)

 

 

Acho que é isso! 😃

Edited by Prog

Share this post


Link to post
Share on other sites

Valeu, galera. Muito legais as análises!

Alguém analisou a função que decripta as strings? Conseguiriam fazer, em Python ou em qualquer outra linguagem de programação, um decrypter? 🙂

Abraços,

Fernando

Share this post


Link to post
Share on other sites

Boa tarde Fernando,

Segue um programa em python3 para decifrar as strings da mesma maneira que a função 401120:

Spoiler

# A chave segue o padrao [01 02 03 04 00] [01 02 03 04 00] várias vezes repetidas
chave = bytearray([0x01,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00,0x02,0x03,0x04,0x00])
# As strings em hexadecimal são encontradas no binário
string1 = bytearray([0x4C,0x6D,0x79,0x6D,0x6C,0x6E,0x62,0x2B,0x34,0x2C,0x33,0x24,0x28,0x61,0x6C,0x69,0x70,0x63,0x77,0x6D,0x62,0x6E,0x66,0x3F,0x20,0x4F,0x50,0x4D,0x45,0x22,0x35,0x2A,0x30,0x39,0x23,0x53,0x69,0x6C,0x67,0x6B,0x77,0x71,0x23,0x4A,0x54,0x22,0x36,0x2A,0x31,0x39,0x23,0x57,0x56,0x33,0x2A])
string2 = bytearray([0x42,0x38,0x5F,0x73,0x69,0x6C,0x67,0x6B,0x77,0x71,0x5F,0x57,0x79,0x71,0x77,0x61,0x6D,0x31,0x31,0x58,0x44,0x70,0x6A,0x72,0x65,0x70,0x70,0x58,0x56,0x6F,0x6E,0x6B,0x75,0x71,0x66,0x2A,0x73,0x7B,0x70])
string3 = bytearray([0x69,0x76,0x77,0x74,0x3A,0x2D,0x2C,0x36,0x30,0x33,0x35,0x2A,0x65,0x6B,0x60,0x65,0x72,0x2C,0x6C,0x76,0x67,0x2D,0x67,0x6B,0x77,0x6C,0x6F,0x6B,0x61,0x66,0x2C,0x61,0x69,0x61,0x62,0x76,0x2E,0x61,0x6C,0x69])
string4 = bytearray([0x42,0x38,0x5F,0x54,0x72,0x6D,0x64,0x76,0x61,0x6F,0x23,0x42,0x69,0x6E,0x66,0x77,0x5C,0x4D,0x71,0x65,0x63,0x6E,0x66,0x58,0x56,0x6B,0x71,0x70,0x75,0x63,0x6F,0x46,0x6F,0x7A,0x23,0x43,0x75,0x67,0x70,0x70,0x20,0x43,0x67,0x60,0x69,0x76,0x6A,0x6B,0x6E,0x71,0x5F,0x40,0x49,0x44,0x7B,0x45,0x50,0x4B,0x2D,0x60,0x6C,0x6E])
strings = [string1, string2, string3, string4]

for i in range(len(strings)):
    for k in range(len(strings[i])):
        strings[i][k] ^= chave[k] #Basta fazer um XOR entre a chave e a string
    print('String decifrada: {0}'.format(strings[i]))

 

Abs,
Rafael

  • Curtir 1

Share this post


Link to post
Share on other sites

Minha análise:

Spoiler

Percebi que ele verifica se está rodando em uma VM procurando por C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll  e em caso afirmativo o programa é encerrado. Para contornar isso fui na linha em que chama a função que encerraria o programa e dei um 'Fill with NOPs', fazendo com que a execução prosseguisse mesmo estando numa VM.

Quanto ao script em Python:
 

Spoiler

 

Não ficou bem feito como o do @rcimatti, pois joguei as strings e fiz as conversões pra hexa durante o laço, mas no final deu o resultado esperado. Ficou assim:

for l in string1:
...     o = ord(l) ^ chave[x]
...     x = x+1
...     str_decodificada = str_decodificada + chr(o)

 

Sobre o feedback:

Os desafiose stão ótimos, @Fernando Mercês. Acho que o grau de dificuldade de um nível para outro está na medida e está sendo uma ótima oportunidade para pôr em prática o que foi visto no CERO. Pode manter do jeito que tá que tá ótimo.

 

  • Curtir 1

Share this post


Link to post
Share on other sites

Muito maneiro, segue a analise e o script para decifrar.

 

Spoiler

Tipo de arquivo: PE EXE
Compilador/linguagem: Microsoft Visual C/C++
Protector/packer: Nenhum
SHA-256: c704af52eeabac166822ddb77000528213ceae5402c34a8443006992ecc46b49
Strings interessantes: C:\Users\Homer\Documents\Visual Studio 2017\Projects\Project3\Release\Project3.pdb,
            Strings cifradas via XOR:
                B8_Trmdvao#Binfw\MqecnfXVkqpucoFoz#Cugpp Cg`ivjknq_@ID{EPK-`ln == C:\Program Files\Oracle\VirtualBox Guest Additions\DIFxAPI.dll
                B8_silgkwq_Wyqwam11XDpjreppXVonkuqf*s{p                == C:\windows\System32\Drivers\Vmmouse.sys
                Lmymlnb+4,3$(alipcwmbnf? OPME"5*09#Silgkwq#JT"6*19#WV3*        == Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
                ]rb}lmb`.g{a                                == \payload.exe
                ivwt:-,6035*ek`er,lvg-gkwlokaf,aiabv.ali               == http://2016.eicar.org/download/eicar.com

Funções locais maliciosas: 401313 (carrega strings codificadas para checagem de ambiente virtualizado),401110(call para decodificar string) 4011AO (Apos checagem, faz request para download do sample eicar)

Chamadas à API do Windows e outras bibliotecas: wininet.dll_InternetReadFile, wininet.dll_InternetOpenUrlA, wininet.dll_InternetOpenUrlA, wininet.dll_InternetOpenA,
                        KERNEL32.dll_ExitProcess, KERNEL32.dll_GetProcessHeap,KERNEL32.dll_HeapAlloc, KERNEL32.dll_GetCommandLineA, KERNEL32.dll_WriteFile,
                        KERNEL32.dll_GetTempPathA, KERNEL32.dll_CloseHandle, KERNEL32.dll_GetModuleHandleA, KERNEL32.dll_lstrcatA, KERNEL32.dll_GetStartupInfoA

Atividades de rede: Monta uma request usando o user-agent do firefox (Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)), entao faz o download do sample malicioso eicar, em  http://2016.eicar.org/download/eicar.com

O que o binário faz em linhas gerais: Detecta se esta em um ambiente virtualizado buscando arquivos que indicam o uso da Virtualbox ou VMware, caso nao esteja em uma maquina virtual, o sample faz uma request para realizar o download do
                      sample eicar e age como um dropper, salvando o arquivo com o nome payload.exe nos arquivos temporarios. Todas as strings estao codificadas usando XOR, mas de uma maneira nao tao clara.
                      Ele mantem uma lista de chaves na qual eh calculada baseada no indice do contador da string.

            

O que foi modificado no sistema: Sample eicar salvo nos arquivos temporarios como payload.exe

 

Algoritmo em python

Spoiler

                        import sys


                        def decrypt(s):
                            out = ""
                            keys = [0x02, 0x03, 0x04, 0x00]
                            # Depois do calculo do primeiro valor, o 0x01 sempre aparece apenas uma vez dado o indice 0 no inicio do loop, ficou mais simples contar as chaves mais repetidas na lista
                            out += chr(ord(s[0]) ^ 0x01)
                            s = s[1:]

                            for i,c in enumerate(s):    
                            		k = keys[i % len(keys)]
                            		out += chr(ord(c) ^ k)

                            return out



                        print(decrypt(sys.argv[1]))

 

 

Edited by Candeer
Spoiler algoritmo

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...