Jump to content

Fernando Mercês

Administradores
  • Content Count

    630
  • Joined

  • Last visited

  • Country

    Brazil

Everything posted by Fernando Mercês

  1. Gente, só um alerta pra gente se ater à parte técnica da discussão (isto é, quem quiser postar) pois é muito fácil sair do controle e começar o ataque pessoal e aí entra aquele processo de apagar mensagens, blá, blá, blá. Evitem por favor. 🙏 @Kleber Augusto Wilcke pelo que entendi o bin é um array de int. Bom, no meu sistema aqui não tem a itoa(). Acho que não é padrão essa função. Mas de qualquer forma, os caracteres em ASCII equivalentes aos números começam em 0x30 (que é o '0'). O 0x31 é o '1' e assim vai até 9. Sendo assim, se você somar 0x30 ao int, mas fazendo um cast pra char antes pra caber na string (que é um array de char), é uma forma. Tipo, o código abaixo imprime "01010101": #include <stdio.h> int main(void) { int bin[8] = { 0, 1, 0, 1, 0, 1, 0, 1 }; char s[9] = {0}; for (int i=0; i<8; i++) s[i] = (char) bin[i] + 0x30; puts(s); return 0; } Mas o ideal seria escrever uma função tipo a atoi(), que tivesse checagem de erros, etc.
  2. Galera, Tava analisando um certo aspecto do VPNFilter e vi que ele cria uma entrada em /etc/config/crontab. Vocês sabem dizer se esse caminho é padrão em dispositivos IoT? Pergunto pois pra mim sempre foi /etc/crontab. 🙂 Obrigado!
  3. 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_/ 🙂
  4. 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
  5. 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!
  6. Nem imaginava que estas instruções funcionariam @Lucas Campelo! Sério mesmo? Não precisou adaptar nada? Abraço!
  7. 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!
  8. 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!
  9. 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!
  10. 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!
  11. Na verdade eu quis dizer que humanos trabalham tanto com números quanto com texto. 😉
  12. Boa, @HelderPereira! Que bom que tá curtindo. Já corrigi o texto lá e aproveitei pra subir umas mudanças que estavam planejadas. 😉 Abraço!
  13. Eu nem criei um projeto, @Matheus Miguel. Criei os dois arquivos e compilei com a linha de comando. 😉
  14. 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!
  15. 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!
  16. 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!
  17. 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!
  18. 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 😉
  19. 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!
  20. 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!
  21. 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. 😎
  22. 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.
  23. Mais uma: 1.Qual seria o risco no mundo real pra isso (já que você citou que está aberto e encontra com o shodan)? 🙂
  24. 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! 💚
  25. Pergunta que surgiu e não tempo ó: 2.é possível utilizar a GPU para processar mais rapidamente esses comandos?!?
×
×
  • Create New...