Jump to content

Fernando Mercês

Administradores
  • Content Count

    628
  • Joined

  • Last visited

  • Country

    Brazil

Everything posted by Fernando Mercês

  1. Fernando Mercês

    MBLive v1

    Depois do sucesso da MBConf, teremos nossa primeira MBLive! hehe O objetivo é trocar uma ideia informal com nossa comunidade. Colá lá: https://www.instagram.com/mentebinaria_/ 🙂
  2. Fernando Mercês

    8.8 Solidaria

    until
    8.8 Solidaria, forma parte del programa de actividades organizadas por 8.8 Computer Security Conference, un evento 100% técnico y académico, que tiene como principal objetivo compartir información, democratizar el conocimiento y crear comunidad. https://welcu.com/chile-green-events/8dot8-solidaria
  3. Tem vários caminhos. O primeiro que me vem à mente é criar um buffer e usar a fread() para ler. Usando fopen, fread, fwrite, etc deixará seu programa portável, mas se a intensão é trabalhar em Linux e seus amigos somente, pode usar open(), read(), write() etc. Na aula 18 do curso Programação Moderna em C eu falo sobre como ler os bytes de um arquivo PE (mas pode ser qualquer outro, claro): Mas I/O é custoso. Talvez seja interessante você usar funções que leiam o arquivo inteiro para a memória e depois ler de lá. Neste caso eu não sei se tem algo portável, mas na libpe por exemplo, o @jweyrich optou por usar mmap() e a gente compila pra Windows usando o Cygwin. Mas se estiver falando de C++, aí eu não sei. Talvez o @fredericopissarra? Abraço!
  4. Nem imaginava que estas instruções funcionariam @Lucas Campelo! Sério mesmo? Não precisou adaptar nada? Abraço!
  5. Salve! Obrigado pela sugestão! A gente tá com bastante dificuldade em sacar a grana que arrecadamos no YouTube para as doações que rolaram na MBConf, mas assim que a gente conseguir, vamos considerar isso sim. @Paulo Arruzzo o que acha? Conseguimos replicar as categorias de apoio que já temos lá? Abraços!
  6. Boa tarde! Seria legal reportar o problema no Github dos caras. É difícil a gente conseguir confirmar isso... teria que analisar. De qualquer forma, no nosso curso é recomendado o PE Tools? Eu acho que não conhecia esse toolkit, não lembro de ter recomendado... rs Abraço!
  7. Show! Tudo é possível. rs Mas pelo que entendi você quer parar em todas as chamadas à funções externas, certo? Bem, nunca tentei para em todas. Daria pra fazeer pela aba "Symbols", mas como é payload, pode ser que esteja vazia. Parece um pouco de exagero, mas uma ideia é no Trace -> Trace into você colocar uma condição (Break Condition) onde o registrador EIP esteja fora da faixa das seções do binário. Por exemplo, num binário assim (Memory Map): Como as seções dele estão na casa dos 0x400000, a condição eip > 0x500000 vai fazer o x64dbg parar quando uma função externa for chamada. Você tem a faixa de endereços do teu payload, então é só adaptar. Mas eu ainda acho que monitorando as chamadas, seja com trace, logando ou com API Monitor ou outro e depois breakando em cada uma delas é mais negócio. Sabendo em qual chamada você quer parar, é só ir na Command Bar do x64dbg (lá embaixo) e digitar "BP CreateFileA" por exemplo. 😉 Abraço!
  8. A partir daí, eu acho que eu deixaria o payload rodar e monitoraria as chamadas (API Monitor, drltrace, etc) pra ver que funções do Windows o payload chama. Depois você pode voltar ao x64dbg e por breakpoint nelas para analisá-las. Acho mais importante/fácil que debugar todo o código. Outra opção é usar o trace do x64dbg pra você ver o caminho de códigos (saltos) que o payload executa e não perder tempo analisando junk code. O @Thiago de Queiroz mostrou como usa o trace na palestra dele na primeira MBConf. 😉 Abraço!
  9. Na verdade eu quis dizer que humanos trabalham tanto com números quanto com texto. 😉
  10. Boa, @HelderPereira! Que bom que tá curtindo. Já corrigi o texto lá e aproveitei pra subir umas mudanças que estavam planejadas. 😉 Abraço!
  11. Eu nem criei um projeto, @Matheus Miguel. Criei os dois arquivos e compilei com a linha de comando. 😉
  12. 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!
  13. 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!
  14. De nada 🙂 O código-fonte (à esquerda) é em C e pode ser compilado pra 16, 32 ou 64 sem problemas. Já o exemplo do código compilado à direita tá em Assembly e o fato de ter esse ".model small" acredito que só faça sentido em programas de 16-bits sim, mas aqui tem uma explicação mais completa: https://stackoverflow.com/questions/47252660/what-is-meaning-of-model-small-in-8086-programs Abraço!
  15. Isso é código de 16-bits. Nunca usei o MASM para tal, mas esse cara dá algumas dicas pra fazer funcionar: https://blog.fpmurphy.com/2017/11/16-bit-intel-assembly-on-windows-10.html - perceba que ele só rodou o binário no DOSBox (um emulador de DOS), mas compilou no MASM 6.14 e 7.10 (com a opção /omf). Enfim, dá um trabalhinho mas vai. 😉 Abraço!
  16. O que você tá buscando é por exibir strings UTF-8. Eu achava que o x64dbg suportava (não tenho como testar agora). Uma opção pode ser o plugin https://github.com/horsicq/stringsx64dbg 😉
  17. 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!
  18. 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!
  19. Fernando Mercês

    MBConf@Home v3

    until
    Nós de novo com nossa conferência, totalmente online e gratuita! Todas as informações sobre a MBConf estão disponíveis em http://menteb.in/conf . Se você já viu tudo lá e quer se registrar, basta confirmar sua presença aqui. Pouco antes do horário de início da conferência você receberá um link para ingressar nela. Agenda 10h00 - Abertura - Fernando Mercês 10h15 - Fio Cavallari - Decodificando malwares web: uma história de dor e sofrimento 11h05 - Thiago Marques 11h55 - Jan Seidl 12h45 - Bruno Oliveira 13h35 - Encerramento Lembre-se de compartilhar a conferência nas suas redes sociais. 😎
  20. 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.
  21. Mais uma: 1.Qual seria o risco no mundo real pra isso (já que você citou que está aberto e encontra com o shodan)? 🙂
  22. E aí, galera, fazemos uma v3? Se sim, respondam aí! Fazemos uma por mês? Uma por ano? Vocês escolhem aê, depois discutiremos e vamos ver o que sai. 🙂 Obrigado por participarem disso! 💚
  23. Pergunta que surgiu e não tempo ó: 2.é possível utilizar a GPU para processar mais rapidamente esses comandos?!?
  24. 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?
  25. 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: 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!
×
×
  • Create New...