Jump to content

Fernando Mercês

Administradores
  • Content Count

    620
  • Joined

  • Last visited

  • Country

    Brazil

Posts posted by Fernando Mercês


  1. Citar

    _USER_FORCE@52 = @ILT+65(_USER_FORCE@52)

    Interessante... eu nunca tinha visto esse padrão de nome. Não me parece o name decoration / mangling normal de C++. E mesmo assim o extern "C" deveria impedir a decoração, claro, já que C não tem sobrecarga de funções. Será que não há uma função com o mesmo nome nessa pch.h?

    Achei uma discussão longa de um usuário com um problema muito parecido, inclusive ele cita o mesmo padrão de nomes aqui.

    Bem, eu iria com baby steps, saca? Compila a menor possível, checa os exports e, se tiver tudo certo, vai crescendo o código e checando os exports da DLL compilada, até encontrar o problema. Por exemplo, o código abaixo foi sem problemas aqui:

    // user_force.h
    
    int _stdcall USER_FORCE(int a, int b);
    
    BOOL APIENTRY DllMain( HMODULE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
                         )
    {
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
        }
        return TRUE;
    }
    // user_force.cpp
    
    extern "C"
    
    __declspec(dllexport) int _stdcall USER_FORCE(int a, int b) {
        return a + b;
    }

    Compilação:

    c:\Users\admin\Documents>cl /LD user_force.cpp
    Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    user_force.cpp
    Microsoft (R) Incremental Linker Version 9.00.30729.01
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    /out:user_force.dll
    /dll
    /implib:user_force.lib
    user_force.obj
       Creating library user_force.lib and object user_force.exp
    

    Checagem dos exports:

    c:\Users\admin\Documents>dumpbin /exports user_force.dll
    Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    
    Dump of file user_force.dll
    
    File Type: DLL
    
      Section contains the following exports for user_force.dll
    
        00000000 characteristics
        5ECD966F time date stamp Tue May 26 23:21:35 2020
            0.00 version
               1 ordinal base
               1 number of functions
               1 number of names
    
        ordinal hint RVA      name
    
              1    0 00001000 USER_FORCE
    
      Summary
    
            3000 .data
            1000 .pdata
            2000 .rdata
            1000 .reloc

    Daí seria ir acrescentando o código e recompilando toda hora, até achar o problema... Mas pode ser que alguém saiba exatamente o que ocorre aqui e ajude também.

    Abraço!


  2. Você tem algum serviço escutando na porta 80 no seu host? Porque você tá enviando o pacote, mas se não tiver ninguém pra responder, não vai ter resposta mesmo. 😉

    Você não falou em que SO está, mas se for Linux/macOS, experimenta escutar com o netcat, numa porta alta pra não precisar de root, por exemplo:

    $ nc -vlp 3000

    E depois tenta enviar seu TCP SYN pra ela usando o Scapy (dport=3000 no teu código).

    Enfim, basicamente você precisa falar com uma porta que esteja aberta (haja algum serviço escutando nela).

    Abraço!


  3. Opa, que legal que tá pondo isso em prática! O @Thiago de Queiroz certamente pode explicar melhor, mas acredito que a forma como esteja fazendo não seja muito efetiva porque estás usando trace over (ou seja, não entra nas funções) e a função que é chamada quando qualquer evento na janela do programa ocorre (tipo o clique de um botão) não está na WinMain (que é essa que você postou o disassembly).

    Esse código de 4010F1 até 40111B é um loop clássico de uma janela usando a Win32 API. Antes de ele ser executado, é definida uma estrutura do tipo WNDCLASSA, que vai ser registrada com a RegisterClassA(). No teu código, a inicialização dessa estrutura começa em 40101D. Conforme a documentação, o segundo elemento dela é o seguinte:

    lpfnWndProc
    
    Type: WNDPROC
    
    A pointer to the window procedure. You must use the CallWindowProc function to call the window procedure. For more information, see WindowProc.

    "Window procedure" que dizer: a função que vai tratar os eventos da janela. No caso do teu programa, o valor deste elemento é colocado com esse MOV em 401027. Como o x64dbg já o reconhece como WndProc, você pode ddar um Ctrl+G e digitar "WndProc" pra cair nela. Recomendo fazer um trace over no mínimo a partir dela, mas ainda podem haver mais calls que vão fazer o trace parar.

    É que a abordagem de "traçar tudo" que você tá tentando fazer é muito custosa. Tracing é incrível mas na minha opinião é pra ser usado a partir de algum ponto. Não sei o que os demais pensam sobre, nem uso muito tracing também. Mas enfim, belo tópico! 😉

    EDIT: Outra coisa que lembrei é que você pode usar Message Breakpoints como neste tutorial. Ao parar na USER32.DLL, ao invés de fazer o esquema de breakpoint on execution na .text, pode simplesmente ver a call stack (Ctrl+K) e ir no último endereço do módulo principal. Vai parar direto no código do clique do botão OK da janela "Register". Aí é só tracear de lá. 😉

    Abraços!


  4. Sim, é uma fraqueza em minha opinião também. Eu recomendo usar apps que tenham suporte à senha/digital/reconhecimento facial etc ao serem abertos. No iOS, conheço o Outlook (free) e recentemente conheci o Canary (pago). Pra Android não sei.

    Dá uma olhada nesse artigo também ó: 

     

    Abraço!


  5. Oi Gabriel!

    Que eu lembre o instalador do IDA já instala tudo que precisa. Se for original você pode postar no fórum deles, mas se for piratex aí fica difícil, pois o instalador pode estar zuado, pode até conter vírus, enfim, não sabemos. 😞

    Abraço.


  6. Perguntas que surgiram no chat:

    1.Em um CTF, é possível que as máquinas virtuais vulneráveis passado para o participante de alguma forma ao atacar a máquina, há possibilidade de serem atacados?
    2.como faço para treinar nesses ctf?
    3.tem algum site para iniciantes?


  7. Hoje eu tava lendo um blogpost da Sophos, LockBit ransomware borrows tricks to keep up with REvil and Maze, quando esse trecho me chamou a atenção:

    Citar

    From a first glance at the recent LockBit sample with a reverse-engineering tool, we can tell that the program was written primarily in C++ with some additions made using Assembler. For example, a few anti-debug techniques employ the fs:30h function call to manually check the PEB (Process Environment Block) for the BeingDebugged flag, instead of using IsDebuggerPresent().

    Pelo que entendi os autores basicamente implementaram o que a IsDebuggerPresent() já faz. Dá pra ver o código dela por qualquer disassembler. No caso usei a linha de comando do x64dbg (pode carregar qualquer binário, mesmo que ele não importe a IsDebuggerPresent):

    d IsDebuggerPresent
    

    Vai cair em algo como:

    7524A480 | FF25 680E2B75       | jmp dword ptr ds:[<&IsDebuggerPresent>]  |

    Aí é só dar [ENTER] que o x64dbg segue o salto e mostra o dissasembly da IsDebuggerPresent:

    769A4940 | 64:A1 30000000      | mov eax,dword ptr fs:[30]                |
    769A4946 | 0FB640 02           | movzx eax,byte ptr ds:[eax+2]            |
    769A494A | C3                  | ret                                      |

    Já que é na KERNELBASE.DLL que a implementação da função realmente está, poderia ter digitado direto no x64dbg também:

    d kernelbase.IsDebuggerPresent

    Tem mais detalhes sobre essa BeingDebugged flag na aula 24 do CERO. 😉

    Fiz tópico só pra dar um exemplo de que mesmo coisas básicas vistas no CERO estão por aí nos blogs das principais empresas de segurança do planeta, ou seja, o conhecimento que trabalhamos aqui é útil profissionalmente. Podem ter certeza. Por mais iniciante que seja, a gente busca entregar coisas sólidas, que certamente são usadas no mercado.

    Abraço!


  8. Oi Halison!

    Olha, não acho que exista uma "forma correta", viu... Se você patcheou ou mesmo impediu "por fora do malware", ou seja, pelo sistema que a ecriptação ocorresse, em minha opinião já foi. Tá feito. Em vários casos nem é necessário impedir a encriptação, ou esta é feita a cada execução, tanto faz. Na aula 3 do AMO pus em prática a ideia de patchear a função que encripta, mas tem certamente muitas outras maneiras e acho que a certa é a que funciona. 🙂

    Como no seu caso funcionou, parabéns! Em minha experiência, análise de malware não é um conjunto de técnicas, é uma aplicação de vários conhecimentos que quase sempre resulta em diferentes soluções para diferentes problemas mesmo.

    Abraço!


  9. @maycon uma pergunta que resgatamos do chat:

    2.Se o código smali é similar a um disassembly e ele tem equivalentes diretos com o próprio código java, qual a vantagem da existência do código smali?

    A propósito, pode por seus slides no primeiro post deste tópico? Só editar como quiser. 😉

    Abraço!


  10. @Thiago de Queiroz seguem mais perguntas que surgiram no chat:

    1.Qual a diferença deste debug para o WinDbg?
    2. Este debug tmb converte o código para c?
    3. Isso funciona mesmo se o executável for gerado sem as diretivas de debug?
    4. Os endereços de memória das áreas de .txt, .data e .rsrc se encontram no cabeçalho PE?

    Abraço!


  11. @Sergio Prado obrigado pela palestra! Seguem as perguntas que resgatamos do chat:

    1. Pls qual o endereço do site de exploiters de hardware?
    2. É possível acessar a Jtag de Macs para análise de hardware para fins de manutenção?
    3. Por onde um iniciante pode começar a estudar hardware hacking?
    4. Gostaria de perguntar se existe uma opção ao bus pirate para dump de memória eeprom? e se o ch341a pode ser utilizado para essa finalidade?
    5. O que os fabricantes estão fazendo para bloquear a leitura através desses vetores? (UART e JTAG).
    6. Como compilar o firmware extraido do binwalk em um bin e enviar ele de novo pro device?
    7. existe um curso para iniciante no site de Introdução ao Hardware Hacking?

    Ah, pode editar o post inicial do tópico pra inserir os slides de sua palestra por favor? Fique à vontade para editar o texto também, se precisar.

    Grande abraço!


  12. @rmarinho seguem as demais perguntas que resgatamos do chat! 🙂

    10. A detecção desses dispositivos vulneráveis é feita normalmente por onde? ferramentas como o shodan?
    11. Skaros e checkers funcionam no mesmo princípio de namenode e datanodes em clusters? Derrubando os namenode (skaros) derruba a botnet...não digo tecnicamente, mas na infra, abs.
    12. Na pesquisa houve colaboração de outros profissionais de outros países?
    13. Essa ausência de comandos para atacar terceiros não pode ter sido por conta do bloqueio que você fez quanto às comunicações de saída, permitindo apenas pacotes SYN?
    14. É possível através da Botnet, resolver questões das credenciais? Exemplo: COmando de mudança de senha?
    15. Os Skaros tinham controle independente da rede ou tinha um nível acima de controle sobre eles, foi possível identificar isso?

×
×
  • Create New...