Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Estudo de asssembly

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Estudo de asssembly

    Olá, faz tempo que sou assinante deste forum.
    Mas somente hoje resolvir me manifestar. pois sou uma pessoa que não tenho muito tempo.
    Mas agora arrumei algum.
    Estou me dedicando em escrever um livro sobre assembly focado para quebra de programas e malwares.
    Tenho alguma experiencia e gostaria de perguntar se alguem aqui esta interessado em estudar assembly, no momento estou estudando o worm bagle.
    Possuo o codigo e estou fazendo as correções necessarias para ficar compativel com o masm vrs 11.
    Bem, meu e-mail é ontreus@ig.com.br

  • Font Size
    #2
    Material para Estudo:

    Bem, antes de tudo o assunto que irei explanar é focado aos Virus eXperts. E como essa comunidade VX anda um pouco esquecida recesolvi tb ajudar a dar uma renovada.

    O Worm que irei estudar é o Bagle, essa versão é o Bagle f, o link do seu codigo completo esta em:
    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Ele foi criado em Assembly, no MASM32 versão 8, atualmente o Masm esta na versão 11 e existe o MASM também para 64 bits.

    Segue link para o Masm Vrs 11:

    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Comment


    • Font Size
      #3
      Bem, vcs devem baixar o MASMVrs11 e instalar.
      Sera criada uma pasta de nome MASM32 na raiz do seu drive "C".
      Dentro desta pasta vocês devem procurar e encontrar o aplicativo qeditor.exe, executem esse arquivo para o editor assembly abrir
      Com isso, vcs descompactar o codigo do Worm Bagle e coloquem a pasta source dentro da pasta do MASM32 para facilitar

      Historico Geral do Worm Bagle.

      Bagle é um worm de envio em massa por e-mails que usa o arquivo de compressão UPX. Ele pode vir como um arquivo.ZIP protegido por uma senha, acompanhado da chave de sua abertura que pode estar no corpo da mensagem ou dentro de uma imagem. O arquivo .ZIP contém um executável com as extensões .EXE, .COM ou .SCR.


      Depois de executado, o Bagle se auto-envia usando seu próprio mecanismo de SMTP e o catálogo de endereços do PC infectado. O sistema de acesso remoto do verme rastreia a porta TCP 1234 atrás de comandos, uma característica que permite crackers transformarem os PCs em zumbis para articular ataques DDoS em redes ou para distribuir spam.

      Comment


      • Font Size
        #4
        é um worm em si bem interessante. Entretanto a vedete mesmo é o Stuxnet, já considerou estuda-lo?.
        "If you're good at something, never do it for free".
        Joker

        Não, eu não estou aqui para financiar a sua empresa!!!

        Comment


        • Font Size
          #5
          Comecei com o Bagle, pois a finalidade é aprender o assembly e estou escrevendo um livro sobre o assunto e parte dos meus estudos eu irei postar aqui. O Stuxnet não existe o código disponível. Seria muito, mais complexo estudá-lo fazendo um desassembly dele, mas é possível.

          Há um livro muito bom traduzido para o português que se chama "Como Quebrar Código" que da dicas excelentes de como fazer isso.

          Avaliando os arquivos do Bagle

          Ao analisar o pacote dos arquivos do Bagle, vc deve identificar um arquivo chamado de “5readme.txt”, esse arquivo é o que se deve fazer para compilar o Bagle, é esse arquivo que vai dar direção inicial de nossos estudos neste worm.
          Seque a transcrição do conteúdo deste arquivo.

          01 - Compilation. MASM32v8 required.
          02 - * Compile ConfBuilder.
          03 - * Build configuration file with ConfBuilder.exe.
          04 - * Compile Beagle worm.
          05 - * Compile Crypt.asm app.
          06 - * Run Crypt.exe to post-process Beagle.exe file.

          TODO.
          07 - * Implement DNS caching.
          08 - * Do more VirGen (file infector) tests.
          09 - * Do not infect Windows system files (XP auto-recovery make troubles).
          10 - * Use less memory.

          Deletion.
          11 - * Compile worm with TestVersion=1 in Config.ini.
          12 - * Run "Beagle.exe -del".

          Bem, logo na linha 01, o VX que criou o vírus diz que o código deve ser compilado com o MASM Vrs8. Devemos nos preocupar com isso, pois as vezes de uma versão do MASM para outra alguns arquivos somem ou seus caminhos são mudados. E da versão 8 para 11 a pasta “COM” da versão 8 não existe na versão 11 e isso iriria dificultar a compilação.

          Descobrir isso ao tentar compilar o primeiro arquivo que se chama ”ConfBuilder.asm”
          E neste item ao tentar compilar com a versão 11 do Masm, ocorreram vários erros. E fuçando a versão 8 do MASM, esta possui uma pasta que a versão 11 não possui que é a pasta “COM”. Então para evitar trabalhos desnecessário resolvi migrar para versão 8 pelo menos temporariamente. Segue o link da versão do MasmVrs8:

          Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

          Se vocês já instalou a versão 11, será necessário vc deletar a pasta MASM32 e reinstalar a versão 8.

          Bem, para compilar o arquivo “ConfBuilder.asm”, como mostra o arquivo feito pelo VX “readme.txt”, você deve ir na pasta do MASM32 e executar o arquivo qeditor.exe




          Compilando o arquivo ConfBuilder.asm

          Com o editor aberto, você deve ir na barra de menus e clicar na função “open” e localizar o arquivo “ConfBuilder.asm” na pasta source do Bagle e clicar em “OK” para abrir o código.



          Comment


          • Font Size
            #6
            Com o código Aberto no editor:



            Para compilar este primeiro código vc deve ir em Project --> Assembly & Link



            No código original do Bagle, iremos obter um erro de compilação que informa que um arquivo não foi encontrado.



            O que a mensagem informa é que o comando “include” não encontra o arquivo kernel32.inc e podemos concluir que deveremos acertar o caminho no código para que o edito consiga encontrar os arquivos e compilar. Foi nesta parte do meu estudo que verifiquei que o Masm11 não possui a pasta “CON” da versão 8.

            A Correção deve ficar desta maneira:

            ; ################################################## #############

            .386
            .model flat, stdcall
            option casemap :none ; case sensitive

            ; ################################################## ##############

            .nolist
            include \masm32\include\kernel32.inc
            include \masm32\include\windows.inc
            include \masm32\include\user32.inc
            include \masm32\include\wsock32.inc
            include \masm32\include\ole32.inc
            include \masm32\include\shlwapi.inc
            include \masm32\COM\include\oaidl.inc
            include \masm32\include\wininet.inc
            include \masm32\include\advapi32.inc
            include \masm32\include\shell32.inc

            .list
            includelib \masm32\lib\kernel32.lib
            includelib \masm32\lib\user32.lib
            includelib \masm32\lib\wsock32.lib
            includelib \masm32\lib\ole32.lib
            includelib \masm32\lib\shlwapi.lib
            includelib \masm32\lib\wininet.lib
            includelib \masm32\lib\advapi32.lib
            includelib \masm32\lib\shell32.lib




            Comment


            • Font Size
              #7
              Depois das correções já é possível compilar sem erros o arquivo “ConfBuilder.asm” e gera o arquivo ConfBuilder.exe.



              Esse arquivo o VX que criou o Bagle usa-o para configurar o a Bagle antes de liberá-lo.
              Você deve executar este executável para gerar um arquivo de nome “Config.inc”



              Os dados sugrem que ao conpilar o worm Bagle ele deve usar os arquivos para modificar suas opções de funcionamento, como porta a ser usada para controle deste remotamente.

              .data

              DisableInfect equ TRUE
              BasePort dd 1234
              Password dd 0e95757d8h
              MaxConnections equ 10
              Ver equ 0
              szDNSHost db "217.5.97.137", 9 dup(0)
              DNSPort equ 53
              TESTVERSION EQU 1
              WorkUntilYear equ 2005
              WorkUntilMonth equ 1
              WorkUntilDay equ 25
              DNSPort equ 53
              MaxSmtpThreads equ 3
              MaxSmtpAttemps equ 3
              szRegBasePath db "SOFTWARE\base_reg_path",0
              szBglAutoKey db "reg_key",0
              szBglRealName db "\loader_name.exe",0
              szBglRealNameR equ db "\loader_name.exe",0
              DisablePK equ TRUE
              DisableNotify equ TRUE

              Eu ainda não avaliei os modulos do bagle com mais profundidade, pois ainda estou tentando compila-lo.

              Comment


              • Font Size
                #8
                Bem, seguindo a lista de tarefas do arquivo readme.txt que será compilar o arquivo Bagle.asm e ao tentar compilar o codigo Bagle.asm, ha alguns erros, que por hora não sei arrumar:




                Esses erros são em dois arquivos o PassGem.asm que é o gerador de senhas do Bagle e o arquivo StartUp.asm

                Estou aberto a sugestões e toda ajuda sera bem vinda.

                Comment


                • Font Size
                  #9
                  Bem indo atras do que seria o primeiro erro, que foca o arquivo PassGem.asm
                  E encontrei a referência do erro A2163 da imagem acima:

                  A2163 non-benign structure redefinition : incorrect initializers
                  A STRUCT or UNION was redefined with a different initializer value.

                  When structures and unions are defined more than once, the definitions must be identical.
                  This error can be caused by using a variable as an initializer and having the value of the
                  variable change between definitions.


                  E fazendo a tradução seria lgo como:

                  A2163: redefinição estrutura não-benigna: inicializadores incorretos
                  A Struct ou União esta sendo redefinida com valores de inicialização diferentes.

                  Quando Estruturas (“Struct”) e uniões são definidas mais de uma vez, as definições devem ser identicas

                  Este erro pode ser causado pela utilização de uma variável como um inicializador e tendo o valor da variável mudado entre as definições.

                  Eu acho! que em algum arquivo nativo do MASM onde o fragmento do codigo da classe ImageCodecInfo faz referência, que pode ser um arquivo *.inc ou um arquivo *.lib está com variaveis de inicialização na ordem ou maneira de tratamento (recepção de dados ) diferentes.

                  A parte do codigo que faço referência é do arquivo PassGen.asm:

                  01 - ImageCodecInfo struct
                  02 - Clsid CLSID <>
                  03 - FormatID GUID <>
                  04 - CodecName DWORD ?
                  05 - DllName DWORD ?
                  06 - FormatDescription DWORD ?
                  07 - FilenameExtension DWORD ?
                  08 - MimeType DWORD ?
                  09 - Flags DWORD ?
                  10 - Version DWORD ?
                  11 - SigCount DWORD ?
                  12 - SigSize DWORD ?
                  13 - SigPattern DWORD ?
                  14 - SigMask DWORD ?
                  15 - ImageCodecInfo ends


                  Bem esses dados que vem entre as linhas 01 e 15, são os parâmetros da classe ImageCodecInfo que devem receber valores, ou a erro na ordem ou erro no tipo de valor a ser recebido.

                  Fazendo busca na internet, achei alguns fragmentos que possuem essa mesma estrutura com algo dessa maneira:

                  01 - ImageCodecInfo struct
                  02 - Clsid CLSID <?>
                  03 - FormatID GUID <?>
                  04 - CodecName DWORD ?
                  05 - DllName DWORD ?
                  ... etc


                  Fiz os testes e obtive o mesmo erro.
                  Outra possibilidade, seria estar faltando referencia no codigo principal, que é o Bagle.asm, de algum arquivo *.inc ou *.lib

                  Bem, irei procurara qual arquivo essa estrutura citada acima faz referencia , para fazer uma comparação.

                  Se allguém tiver um entendimento diferente, porfavor não hesite em postar aqui, pois pode me ajudar a encontrar o erro.
                  Se alguem fez as mesmas operações e deu um numero de erro diferente, por favor , postar aqui tb.

                  Grato a todos.

                  Comment


                  • Font Size
                    #10
                    Bem, fuçando na internet há referências sobre os codigos mostrados na mensagem de erro que aparecem na imagem anterior
                    A2163, 2161 e 2006.



                    O link destas informações de erro no MASM estão em:

                    Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

                    São 6 mensagens de erro que fazem refrencia aos arquivos "PassGen.asm" e "StartUp.asm"

                    Comment


                    • Font Size
                      #11
                      Bem agradeço ao Chemical por ter gostado dos posts, isso me dá animo para continuar este trabalho.
                      Por favor se tiverem duvidas, criticas ou sugestões podem postar mensagens é importante, estou aprendendo tb. E irei me esforçar pra responder, mas tentarei manter o foco que é fazer um estudo aprofundado deste maravilhoso worm.

                      Nunca sabemos de tudo e uma dúvida pode ser algo que eu não tenha percebido. A idéia é depois tentar tirar proveito deste estudo e automatizar operações com defacer ou criar ferramentas para facilitar o trabalho.

                      Bem, consegui resolver parte do problema de compilação do worm Bagle. Fico pensando por que o VX (Virus eXpert) que criou este, worm colocou alguns obstáculos em seu código e erros propositais antes de distribuir pra galera. pois quem tentou compilar o código original ira enfrentar os meus problemas que estou enfrentando.

                      Fiz uma busca de outros fontes do Bagle e todos que encontrei são idênticos, então não existiu um segundo código modificado e redistribuído.

                      Busquei por ajuda em fóruns internacionais e fui ao fórum do MASM, o problema que não é permitido fazer pergunta ou postar códigos que façam referencia a MALWARES. Então tive que criar um código simples que apresentava os mesmos erros e consegui uma ajuda de um Guru do fórum.

                      O erro do arquivo “PassGen.asm” que aparece quando é tentando compilar o arquivo “Bagle.asm”, que é o nosso worm de estudo, é que a Struct “ImageCodecInfo STRUCT” já existe em um arquivo nativo do MASM o “windows.inc”
                      Então em algum momento da compilação esse “windows.inc” é carregado e o arquivo “PassGen.inc” é também so que ele apresenta em uma segunda vez a mesma struct, executando assim uma duplicidade de variáveis.




                      Então a solução é comentar ou deletar a struct “ImageCodecInfo STRUCT” do arquivo “PassGen.asm” e os erros referente a ele irão desaparecer.

                      Comment


                      • Font Size
                        #12
                        Bem, estou chegando a conclusão que o VX do bagle não liberou o seu código final e sim um rascunho do que poderia ser o código. Pois, realmente estou encontrando diversos erros na compilação do código. E certamente esse trabalho irá levar bem mas tempo que o desejável. Terei que aprofundar bastante na pesquisa sobre esse código para chegar em algo funcional. Mas, de qualquer maneira o propósito esta sendo atingido que é o aprendizado.

                        Como havia dito, o arquivo “PassGen.asm” possui uma duplicidade de uma “Struct” que também existe no arquivo “windows.inc”. Paara resolver esses erros basta deletar ou comentar essa área e teremos uma redução da quantidade de erros na execução da compilação.

                        Conforme imagem que segue:



                        Veja que suregem dois erros refrente ao arquivo "StartUp.asm' e um erro referente ao arquivo "PassGen.asm"

                        Irei trabalhar nos erros do arquivo "StartUp.asm", ou seja nas informações das mensagens de erro, pegando-as como ponto de partida para solucionar os problemas.

                        Os termos de referencia são: "Process32Find" e "Process32Next"

                        Comment


                        • Font Size
                          #13
                          Bem ao vasculhar os termos "Process32Next" e "Process32Find", ha outras pessoas reclamando de tais erros ao compilar outros arquivos que o utilizam. O problema que na evolução do MASM algumas linhas do arquivo “kernel32.inc” foram alteradas. Existe um tópico sobre isso no fórum MASM, inclusive passei a solução para as pessoas que possuem o mesmo problema,

                          O Arquivo “kernel32.inc” da versão 11 possui as seguintes linhas de programação que fazem referencia a esses dois termos:



                          ;Process32FirstW PROTO STDCALL WORD,WORD
                          ;IFDEF __UNICODE__
                          ; Process32First equ <Process32First>
                          ;ENDIF


                          ;Process32NextW PROTO STDCALL WORD,WORD
                          ;IFDEF __UNICODE__
                          ; Process32Next equ <Process32NextW>
                          ;ENDIF

                          ; Novas Linhas
                          Process32First PROTO WORD,WORD
                          Process32FirstW PROTO WORD,WORD
                          Process32Next PROTO WORD,WORD
                          Process32NextW PROTO WORD,WORD



                          Depois de comentar as linhas anteriores e inserir as novas, vc deve salvar o arquivo "kernel32.inc" e recompilar o arquivo "Bagle.asm"

                          Com isso, os erros aprensentados anteriormente irão sumir:



                          Bem, espero que esse erro que ainda esta aparecendo seja único, e que tenha o mesmo principio.
                          Se alguem puder testar o que até agora eu fiz em diversas versões do masm e outro sistema operacional como o Win 98 SE, Fico agradecido com o retorno.

                          Comment


                          • Font Size
                            #14
                            Fazendo algumas pesquisas sobre o Bagle descobri que a parti da variante F, os arquivos com o vírus passaram a ser compactados em formato .ZIP e protegidos por uma senha criada aleatoriamente. No corpo das mensagens contaminadas era informada esta senha. Isto garantia que os usuários pudessem abrir manualmente os anexos, mas impedia que os filtros e sistemas antivírus automatizados fizessem o mesmo para analisar os arquivos. Bem esse PassGem é omodulo do codigo que faz isso.

                            Comment


                            • Font Size
                              #15
                              CONSEGUI COMPILAR O WORM BAGLE

                              Bem obtive exito, descobri que o codigo que estava usando estava com varios erros e linhas faltando, fucei outros codigos e compilou.
                              Bem, tive sorte, agora ja da pra começar a estudar pois ele compila
                              Agora como sempre fiquei curioso porque o outro codigo não compilava o que estav errado, mas não irei trabalhar nisso agora, pois a finalidade é estudar seu funcionamento.

                              Mas tarde irei postar o tutorial definitivo da compilação do worm Bagle.

                              Comment

                              X
                              Working...
                              X