Jump to content

All Activity

This stream auto-updates     

  1. Today
  2. Yesterday
  3. Era o que eu tinha em mente mesmo! 🙂
  4. Uma equipe de cientistas da computação da França e dos Estados Unidos estabeleceu um novo recorde ao fatorar o maior número inteiro na criptografia RSA-250. No total, foram necessários 2.700 anos de execução de núcleos de computadores para realizar o cálculo, realizado em dezenas de milhares de máquinas em todo o mundo ao longo de alguns meses. Segundo o Phys.org, a chave quebrada neste cálculo de registro é menor do que as chaves que normalmente seriam usadas, na prática, por aplicativos criptográficos modernos. A criptografia RSA é uma das mais usadas no mundo, e o tamanho da chave é um dos segredos da sua força. Não é recomendável o uso de uma chave tão pequena, que neste caso em questão foi de 829 bits. O NIST recomenda utilizar chaves de 2048 bits, ou mesmo 3072 bits se for necessário manter o sigilo dos dados em questão até 2030. Os pesquisadores utilizam esses cálculos para escolher as principais recomendações de força que permanecerão seguras no futuro próximo. Para isso, é necessário obter registros computacionais regularmente, visando a atualização dos parâmetros de segurança criptográficos e recomendações dos tamanhos de chave.
  5. @fredericopissarra Uma duvida, a arquitetura de harvard seria assim?
  6. Last week
  7. PS: "CAST" é uma daquelas palavras em inglês difíceis de fixar... "CAST" significa elenco (teatro), mas também "jogar" (como em "cast a spell" ou "jogar um feitiço"). Mas, também é o nome que se dá ao suporte usado quando quebramos um braço ou uma perna (um "molde")... Esse último parece ser o neologismo para "casting", no contexto de C...
  8. De novo, a dúvida ainda está confusa... "casting de função para string"? Em primeiro lugar, não existem "strings" em C (mas sim arrays de chars, onde o último char é um '\0')... Em segundo lugar, o identificador de uma função é um ponteiro, bem como o identificador de um array é convertido para um ponteiro. No seu exemplo, eu suponho que a função crc32() tenha o protótipo: uint32_t crc32( unsigned char *ptr, size_t size ); Quando o argumento ptr poderia ser, muito bem, definido como um ponteiro para void e, neste caso, qualquer casting de ponteiro na passagem deste argumento para a função seria supérfluo (void * aponta para qualquer coisa). Este é o mesmo caso de chamadas à função malloc(), por exemplo: char *p; p = malloc( 16 ); // aloca 16 bytes e devolve o ponteiro. Casting aqui é desnecessário porque malloc() tem o protótipo: void *malloc( size_t size ); Como o @Marioh disse ai em cima, casting é uma maneira de reinterpretar um tipo. Por exemplo: int x = 1, y = 2; float z; // O casting aqui é "obrigatório" porque senão a divisão será feita // com INTEIROS, resultando num INTEIRO que depois será convertido para // float... Com o casting, a divisão será entre valores em PONTO FLUTUANTE. z = (float) x / y; // z = 0.5; z = x / y; // isso resulta em 0.0! Casting pode ser usado para forçar a barra da atualização de um ponteiro também: char *p; ... // inicializa p em algum lugar... ... *(int *)p++ = 1; // aqui p[0]=1, p[1] até p[3]=0 (little endian). // mas, p será avançado em 4 posições... (sizeof(int)). Quando fazemos a conversão de tipos de menor precisão para maior, não precisamos de castring também. A promoção de tipos funciona direitinho... Para fazer a "demoção" de tipos o castring pode ser necessário para evitar avisos do compilador: char a; int b = 10; a = (char)b; // casting para evitar (?) warnings... nem sempre evita! b = a; // castring desnecessário. Agora... no seu exemplo, você está passando um ponteiro para uma função (checa) para a função crc32(). O que é válido, mas LER a memória onde a função foi codificada é um "comportamento indefinido" (undefined behavior) - escrever nessa memória, provavelmente causará um SEGMENTATION FAULT - um erro. Note que, no seu caso, o identificador checa equivale ao ponteiro: _Bool (*checa)( char *, int ); Se seu crc32() for definido como: uint32_t crc32( unsigned char *, size_t ); Então o pontiero terá que sofrer casting para evitar avisos... Note que isso pode não funcionar em todas as plataformas. Algumas assumem ponteiros para região de código com tamanho diferente da ponteiros para região de dados... Outras não permitem isso...
  9. Faz sentido mano. Deu pra dar uma esclarecida agora, brigadao cara
  10. Bom, o jeito que eu entendo os casts é simplesmente um modo de interpretar os bytes dentro daquele endereço. No código la o cara usa um char justamente pra poder acessar byte por byte, lembrando que na aritimética de ponteiro quando uma soma é feita, na verdade estamos somando n+(sizeof(elemento)). Acho que o @fredericopissarra deve saber explicar melhor. Fiz um programinha aqui: #include<stdio.h> #include<stdlib.h> int main(void){ FILE *fd = fopen("number","r"); unsigned long int li; fread(&li, sizeof(li), 1, fd); // os tamanhos so pra ajudar //printf("char: %zu\n", sizeof(char)); //printf("short: %zu\n", sizeof(short)); //printf("int: %zu\n", sizeof(int)); //printf("%zu\n", sizeof(long int)); // aqui vem os casts printf("%hhu\n",(unsigned char) li ); printf("%hu\n",(unsigned short) li ); printf("%u\n",(unsigned int) li ); printf("long value: %ld\n",li ); return 0; } number: [mario@zrmt forum]$ hd number 00000000 01 01 00 01 00 00 00 01 |........| 00000008 quando executado: [mario@zrmt forum]$ ./cast 1 257 16777473 72057594054705409 O char vai interpretar o primeiro byte, o short os dois primeiros, o int os quatro e o long todos os oito. Mas tambem posso estar terrivelmente errado.
  11. A Microsoft informou que o malware Emotet conseguiu derrubar toda a rede de uma empresa ao maximizar as CPUs nos dispositivos Windows e reduzir a conexão da Internet. O ataque ocorreu após um funcionário ter sido induzido a abrir um anexo de e-mail de phishing. O Microsoft Detection and Response Team (DART) informou que o vírus polimórfico se propaga por compartilhamentos de rede e protocolos herdados. Após abertura do e-mail infectado, os principais serviços da organização foram encerrados, e o malware evitou a detecção por soluções antivírus por meio de atualizações regulares vindas de uma infraestrutura de comando e controle (C2) do invasor. "[O vírus] se espalhou pelos sistemas da empresa, causando interrupções na rede e desligando os serviços essenciais por quase uma semana", informou a Microsoft. O DART emitiu ainda um relatório com os detalhes do ataque e como foi a resposta a ele.
  12. Opa, foi mal.Minha duvida eh, como que funciona o casting da funcao para uma string? Isso parece meio esoterico, pelo menos na minha cabeca ashduiahsduih
  13. Prefira sempre compilar seus códigos com a opção -O2 (pelo menos). Isso criará código mais "enxuto". A função checa(), por exemplo, ficará assim: ; Entrada: RDI = nome, ESI = serial ; Saída AL (0 = false, 1 = true). checa: movsx eax, BYTE PTR [rdi] ; Lê o primeiro byte. xor edx, edx ; edx = serialcorreto = 0 test al, al ; fim de string? je .endOfString ; sim, salta para a comparação. .loop: add rdi, 1 ; aponta para o próximo byte add edx, eax ; acumula o checksum. movsx eax, BYTE PTR [rdi] ; lê o próximo byte. test al, al ; fim de string? jne .loop ; não, volta ao loop. .endOfString: cmp esi, edx ; serial == serialcorreto? sete al ; ajusta AL. ret No entanto, não entendi qual é a dúvida, especificamente...
  14. Man eu acho que é exatamente assim, até mesmo se tu olhar o codigo de "crc32.c"... u_int32_t chksum_crc32 (unsigned char *block, unsigned int length){ register unsigned long crc; unsigned long i; crc = 0xFFFFFFFF; for (i = 0; i < length; i++) { // incremento // vvvvvv crc = ((crc >> 8) & 0x00FFFFFF) ^ crc_tab[(crc ^ *block++) & 0xFF]; } return (crc ^ 0xFFFFFFFF); } u_int32_t crc32(unsigned char *block, unsigned int length){ if(!initialized){ chksum_crc32gentab(); initialized = 1; } return chksum_crc32(block, length); } Já da pra perceber que o nome da variavel na "crc32" é "length"(suspeito...), além disso o "for" na "chksum_crc32" realmente "passa" length vezes, incrementando "block"(o address da funcao) cada vez que "passa". Mas assim, não sou especialista.
  15. Oi. Me pediram pra formular minha duvida melhor no video que o Fernando fez de CRC. Bixo, eu achava que entendia de C, mas o jeito que esse CRC funciona me bugou um pouquinho. Depois de pensar um pouco eu ate consigo ver oq esta acontecendo, mas eu nao sei se eh isso que esta acontecendo bool checa(char *nome, int serial) { int serial_correto = 0; while (*nome) serial_correto += *nome++; return (serial == serial_correto); } int main(void) { char nome[50]; int serial; uint32_t crc = crc32((unsigned char *)checa, 63); O unico jeito que eu vejo de isso funcionar do jeito que parece que esta funcionando eh se ele pegar todos os bytes que representam essa funcao: 000000000000129b <checa>: 129b: 55 push rbp 129c: 48 89 e5 mov rbp,rsp 129f: 48 89 7d e8 mov QWORD PTR [rbp-0x18],rdi 12a3: 89 75 e4 mov DWORD PTR [rbp-0x1c],esi 12a6: c7 45 fc 00 00 00 00 mov DWORD PTR [rbp-0x4],0x0 12ad: eb 15 jmp 12c4 <checa+0x29> 12af: 48 8b 45 e8 mov rax,QWORD PTR [rbp-0x18] 12b3: 48 8d 50 01 lea rdx,[rax+0x1] 12b7: 48 89 55 e8 mov QWORD PTR [rbp-0x18],rdx 12bb: 0f b6 00 movzx eax,BYTE PTR [rax] 12be: 0f be c0 movsx eax,al 12c1: 01 45 fc add DWORD PTR [rbp-0x4],eax 12c4: 48 8b 45 e8 mov rax,QWORD PTR [rbp-0x18] 12c8: 0f b6 00 movzx eax,BYTE PTR [rax] 12cb: 84 c0 test al,al 12cd: 75 e0 jne 12af <checa+0x14> 12cf: 8b 45 e4 mov eax,DWORD PTR [rbp-0x1c] 12d2: 3b 45 fc cmp eax,DWORD PTR [rbp-0x4] 12d5: 0f 94 c0 sete al 12d8: 5d pop rbp 12d9: c3 ret 0x55, 0x48, 0x89, 0xe5... etc, castar para char*, e fazer o calculo. Eh assim que funciona mesmo? Se eu estiver errado (O que eh bem provavel kkk) alguem me ajuda ai! Obg desde ja!
  16. DsMlw

    Cursos

    Opa, já ajuda bastante. Obrigado ao @Marioh @Fernando Mercês pelas dicas =). Abraço
  17. Fernando Mercês

    Cursos

    É, acho que seria muito legal ter um curso de Assembly no canal, mas não sei se sou a melhor pessoa pra isso viu. Tô aberto a propostas. kkkkk Por hora, conheço esse em Português ó: Abraço!
  18. Em meio à crise de coronavírus (COVID-19), muitos profissionais estão perdendo seus empregos, e na área de TI isso não é diferente. Para ajudar esses profissionais a se recolocarem no mercado de trabalho, algumas iniciativas foram criadas. O profissional de segurança Magno Logan lançou o MeGuiaAi Mentoria, programa totalmente gratuito com um treinamento on-line, exclusivo e personalizado sobre como se aplicar para vagas de TI (Dev, DevOps, SRE, SI) dentro e fora do Brasil. "O MeGuiaAi Mentoria é uma forma que encontrei de ajudar aqueles profissionais de TI que foram afetados direta ou indiretamente pela COVID-19, com um conteúdo detalhado e orientações práticas de acordo com a sua experiência e o seu cargo dos sonhos", diz Logan. O programa inclui dicas de inglês; revisão do CV; melhoria do LinkedIn; entrevista simulada; e trabalho remoto. O número de vagas limitadas, e para participar, basta preencher este questionário. Já a agência Listra criou a plataforma JobViral com o objetivo de conectar pessoas que perderam seus empregos aos empreendedores que ainda estão contratando ou vão voltar a contratar em breve. A plataforma inclui vagas em diversos setores. "Sabemos que estamos vivendo tempos difíceis com a pandemia da COVID-19. Com o isolamento social, muitos profissionais competentes e dedicados estão perdendo seus empregos e gostaríamos de ajudar de alguma forma", diz o site. Confira!
  19. Marioh

    Cursos

    Bom se tu sabe um pouco de C, o Frederico Pissarra tem três livros bem legais, e apesar de dizer que não quer ensinar, os livros são otimos para isso. Também tem o RE4B , que eu não sei se é bom, e o livro do Mercês.
  20. DsMlw

    Cursos

    Buenas galera do bem!! Pessoal, visto que a galera aí desenvolveu e está desenvolvendo treinamentos fantásticos, e que percebi um (pacotão de conhecimento) na parte de malware, onde há treinamentos de ER, C++ e agora está ocorrendo o curso do AMO, fica uma dúvida. Seria bacana desenvolver um curso de assembly também, não acham?
  21. Os ataques de phishing contra dispositivos móveis mais que dobraram em março no Brasil. Segundo o ZDNet, o aumento é decorrência do início da pandemia de coronavírus no país. Os dados são de um novo estudo da empresa de segurança Kaspersky. Durante os meses de fevereiro e março, a empresa de cibersegurança detectou um aumento de 124% nesse tipo de golpe. O crescimento está diretamente relacionado ao aumento de mensagens maliciosas enviadas pelo WhatsApp aproveitando o aumento da disseminação da COVID-19 no país. Para atingir as vítimas, os cibercriminosos enviam mensagens destinadas a roubar os dados pessoais, ou acabam induzindo as vítimas a baixarem aplicativos legítimos para que os invasores possam ser pagos por programas de afiliação. A adoção de trabalho remoto nas últimas semanas também aumentou a ação dos cibercriminosos, o que pode colocar em risco toda a infraestrutura de uma empresa se o dispositivo da vítima estiver conectado à rede corporativa. 👀
  22. Oi. Estou tentando resolver um desafio de pwn, e o desafio eh basicamente realizar um buffer overflow. Contanto, o binario esta com praticamente todas as opcoes de seguranca ativas: Eles dao o codigo fonte do arquivo para nos estudarmos: Pelo oq eu pude observar do codigo, eu preciso escrever o suficiente na variavel overflowme para que ele sobrescreva o valor do parametro key. Mas o binario esta com a opcao de canary ativada. Lendo por ai eu descobri que existem dois jeitos de lidar com o canary: fazendo leaking e brute forcing. Aparentemente o brute forcing eh para situacoes que o proprio binario faca forks dentro de si mesmo para executar um possivel parametro q eu passei pra ele (servidores pro exemplo). Entao soh me sobra a opcao de leaking, isso se eu estiver correto. Alguem consegue me ajudar? Obg desde ja!
  23. until
    A tecnologia não para. Por isso a IT Mídia criou o IT ForON, que traz uma série de encontros online e gratuitos contextualizados com o nosso momento, focados na comunidade de TI. Neste quinto e último episódio da série especial de entrevistas, conversamos com o futurista, professor e fundador da 5 Era, Gil Giardelli. Em pauta, a transição do modelo de sociedade atual para o 5.0, que ele acredita ser um futuro além da inovação. Além desse ponto, abordaremos se o momento atual deve acelerar a formação desse novo modelo de sociedade. Inscreva-se gratuitamente: https://register.gotowebinar.com/register/2106634997959945741
  24. until
    A tecnologia não para. Por isso a IT Mídia criou o IT ForON, que traz uma série de encontros online e gratuitos contextualizados com o nosso momento, focados na comunidade de TI. No quarto episódio da série especial, nosso bate-papo é com Silvio Meira, que tem feito diversas provocações nas redes sociais, principalmente às pessoas que clamam pela volta à normalidade. O que seria essa vida normal? Tudo volta a ser como antes. A aposta de muita gente é que não. Inscreva-se gratuitamente: https://register.gotowebinar.com/register/4503293269580853006
  25. until
    A tecnologia não para. Por isso a IT Mídia criou o IT ForON, que traz uma série de encontros online e gratuitos contextualizados com o nosso momento, focados na comunidade de TI. Neste terceiro episódio, a conversa é com o economista e inovador Guilherme Lichand. Ele que é um estudioso de políticas públicas e da economia de maneira geral, tentará nos ajudar com uma análise de como deveremos proceder para que o país tenha uma recuperação econômica adequada após o isolamento social. Inscreva-se gratuitamente: https://register.gotowebinar.com/register/1985826157857243150
  26. until
    A tecnologia não para. Por isso a IT Mídia criou o IT ForON, que traz uma série de encontros online e gratuitos contextualizados com o nosso momento, focados na comunidade de TI. Neste segundo episódio, conversaremos com o professor da Fundação Dom Cabral (FDC), Paulo Vicente Alves. Ele que em suas mais diversas projeções tinha falado sobre um momento crítico para o País entre 2019 e 2020, além da ameaça de uma pandemia. O momento agora é de olhar para frente. Como estaremos nesse cenário? Inscreva-se gratuitamente: https://register.gotowebinar.com/register/7994471386187940366
  27. Legal pessoal! Eu sempre utilizei a função scanf com um espaço à mais no final, quando queria ler apenas um caractere. Não sei onde aprendi dessa forma, mas a questão é que nunca passou pela minha cabeça o motivo de fazer isso. A explicação foi nota 10! Obrigado! Abraços.
  1. Load more activity
×
×
  • Create New...