Jump to content

Candeer

Apoiador Nibble
  • Content Count

    10
  • Joined

  • Last visited

  • Country

    Brazil

Posts posted by Candeer


  1. Opa, analise abaixo.

    Spoiler

    Tipo de arquivo: PE EXE
    Compilador/linguagem: Microsoft Visual C/C++
    Protector/packer: Nenhum
    SHA-256: 006cbf5d7911fda29b25d81abd674284ff7c80af1f8cd1b281fa1be51719ab86
    Strings interessantes: C:\Users\IEUser\Desktop\App\Release\App4.pdb, FindWindowA, x32dbg, OllyDbg.
                    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: 401190 ( Faz checagem se esta rodando em um debugger usando a call IsDebuggerPresent, caso nao esteja, inicia o processo de decifrar as strings em XOR para ser usado na checagem de um possivel ambiente virtualizado.
                        Caso nao esteja rodando em uma VM, faz uma call para  FindWindowA para saber se existe algum programa com o titulo "x32dbg" ou "OllyDbg". Se nao existir nenhum debugger rodando no sistema, continua a rodar
                        realiza o download o sample eicar e escreve nos arquivos temporarios como payload.exe)
                

    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, KERNEL32.dll_IsDebuggerPresent,
                            USER32.dll_FindWindowA.


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

    O que o binário faz em linhas gerais: O malware age como um dropper, faz o download o sample eicar e salva nos arquivos temporarios como payload.exe, antes de realizar a atividade maliciosa, é feito uma checagem para saber se esta sendo
                          executado em um debugger, em um ambiente virtualizado ou se existe algum programa aberto com o nome "x32dbg" ou "OllyDbg" para ter total certeza que nao esta sendo executado nenhum debugger.

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

    Notas adicionais:
        Para remover a checagem do nome da janela, apaguei a call e coloquei instruções NOP no lugar. Mas também poderia ser feito usando o window renamer para realizar um patch no nome da janela.

        Com base nas analises, notei certos pontos interessantes na estrutura do codigo, algumas calls estao sendo feita via valores guardados nos registradores e nao direto ao endereço da função em si, isso pode ser uma indicativa de que o escritor
        do malware esta usando "Function pointers" no lugar de chamar a função diretamente, um recurso que guarda o endereco da função em um ponteiro e depois usa a propia variavel para realizar a chamada, isso pode ser usado para não deixar claro em que ponto esta
        sendo feito uma call. Partes do codigo para decifrar a ofuscação em  XOR são repetidas, o que pode indicar o uso de uma funcao macro para decifrar a string ofuscada.
        
        Não tenho tanta certeza sobre estas notas, se alguém puder opinar sobre elas, agradeco :D

       Codigo em python usado para traduzir strings:
     

    As analises estão muito boas, evoluindo naturalmente


  2. Spoiler

    Tipo de arquivo: PE EXE
    Compilador/linguagem: Microsoft Visual C/C++
    Protector/packer: Nenhum
    SHA-256: 2f5c42fcc1707f599ef43d6c0787db2cb51527a1180f8e1d7a850d6cbd21fa6d
    Strings interessantes: C:\Users\IEUser\Desktop\App4\Release\App4.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: 401190 (Checa se esta sendo debugado, usando a call IsDebuggerPresent, se nao estiver carrega strings codificadas para checagem de ambiente virtualizado, 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, KERNEL32.dll_IsDebuggerPresent

    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. algoritmo em python para decifrar:

     

    
    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]))



               

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

     

    • Curtir 2

  3. 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]))

     

     


  4. Spoiler

    Tipo de arquivo: PE EXE

    Compilador/linguaguem:  Microsoft Visual C/C++ - C/C++

    Protector/packer: Nenhum

    SHA-256: cfbfa910884ffc3daa1708290597ca89d4104289284a0ed3fe1e90919c60dff7

    Strings interessantes: "C:\Users\IEUser\Desktop\Project1\Release\Project1.pdb"(path para projeto do sample) , "3//+attikjmu>28:)u4)<t?4,574:?t>28:)u846"(url eicar encodada via xor),"4!277:tnuk{s25?4,({{muj`{25mo`{#mo`{)-aolukr{>804tikjkkjkj{2)>=4#toluk,25?4,(.+?:/>u>#>"(User agent firefox, encodada via xor)

    Funções locais maliciosas: 00401001(Pega atual diretorio para usar como base), 004011A0 (Decripta strings codificadas via XOR usando a chave 0x5B e faz uso da lib WinNet para criar um downloader usando as headers do firefox, para poder baixar o sample eicar na maquina e escrever em um arquivo temporario com o nome de windowsupdate.exe)

    Chamadas à API do Windows e outras bibliotecas:  Chamadas notaves: Kernel32 - GetCommandLineA, lstrlenA, WriteFile, GetTempPathA, CreateFileA. WinNet - InternetReadFile, InternetOpenA, InternetOpenUrlA

    Atividades de rede: request HTTP para download do código malicioso em "http://2016.eicar.org/download/eicar.com"

    O que o binário faz em linhas gerais: Age como um dropper, baixa um codigo malicioso (eicar) e escreve nos arquivos temporarios como windowsupdate.exe, porém as strings referentes a URL do sample eicar, nome do arquivo escrito e user agent estão encriptadas usando XOR,
                          na função 004011A0 é feito o tratamento da string e a decodificação com a chave 0x5B além da execução do download do sample eicar.
                    
                          Simples codigo para decifrar, em python:

    
                                      >>> def xor(string, key):        
                                              ...     out = ""
                                              ...     for s in string:
                                              ...             out += chr(ord(s) ^ key)
                                              ...     print(out)
                                              ...
                                >>> xor("3//+attikjmu>28:)u4)<t?4,574:?t>28:)u846", 0x5B)
                                windowsupdate.exe

    O que foi modificado no sistema:  Binário escrito nos arquivos temporarios

     


  5. Spoiler

    Tipo de arquivo: PE EXE

    Compilador/linguaguem:  Microsoft Visual C/C++ - C/C++

    Protector/packer: Nenhum

    SHA-256: 4263a62d41f13ff00d730fbf25bcfbccef9387cec2c5dff1cb8404efceade3e7

    Strings interessantes: "http://2016.eicar.org/download/eicar.com"(url para download do artefato) , "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" (User agent),  \windowsupdate.exe (Arquivo criado para "dropar" o binário baixado), "C:\Users\IEUser\Desktop\Project1\Release\Project1.pdb" path para o arquivo de debugger do projeto do criador do sample (Nome do escritor)

    Funções locais maliciosas: 004010t89 (Pega atual diretorio para usar como base), 004011A0 (Faz uso da lib WinNet para criar um downloader usando as headers do firefox, para poder baixar o sample eicar na maquina e escrever em um arquivo temporario com o nome de windowsupdate.exe)

    Chamadas à API do Windows e outras bibliotecas:  Chamadas notaves: Kernel32 - GetCommandLineA, lstrlenA, WriteFile, GetTempPathA, CreateFileA. WinNet - InternetReadFile, InternetOpenA, InternetOpenUrlA

    Atividades de rede: request HTTP para download do código malicioso em "http://2016.eicar.org/download/eicar.com"

    O que o binário faz em linhas gerais: Age como um dropper, baixa um codigo malicioso (eicar) e escreve nos arquivos temporarios como windowsupdate.exe, porem não executa

    O que foi modificado no sistema:  Binário escrito nos arquivos temporarios

     


  6. Spoiler

    Tipo de arquivo: PE EXE

    Compilador/linguaguem:  Microsoft Visual C/C++(2017 v.15.5 - C/C++

    Protector/packer: Nenhum

    SHA-256: a5c8b9d287270af46943bfdd19f7f6d5f11ecf24980f9f6aca798756af4731f8

    Strings interessantes: C:\Windows\System32\cmd.exe, C:\Users\Homer\Documents\Visual Studio 2017\Projects\Project3\Release\Project3.pdb, DeleteFile

    Funções locais maliciosas: 00401100 (Tenta deletar C:\Windows\System32\cmd.exe usando a call DeleteFile)

    Chamadas à API do Windows e outras bibliotecas: DeleteFile( C:\Windows\System32\cmd.exe), GetCommandLineA()

    Atividades de rede: nenhuma

    O que o binário faz em linhas gerais: Tenta apagar a C:\Windows\System32\cmd.exe via DeleteFile(path)

    O que foi modificado no sistema: Nada

     

     

    • Curtir 1

  7. Na main() voce esta enviando o vetor em si para o scanf, o certo seria voce enviar somente a variavel que voce deseja atribuir, nesse caso voce acessa ela via indice

    scanf("%d", vetor[i]);

    Visto que as variaveis sao globais, nao precisa enviar elas via parametros ja que voce pode acessar-las de qualquer local do codigo e ainda na mediaVetores() voce esta atribuindo valores para os argumentos que nao foram passados, isso funciona na maioria das linguagens(python, java, c++...) mas em C voce nao pode fazer isso.

    Voce nao precisa de argumentos nesse caso, ja que voce ja sabe quais sao as variaveis nesse codigo. ainda na funcao mediaVetores() voce esta somando um vetor com um float, o correto seria fazer a soma com os valores que estao armazenados no vetor, no caso via indice, mas ja que voce quer somente a media dos vetores, voce pode somar os valores dos dois vetores na variavel total e depois dividir pelo total de elementos.

    float mediaVetores (){
    	for (int i = 0; i < TAM_VETOR; i++){
    	 	total += ((float)vetor1[i] + (float)vetor2[i]);
    	}
    
    	total /= TAM_VETOR * 2;
    	return total; 
    }

    O tamanho dos vetores sao fixos (5), entao voce pode definir uma macro (#define TAM_VETOR 5) e usar ela como tamanho, e voce pode fazer a mediaVetores() retornar um float em vez de ser void.

     

    No final, o codigo ficaria da seguinte maneira

    #include <stdio.h>
    #include <stdlib.h>
    #define TAM_VETOR 5 
    
    int i;
    int vetor1 [TAM_VETOR];
    int vetor2 [TAM_VETOR];
    int vetor3 [TAM_VETOR];
    float total = 0;
     
    float mediaVetores (){
    	for (int i = 0; i < TAM_VETOR; i++){
    	 	total += ((float)vetor1[i] + (float)vetor2[i]);
    	}
    
    	total /= TAM_VETOR * 2;
    	return total; 
    }
     
    int main() {
     
    	printf ("\n Digite os valores do primeiro vetor: \n\n");
    	 
    	for (int i = 0; i < 5; i++){
    	 
    		scanf ("%d", &vetor1[i]);
    	 
    	}
    	 
    	printf ("\n Digite os valores do segundo vetor: \n\n");
    	 
    	for (int i = 0; i < 5; i++){
    	 
    		scanf ("%d", &vetor2[i]);
    	 
    	}
    	 
    	printf("Media vetores: %f\n", mediaVetores()); 
    }

     

    No canal do papo binario tem um curso execelente da linguagem C.

×
×
  • Create New...