Ir para conteúdo

Fernando Mercês

Administradores
  • Postagens

    1.507
  • Registro em

  • Última visita

  • Dias Ganhos

    160

Tudo que Fernando Mercês postou

  1. https://www.ysts.org/
  2. Opa, editei seu post pra conter o fonte direto no tópico, assim fica mais fácil para o pessoal ajudar. A propósito, onde exatamente você precisa de ajuda? É importante ler o seguinte post pra conseguir ajuda aqui: Abraço! 😉
  3. Boas vindas 🙂 Se você pede para o usuário digitar uma frase, na verdade você fica "refém" de uma ação de input, não de output. A string, depois de lida, será armazenada num buffer (uma variável), certo? Basta que você altere lá, em tempo de execução. Se quiser postar o programa posso tentar ajudar mais. Abraço!
  4. Que o número de malwares feitos para Linux vem aumentando todo mundo sabe. Passamos por botnets IoT, ransowmare alvejando VMware ESXi e ambientes de nuvem. Sem falar em rootkits ring 3, ring 0, ring o caramba a quatro. Não tá fácil. 😷 Para ajudar na busca por samples de malware similares, em abril de 2020 eu tornei público o Telfhash, uma espécie de imphash com anabolizantes para executáveis ELF. As principais diferenças são: Telfhash usa TLSH, um hash de similaridade, enquanto o imphash usa MD5. Telfhash não requer que o binário tenha símbolos. Telfhash é desenhado para ter o hash mais próximo possível entre versões do mesmo executável compiladas para diferentes arquiteturas. Deixarei os detalhes de implementação do Telfhash para um futuro artigo, mas se tiver curiosidade pode ler o artigo que escrevi em inglês. De qualquer forma, para minha felicidade, o algoritmo foi bem aceito pela comunidade. Além de pesquisadores, cataloguei os seguintes projetos/empresas usando o Telfhash: Trend Micro MISP McAfee FileInsight Plugin VirusTotal Malware Bazaar VMware AlienVault Por este motivo, eu considero o Telfhash a minha principal contribuição de âmbito técnico para a comunidade anti-malware. 💚 No entanto, há algum tempo me sinto um pouco triste de não ter tempo para fazer alterações de código no projeto. Originalmente em Python, eu queria reescrever em C para possibilitar a adição no YARA, dentre outras coisas. Para minha surpresa, no entanto, graças à mágica do software livre (tanto o Telfhash quanto a TLSH usam a Apache License), o pesquisador Karel Hájek, da Avast, reimplementou tanto o TLSH quanto o Telfhash em C e adicionou a função telfhash() na última versão do módulo elf do YARA. Portanto, a partir da versão 4.3.0 do YARA, você e o resto do mundo podem fazer: import “elf” rule minha_regra { condition: elf.telfhash() == "t166a00284751084526486df8b5df5b2fccb3f511dbc188c37156f5e714a11bc5d71014d" } Legal né? Tá na documentação oficial do YARA já. Fiquei feliz com essa notícia por dois motivos: Por ser de código aberto, outra pessoa fez o que eu queria ter tempo pra fazer: reimplementou o bagulho em C e subiu no YARA. Vai ajudar muito a comunidade mundial na luta contra malware Linux. Indiretamente, essa é minha segunda contribuição para o YARA. A primeira foi quando adicionei nele a capacidade de ler os overlays de arquivos PE em 2016. Espero que a comunidade ache a função telfhash() útil e que ela ajude a caçar uns elfos. 🧝‍♂️ Sem palavras para agradecer o trabalho do Karel! 🙂
  5. Fernando Mercês

    CERO

    Qual que é o contexto? Eu já não lembro de nada do CERO. 😄 Abraço!
  6. @Felipe.Silva será que alguma coisa mudou entre versões dos software utilizados? Era pra funcionar, não? Abraço!
  7. Oie! As entrevistas começam quando as inscrições terminarem. Pode ficar tranquilo que vamos contactar um a um. 🙂 Abraço!
  8. Eita, posta um hello, world aí pra gente ver! 🙂
  9. Atualização: Inscrições esgotadas, pessoal. Obrigado a todos pelo interesse! Entender o contexto racial no Brasil não é simples, mas nem por isso deixamos de tentar. No ano passado lançamos o programa Do Zero Ao Um, que formou pessoas pretas para trabalharem em computação com foco em programação. Foram seis meses de aulas diárias pela internet, uma turma maravilhosa, professores voluntários empenhados, mentores incríveis e uma parceria sem igual com empresas que ingressaram nossos alunos em seus processos seletivos. E os contrataram. Acertamos, erramos, mas mais importante, aprendemos. Este ano queremos aprender mais. Abrimos hoje a pré-inscrição para a turma 2023.1 do programa, que desta vez será mais enxuto em sua duração (quatro meses) e terá foco em formar futuros profissionais de segurança da informação, tendo em vista nossa relevância na área e a carência de profissionais qualificados. Tivemos que fazer escolhas, pois a experiência com turmas muito heterogêneas nos mostrou que precisamos focar. Por isso, estabelecemos um limite de idade para estar turma, mas planejamos beneficiar outras faixas etárias em programas futuros. O Do Zero Ao Um é uma das formas que encontramos de tentar ajudar na devida reparação histórica com o povo preto no Brasil. Infelizmente, nosso trabalho é para que o óbvio aconteça: que pessoas pretas ocupem o espaço que queiram e desejam estar. E se quiserem estar na computação ou na segurança da informação, não mediremos esforços para abrir estes lugares. Estamos dispostos a absorver as críticas e aprender com elas. Só não estamos dispostos a parar de tentar. Se você se considera uma pessoa preta e tem interesse em migrar para a área de segurança da informação, leia mais sobre o programa aqui. Compartilhe nas suas redes, pois o programa é online e gratuito e falantes de português do mundo todo podem participar. Assim como a vida profissional dos formados na turma 2022.1 mudou para melhor, queremos transformar a carreira dos alunos deste ano também. Contamos com o seu apoio para tal. Por um Brasil mais justo, mais igualitário, mais como deve ser. 💚
  10. Olá, @allanval! Talvez tenha, mas você precisa se certificar de não estar cometendo crime (checar a licença). Se for correção de bug de um software da qual a empresa/pessoa desenvolvedora faliu/sumiu, então pode ser ok, mas ainda assim, é melhor se certificar primeiro. Tecnicamente você vai precisar estudar engenharia reversa. Tá no lugar certo. 🙂 Aqui tem um guia. Abraço e boa sorte!
  11. Acho que entendo como está pensando, mas já adianto que é um método pouco efetivo. De qualquer forma, acredito que precise de um script na maioria dos debuggers. No x64dbg dá pra fazer com tracing também (Debug -> Trace over/into...): Explicando: A condição que coloquei em Command Condition é que o resultado da função dis.match(cip, "^j") seja True. Essa função vai disassembler a instrução apontada por cip (eip ou rip) e ver se esta começa com j. Quando tal condição for atendida, o que está em Command Text vai executar. Pus dois comandos: um pra colocar um breakpoint no endereço atual e outro para desabilitar esse breakpoint, de modo que a execução continue. Fazendo isso você terá um breakpoint desabilitado em cada salto. Basta reiniciar o programa, habilitar todos os BPs e rodá-lo para atingir teu objetivo. Repare que se usar Trace over, não vai pegar os saltos dentro das funções. Se usar Trace into pega, mas vai ser bem mais lento (tracing em geral é lento mesmo). Abraço.
  12. Show. Por nada. 🙂 Mesmo depois de instalar as runtime libraries conforme indiquei? Estranho... Abraço!
  13. Opa, acho que tem uma confusão aí... Você não tem que compilar o make. O arquivo Makefile é lido pelo comando make, que já invoca o compilador pra você. Ou seja, é uma facilidade. Então, ao invés de você usar o compilador diretamente (com o comando gcc, por exemplo), você usa o comando make, porque quem fez o Hyperion já colocou um arquivo Makefile na pasta do projeto pra facilitar tua vida, entende? No entanto, o Windows não vem com o comando make nativo. Por isso, no readme.txt do projeto há a recomendação que você use o MinGW ou o Visual Studio. Dá um trabalhinho em qualquer um dos casos e reconheço que nada disso é óbvio para quem não está acostumado. De repente eu consigo fazer um vídeo mostrando o processo. Por hora, compilei aqui pra você, mas não testei o programa e nem sei o que ele faz. Recomendo rodar só em VM. Ah, vai precisar das runtime libraries do Visual C++ pra rodar. Um abraço. hyperion.rar
  14. Opa, interessante. Não conhecia esse Hyperion. Dei uma olhada no readme.txt e tem isso: The crypter is a C project and can be compiled with the corresponding makefile (tested with Mingw and Visual Studio) Ou seja, a compilação é pra ser feita através do Makefile (comando make) no Windows (MinGW ou Visual Studio). De fato, o projeto inclui a windows.h e é um crypter pra PE. Tenta no Windows aí. 😉 Abraço.
  15. O recurso é consumido somente enquanto o VirtualBox estiver rodando alguma VM. Ao desligar a VM, tudo é liberado, como com qualquer outro software. Só o armazenamento em disco que se mantém, claro. 😉 Abraço.
  16. Quem segue o nosso fórum de releases já viu que o projeto GNU liberou a versão 3.40 do Binutils no último sábado. Baixei e compilei para ver o que tinha de diferente. Seguem os novos recursos direto do repositório oficial: Changes in 2.40: * Objdump has a new command line option --show-all-symbols which will make it display all symbols that match a given address when disassembling. (Normally only the first symbol that matches an address is shown). * Add --enable-colored-disassembly configure time option to enable colored disassembly output by default, if the output device is a terminal. Note, this configure option is disabled by default. * DCO signed contributions are now accepted. * objcopy --decompress-debug-sections now supports zstd compressed debug sections. The new option --compress-debug-sections=zstd compresses debug sections with zstd. * addr2line and objdump --dwarf now support zstd compressed debug sections. * The dlltool program now accepts --deterministic-libraries and --non-deterministic-libraries as command line options to control whether or not it generates deterministic output libraries. If neither of these options are used the default is whatever was set when the binutils were configured. * readelf and objdump now have a newly added option --sframe which dumps the SFrame section. A opção --show-all-symbols parece interessante de deixar sempre ativada, para o caso de qualquer endereço na saída do objdump coincidir com mais de um símbolo no binário. Não é comum, mas se acontecer, vale a pena saber. 🙂 Habilitar o output colorido em tempo de configuração me parece uma boa ideia e vai servir para os mantenedores de pacotes das distribuições deixarem o output do objdump colorido por padrão. Veja a diferença: Disassembly normal Disassembly colorido Lembrando que o objdump passou a suportar esse destaque de sintaxe em cores na versão 2.39 do Binutils. O que acontece agora é que existe uma opção em tempo de configuração (leia-se: ./configure) para deixá-la ativada por padrão. 😉 Outro destaque é o suporte ao dump de seções SFrame tanto no readelf quanto no objdump. Como a opção --gsframe já havia sido adicionada no as, o GNU Assembler, dá pra usá-la com a opção -Xassembler do gcc assim: gcc -Xassembler --gsframe -o binario.elf hello.c E com o readelf (ou objdump), usar a nova opção: $ objdump --sframe binario.elf binario.elf: file format elf64-x86-64 Contents of the SFrame section .sframe: Header : Version: SFRAME_VERSION_1 Flags: SFRAME_F_FDE_SORTED Num FDEs: 3 Num FREs: 8 Function Index : func idx [0]: pc = 0x1020, size = 16 bytes STARTPC CFA FP RA 0000000000001020 sp+16 u u 0000000000001026 sp+24 u u func idx [1]: pc = 0x1030, size = 16 bytes STARTPC[m] CFA FP RA 0000000000000000 sp+8 u u 000000000000000b sp+16 u u func idx [2]: pc = 0x1139, size = 59 bytes STARTPC CFA FP RA 0000000000001139 sp+8 u u 000000000000113a sp+16 c-16 u 000000000000113d fp+16 c-16 u 0000000000001173 sp+8 c-16 u As distros levam um tempinho até subir o novo pacote pra você atualizar no seu Linux. Se não quiser esperar, baixa do repositório oficial e compila. Seguem as instruções: $ wget https://ftp.gnu.org/gnu/binutils/binutils-2.40.tar.xz $ sudo apt install texinfo flex bison libgmp-dev libmpfr-dev gcc make $ tar xf binutils-2.40.tar.xz $ cd binutils-2.40 $ ./configure --enable-colored-disassembly # já testa a nova opção ;-) $ make $ ./binutils/objdump --version GNU objdump (GNU Binutils) 2.40 Copyright (C) 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty.
  17. Bem-vindo, Daniel! Dá uma olhada aqui e adapta seu post? Abraço!
  18. Pra você e sua família também. 🙂 Entendi. Bom, como exercício ok, mas em geral ID é numérico, até pela velocidade de comparação. 😉 Abraço!
  19. Opa, bem vindo à comunidade! Me parece que a sua função compareAluno() tenta advinhar o que é para comparar (ID, nome ou CPF) através do tamanho da string. Isso é um problema porque tanto CANOME quanto CACPF expandem para 12, fazendo com a que na hora de comparar o CPF, a comparação do if na linha 346 retorne verdadeiro e o programa compare um CPF com um nome. A propósito, qual o motivo de você utilizar char[] nos IDs? Se os IDs vão conter só números, podem ser do tipo int. Abraço.
  20. Oi @Washington. Feliz ano novo! 🙂 Mas é que você não apontou exatamente onde está sua dúvida, entende? Se você postar sua tentativa e apontar onde está sua dúvida, a gente tem como te ajudar melhor. Um abraço.
  21. Oi Eric. Na real você não falou sobre sua dúvida. Por favor, leia o seguinte post afim de adaptar seu tópico: Um abraço!
  22. Oi Washington. Não existe "sujeira". O conteúdo de um arquivo binário são bytes que não necessariamente possuem representação textual. Para entender melhor o que falei, recomendo ler a seção Númreros -> O Byte e os capítulos Cadeias de Texto e Arquivos completos deste livro. Abraço!
  23. Tudo bem e você? Tem comando no Linux pra isso. 😉 Outra opção (online) é o CyberChef. Abraço!
  24. Ah, você precisa do xcopy então. O xcopy copia um diretório e todos os seus subdiretórios e arquivos para um dado destino. Isto é chamado de cópia recursiva. 😉
  25. Hi @Mohsen. Welcome to our community. 🙂 A few things you should consider: Please edit your current post and format your C code as code by selecting it and clicking the <> button in the text editor. 😉 To your main problem: you are returning a pointer to a local (stack-allocated) buffer that only exists while get_time() is running. You can't do that. In C, you have a few options: Declare you return variable in the function that calls the desired function (in your case, it'd be in main()) and pass it to the desired function as reference. Here's an example: void get_time(char *currentTime) { // 3. receive the buffer as reference snprintf(currentTime, 80, "%s", "my text"); // 4. write to the buffer } int main(void) { char currentTime[80]; // 1. declare/allocate the buffer before calling the function get_time(_timstamp, dt, currentTime); // 2. pass a reference to the buffer printf("current time: %s \n", currentTime); // 5. buffer contains the string set by get_time() return 0; } As you will notice, I didn't complete the exercise for you. Instead, I've pointed out one way to solve it. 😉 You could also use a global variable or a dynamically-allocated buffer, but your solution depends on what you've studied. If you never studied pointers, then use a global variable. If you didn't study dynamic memory allocation, then use the pointer reference as shown. Other important fixes in your code: You mixed C and C++ headers and functions and this can become very messy very quickly. For example, string is different from char*. Mixing them will thrown errors. So, choose one language and stick with it. In your case, I recommend choosing C. Here's the fixes you need for that: Replace <string> by <string.h>. Remove <iostream>. Remove <cstring>. Remove the using directive. Don't use string. Use char* instead. Replace main() by main(void). sprintf() is insecure and decprecated. Use snprintf() instead. The latter needs the maximum number of characters to write (use the same size you've declared the buffer with). Surely there's more room for improvement, but I'll stop here for now. 🙂 Good luck!
×
×
  • Criar Novo...