Jump to content

Fernando Mercês

Administradores
  • Content Count

    666
  • Joined

  • Last visited

  • Country

    Brazil

Everything posted by Fernando Mercês

  1. Que legal. Um TODO que tenho é reescrever meus códigos usando a instrução syscall, que é mais atual que a int 0x80. Já pensou nisso? Seria legal estudar isso aqui. :-) Abraço!
  2. Oi Eduardo, Sinta-se livre para criá-lo! Acho que no fórum de Programação ele cai bem! Depois que criar eu o fixo e aí ele ficará sempre no topo, o que acha? :-) Abraço!
  3. until
    Estreia da sequência do treinamento de Engenharia Reversa I (antigo "Reversing From Scratch") em São Paulo! Para mais informações e inscrições, acesse o tópico do treinamento.
  4. Eu postei o evento do FLARE-on. Acho que é um bom começo!
  5. É, reconheço que certas decisões são difíceis ao escrever, porque realmente pode confundir. Entendo perfeitamente. Foi assim que fiz o curso também, e as sugestões de melhorias ficaram nos comentários do vídeo, como estão ficando aqui nos comentários do seu tópico. :-) Valeu!
  6. Que legal, @Eduardo Bittencourt! O fórum é pra isso mesmo! Acho fantástico quando alguém perde o medo e posta! haha Olha, eu não sou especialista no assunto mas, a meu ver, tem coisas que podem ser elevadas de nível, exatamente como o Frederico fez com as minhas aulas no canal. Mas são detalhes, tipo quando você fala que o ponteiro aponta pro endereço de uma variável, mas na verdade pode apontar pra qualquer lugar. Claro, normalmente tem um dado lá. rsrs Mas enfim, como falei, são pequenos detalhes que a revisão do Frederico me ajudou a ficar mais esperto sobre! Como você pediu feedback, vou listar aqui: Ponteiros são variáveis que contém um endereço de memória. É melhor usar o %p ao imprimir endereços de memória, porque ele já adapta pra arquitetura (%#x ou %#lx). Olha a confusão (em 64-bits): $ echo 'main(){ int x; printf("%x\n%p\n", &x, &x); }' | tcc -run - 4fce29ac 0x7fff4fce29ac Pro size_t, usa o %zu por conta do tamanho (o Frederico fala sobre isso nos comentários no canal) A memset() é pra escrever em memória. No código do item 6, aquele free() não vai rolar porque você incrementou o endereço do ponteiro. Uma saída pra isso seria usando um ponteiro auxiliar, pra guardar o primeiro endereço antes de incrementar (já que você usou isso pra iterar por ele): int main(void) { char *ptr = malloc(11); // Aloca 11 bytes, 10 bytes para a string, e 1 byte a mais para o nullbyte strcpy(ptr, "aaaaaaaaab"); char *aux = ptr; while (*ptr != 'b') { // percorre o loop até achar a letra b memset(ptr, 'x', sizeof(char)); // escreve o byte 'x' no endereço de memória apontado por ptr (a escrita rola sizeof(char) vezes - no caso aqui é 1) ptr++; // incrementa sizeof(char) bytes no endereço para o qual o ponteiro aponta (seu valor) } puts(aux); free(aux); return 0; } Ou fazer o loop com for. Mas no caso dessa função (colocar 'x' até encontrar 'b'), como é um caractere só, não precisa da memset(): while (*ptr != 'b') { *ptr = 'x'; // coloca o 'x' no endereço de memória apontado por ptr ptr++; // incrementa ptr, então ele vai agora apontar para a próxima letra } Dá pra fazer tudo numa linha só também, graças à magia negra precedência de operadores: while (*ptr != 'b') *ptr++ = 'x'; Mas de novo, tá muito bom o texto. O assunto parece complicado e assusta a galera, mas você tratou de boa. Isso é muito maneiro! Grande abraço!
  7. Galera da Microsoft acabade lançar um preview da nova versão do WinDbg. Confesso que nunca usei este debugger (simplesmente não me falta nada no OllyDbg), mas provavelmente deveria. :-) As novidades, pelo que vi, são basicamente na usabilidade. https://blogs.msdn.microsoft.com/windbg/2017/08/28/new-windbg-available-in-preview/
  8. Que maneiro, @Cabral! É interessante notar que nos dias de hoje conteúdo não falta né? Mas tempo e foco... hehehe Abraço!
  9. Fernando Mercês

    FLARE-on Challenge 4

    until
    Esse é o quarto CTF consecutivo de engenharia reversa, organizado pelo pessoal do FLARE Labs. Serão 12 desafios de ER este ano, com foco em Windows, mas também envolve Linux, Android e até Arduino! Mais informações em http://flare-on.com
  10. Acabamos de subir um vídeo sobre ele no Papo Binário: No vídeo comentaram que o autor usou o comando .shellcode e .read (pra ler da stack no caso, exatamente como mostro no vídeo) pra resolver um desafio de um CTF.
  11. A única conferência de segurança da Bahia chega a mais uma edição, imperdível pra quem é da área e estará pelo Nordeste do Brasil em Novembro! Corre porque os ingressos são limitados a 50 participantes! Mais informações em https://nullbyte-con.org
  12. Hoje eu vi os slides de uma palestra que rolou no último encontro da galera do C/C++ Brasil sobre o gcc. Tem muita coisa interessante, mas curti principalmente conhecer as variantes das opções de proteção de pilha. É meio raro encontrar material em Português nesse nível, então decidi compartilhar aqui o trecho em questão: O Gianni Rossi, autor da palestra, compartilhou os slides completos!
  13. Problema nenhum, brother. To testando porque tenho interesse mesmo. Pode certamente ser utilizado para fins maliciosos, se funcionar. Como você testou? Aqui não rolou localmente, mesmo com hxxp.
  14. Precisava deixar essa dica de um jogo que tenho jogado uns 5 min. por dia, todo dia, chamado Elevate. Trata-se de um brain trainer mas é preciso saber (ou estar estudando) inglês, único idioma disponível até o momento. Tem jogos de lógica, fala, escrita, matemática, todos muito bons! Não é um app para aprender inglês e sim melhorar as técnicas de comunicação e raciocínio. É de graça para jogar uma vez por dia até 3 treinos diferentes. Eu to curtindo muito e já tô quase aprendendo a fazer conta de dividir por 2 dígitos haha! Uma alternativa é o Luminosity e este sim tem em Português mas não joguei pra ver como é (não consigo me livrar do Elevate! haha). Abraços!
  15. Interessante, mas eu abri no browser um arquivo HTML com o seguinte conteúdo, cliquei no link e deu erro, como "esperado": <html> <body> <a href="httx://www.google.com">Google</a> </body> </html> O Safari mostra um erro e o Chrome estranhamente não faz nada (nem segue o link). Fiz algo errado? Abraços!
  16. Que dúvida interessante. Eu não sou "o desenvolvedor", mas imagino que a melhor forma seria o sistema 2 ter um plugin que puxasse os dados. Se tiver uma interface pra criar plugins nele, seria legal. Caso não tenha, então talvez seja mais rápido criar um script que conecte no banco do sistema 1 (SQL Server no seu caso) e insira as informações do jeito que você precisa no banco do sistema 2 (MySQL server). Para isso você vai precisar: Entender como os dados estão organizados no SQL Server do sistema 1. Entender como uma tarefa (ou o que você quer criar) é criado pelo sistema 2 no MySQL. Criar um script/programa que leia os dados necessários no SQL Server do sistema 1 e insira os dados no MySQL do sistema 2. Se topar o desafio de fazer (e, na boa, se isso é algo do seu trabalho eu dou a maior força pra você fazer e mostrar know-how), eu sugiro usar a filosofia do baby steps do XP (eXtreme Programming), que basicamente consiste em dividir seu problema em vários problemas menores, resolver um, testar e só passar para outro quando este estiver funcionando. Por exemplo: Conectar no SQL Server. Fazer um SELECT lá e exibir o resultado na tela. Filtrar seu SELECT para pegar o que você quer e imprimir o resultado na tela. Conectar no MySQL. Inserir uma tarefa. Transformar o que vem do SQL Server numa tarefa (parsing) e imprimir na tela. Inserir a tarefa no MySQL, ao invés de imprimir na tela. Como disse, não sou a melhor pessoa pra isso. Outros membros podem sugerir soluções muito melhores, mas eu faria meio que isso se fosse o meu caso, pelo menos com o conhecimento que tenho sobre o assunto atualmente, que é pouco. Tentaria Python ou talvez C# (sei lá, em ambiente Windows gosto de usar as coisas da própria Microsoft, que geralmente funcionam bem). Abraço!
  17. Ah, não me venha com gas e AT&T syntax :-D Acho que o pior é usar a int 0x80. Queria fazer uma versão nova. =)
  18. Fernando Mercês

    WinREPL

    Conheci hoje esse debugger que achei interessante pra simular código no Windows. Achei interessante a abordagem se o objetivo é estudar, simular algo ou rodar um shellcode (claro, nada que não dê pra fazer com o OllyDbg por exemplo). Ele não é pra debugar processos, mas pra assemblar diretamente o que precisar ser executado. No exemplo só fiz uma continha envolvendo os registradores EAX e EBX. Tem umas funções legais tipo alocar memória (comando .allocate) e pegar os enedereços de exports da kernel32.dll, mas não achei muito útil visto que teríamos que criar os argumentos "na mão" e não suporta inserir strings tipo "texto", então teria que ser os bytes hexa dos ASCII equivalentes. Mas de qualquer forma, é melhor que estudar Assembly pelo DEBUG do DOS! haha Alguma outra ideia do que fazer com ele? https://github.com/zerosum0x0/WinREPL
  19. until
    Debian Day é um dia para comemorar o aniversário do Debian. Onde as pessoas podem festejar da forma que mais lhe agradar em suas cidades. Este evento ocorre simultaneamente em várias cidades do mundo. Quer saber em quais cidades esse evento acontece? Veja aqui: https://wiki.debian.org/DebianDay/2017 E aqui: https://wiki.debian.org/DebianDay/2017/Brasil/SaoPaulo Inscrições e agenda no Meetup!
  20. No próximo domingo, 13 de Agosto lançaremos este portal de conteúdo, onde a comunidade vai ter uma área para discutir projetos e assuntos relacionados à tecnologia e segurança junto com a gente!
  21. É preciso ter o Node.js instalado pra usar essa: $ git clone https://github.com/devongovett/regexgen.git $ cd regexgen $ npm install regenerate jsesc $ node bin/cli.js casado cagado capado /ca[gps]ado/ $ node bin/cli.js 3300-4455 3300-4400 /3300\-44(?:00|55)/ $ node bin/cli.js 'Feliz 2015' 'feliz 2016' 'ferrou 2017' /fe(?:rrou 2017|liz 2016)|Feliz 2015/
  22. Após baixar e compilar o regldg: $ regldg 'ca[gps]ado' cagado capado casado
  23. $ date +'%s' 1433497577 # Convertendo Epoch para hora atual $ date -d @1433497577 Fri Jun 5 05:46:17 EDT 2015 # De novo, mas agora usando UTC $ date -d @1433497577 -u Fri Jun 5 09:46:17 UTC 2015 # No OS X $ date -ur 1433497577 Fri Jun 5 09:46:17 UTC 2015 # 18h15 do dia 3 de janeiro de 1980 para Epoch $ date -d '1980-01-03 18:15:00' +%s 315789300
×
×
  • Create New...