Ir para conteúdo
  • Cadastre-se

Todas Atividades

Atualizada automaticamente     

  1. Hoje
  2. domedfd

    O que é um "authority path-abempty" em uma sintaxe URI

    Muito obrigado @gnoo o texto e muito bom e explica bem, agora comprendi melhor o que e, e como funciona! :)
  3. Ontem
  4. Jaguar

    Como encontrar a função main?

    Boa tarde amigos , tentei rodar o mainsearch.py em cima de um executável binário e não obtive resposta da main .. esse script roda em Linux 64 bits ?
  5. Última semana
  6. gnoo

    O que é um "authority path-abempty" em uma sintaxe URI

    Olá @domedfd tudo bem, lê este texto primeiro até ao fim ( não sei se já viste ) https://woliveiras.com.br/posts/url-uri-qual-diferenca/ há uma questão parecida à tua no stackoverflow pode ser que ajude https://stackoverflow.com/questions/40905666/what-does-abempty-mean-in-the-term-path-abempty-in-the-context-of-rfc398 no google tradutor o que podes fazer para melhorar a tradução é traduzir um parágrafo de cada vez, dá trabalho dessa forma ...mas compensa o esforço.
  7. Ola galera, Eu estava intentando entender como funcionao as URL e a diferenca entre URL e URI, entao comecei a ler os RFC1738 E RFC3986 somente que en uma parte explicando o hier-par da RFC3986 fala sobre authority path-abempty e nao consigo entender ao que se refere exatamente. tambem fiz uma procura no goole mais nao encotrei conteudo em portugues, somente en ingles e como nao sei ingles com o google translate acho que piorou kkkk.. bom se aguem puder me dar uma ajuda estaria muito grato. links: https://tools.ietf.org/html/rfc3986#section-3 https://tools.ietf.org/html/rfc3986#section-3.3
  8. Augusto

    Microcontroladores protegido

    Boa noite a todos. Chegou na minha oficina uma placa de um plotter para conserto, trabalhando na placa descobri que o defeito estava no microcontrolador 430f247 de encapsulamento TQFP 64. Passei a situação para o cliente que mesmo que eu trocasse o microcontrolador pelo um novo eu não teria o arquivo bin para copiar no microcontrolador novo, aí o cliente min falou que tem uma outra máquina igual funcionando, aí perguntou se não dava para copiar o arquivo da placa da máquina que estava funcionando, aí eu falei que achava que dava. Peguei a placa funcionando e tentei copiar o arquivo do micro mais dava que o micro estáva protegido. Aí percebi que o microcontrolador está protegido contra copiar. Aí pergunto ao meus colegas se teria alguma maneira de copiar um microcontrolador protegido. Agradeço dês de já.
  9. Creio que pelo hardware que você possui, tanto o xfce quanto o lxde não são a melhor alternativa. Acho que você deveria procurar por uma distribuicao mais minimalista ainda, como o chunchband++ que e baseada no debian. tem outra baseada no slackware chamada slax, ou instalar um arch linux e montar a distro com o que você precisa, mas nao se esqueca das limitacoes que voce possui.
  10. DsMlw

    Malwares que identificam VM

    Opa, beleza @Leandro Fróes , e contigo? Poise foi o que imaginei, cada binário tem seu método para isso. Tentei fazer o download dele agora, mas o link que redirecionava para o malware está down. Valeu aí. abraços
  11. Leandro Fróes

    Malwares que identificam VM

    Boa tarde @DsMlw, tudo bem? Legal que está iniciando no curso =). Sobre "pular" a técnica... isso depende muito da técnica em si, saca? Não tem um método genérico pra todas, pelo menos eu não conheço. Você tem mais alguma informação sobre? Abs
  12. DsMlw

    Malwares que identificam VM

    Boa tarde, galera! Atualmente estou fazendo algumas análises de malware, e ultimamente estou me deparando com alguns binários que verificam se estou em um ambiente virtualizado ou não, se estiver ele não executa e acaba deletando o binário. Como estou iniciando agora o curso de ER (que nosso amigo Mercês está fazendo e disponibilizando no youtube) não estou conseguindo(ainda) identificar onde o binário checa a utilização de VM e tal. A questão acaba se tornando a seguinte, para pular esse processo de verificação de VM que o binário faz é muito complexo? Forte abraço.
  13. gnoo

    Indicação de Livro socket em C

    Os conceitos apresentados nesse livro também dá para para outras linguagens eu uso bastante coisas em Python, apesar da sintaxe da linguagem ser diferente as bases estão todas ai.
  14. Eduardo Cintra

    Indicação de Livro socket em C

    Opa, vlw demais cara!
  15. Fernando Mercês

    Comparando executáveis

    Saudações, leitores do Mente Binária! Hoje me deu vontade de falar sobre uma tarefa que eventualmente preciso fazer na empresa onde trabalho, que é a de verificar as diferenças entre arquivos executáveis, normalmente de Windows, também conhecidos por executáveis PE. Há vários usos ao comparar binários. É possível avaliar o que mudou na versão atual de um software em relação à anterior, descobrir o que muda em cada sample diferente de uma mesma família de malware, etc. Esses dias mesmo me foi pedido que verificasse a diferença entre 6 arquivos maliciosos, que compartilho abaixo como fiz. Reconhecimento básico Os arquivos que recebi tinham seu hash SHA-256 como nome. A primeira coisa que fiz foi checar seu tipo (usando comandos do macOS, mas o Linux tem comandos similares): $ file * fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04: PE32 executable (GUI) Intel 80386, for MS Windows fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9: PE32 executable (GUI) Intel 80386, for MS Windows fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05: PE32 executable (GUI) Intel 80386, for MS Windows ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd: PE32 executable (GUI) Intel 80386, for MS Windows ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640: PE32 executable (GUI) Intel 80386, for MS Windows ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e: PE32 executable (GUI) Intel 80386, for MS Windows Só para garantir, também chequei o SHA-256 deles e realmente bateu com o nome, o que era esperado: $ shasum -a256 * fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04 fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04 fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9 fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9 fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05 fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05 ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640 ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640 ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e PS.: No Linux o comando seria sha256sum ao invés de shasum -a256. O próximo passo foi checar o tamanho deles: $ wc -c * 396973 fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04 396973 fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9 396973 fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05 396973 ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd 396973 ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640 396973 ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e 2381838 total Aqui apresentou-se um caso atípico: os binários possuem exatamente o mesmo tamanho! Já pensei que havia grandes chances de as diferenças entre eles serem mínimas: provavelmente algo usado pelo autor do malware só para "mudar o hash" na tentativa de evitar que os antivírus detectem os arquivos idênticos, por exemplo. Essa tentativa é na verdade frustrada visto que, ao contrário do que muitos pensam, os antivírus não detectam malware por hash normalmente, já que isso seria muito custoso do ponto de vista do desempenho (seria preciso ler todos os bytes do arquivo!) e também seria muito fácil tornar um novo arquivo indetectável - bastaria alterar um único byte para um hash final completamente diferente. Comparação de estrutura Se estivéssemos tratando arquivos de texto, poderia simplesmente usar o comando diff, mas o assunto aqui é PE, então algo interessante de verificar é sua estrutura, que consiste basicamente em cabeçalhos, localizados antes das seções. Se você não sabe do que estou falando, recomendo os seguintes recursos: Posts do @Leandro Fróes sobre o formato PE e suas referências. Capítulo sobre PE do livro Fundamentos de Engenharia Reversa. Aulas 5 e 6 do CERO, nosso Curso de Engenharia Reversa Online em vídeo. Digitar "PE executable" no Google ler o que curtir. Depois dessa imersão no mundo dos executáveis PE, não tenho dúvidas de que você vai se apaixonar por eles também! 😍 Voltando à comparação, o que eu quero dizer com estrutura? Bem, os valores dos campos dos cabeçalhos. Por exemplo, para ver o cabeçalho COFF de um arquivo PE, usei o readpe, parte do kit de ferramentas pev: $ readpe -h coff fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04 COFF/File header Machine: 0x14c IMAGE_FILE_MACHINE_I386 Number of sections: 5 Date/time stamp: 1401620468 (Sun, 01 Jun 2014 11:01:08 UTC) Symbol Table offset: 0 Number of symbols: 0 Size of optional header: 0xe0 Characteristics: 0x102 Characteristics names IMAGE_FILE_EXECUTABLE_IMAGE IMAGE_FILE_32BIT_MACHINE Mas não, não usei o pev por saudosismo! A ideia de ter uma saída em texto da estrutura desses binários é depois usar o comando diff para compará-las. A primeira coisa que precisei então foi gerar um .txt contendo toda a estrutura, e não só o cabeçalho COFF, para cada um dos arquivos. Uma repetição em bash dá conta do recado: $ ls -1 readpe_output_* readpe_output_fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04.txt readpe_output_fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9.txt readpe_output_fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05.txt readpe_output_ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd.txt readpe_output_ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640.txt readpe_output_ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e.txt Eu usei o readpe sem nenhuma opção, assim ele imprime todos os cabeçalhos, incluindo os de seções. Só pra começar fiz um diff do primeiro para o segundo e não houve qualquer saída, ou seja, a estrutura dos arquivos eram idênticas! E eram mesmo: $ wc -c readpe_output_* 21627 readpe_output_fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04.txt 21627 readpe_output_fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9.txt 21627 readpe_output_fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05.txt 21627 readpe_output_ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd.txt 21627 readpe_output_ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640.txt 21627 readpe_output_ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e.txt 129762 total $ md5 !$ md5 readpe_output_* MD5 (readpe_output_fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04.txt) = 05b36b89b1165b3d619bee16f8a1d7f7 MD5 (readpe_output_fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9.txt) = 05b36b89b1165b3d619bee16f8a1d7f7 MD5 (readpe_output_fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05.txt) = 05b36b89b1165b3d619bee16f8a1d7f7 MD5 (readpe_output_ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd.txt) = 05b36b89b1165b3d619bee16f8a1d7f7 MD5 (readpe_output_ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640.txt) = 05b36b89b1165b3d619bee16f8a1d7f7 MD5 (readpe_output_ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e.txt) = 05b36b89b1165b3d619bee16f8a1d7f7 Os hashes MD5 da saída em texto da estrutura de todos os arquivos batem. Eles são mesmo iguais estruturalmente! Passado o choque, percebi que teria que comparar o conteúdo das seções (código, dados, talvez resources, etc). Aí fui obrigado a inicializar minha VM do Janelas mesmo... Comparação do conteúdo das seções Existem alguns softwares que trabalham com PE e possuem funções de comparação de dois executáveis. Eu costumava usar o Cold Fusion (um antigo gerador de patch) pra isso, mas ele tem alguns bugs que me impediram. Achei a mesma função no Stud_PE, mas ele localiza arquivos por extensão na janela de comparação, então renomeei o primeiro e o segundo arquivo que tinha para a.exe e b.exe respectivamente. Ao abrir o a.exe no Stud_PE, usei o botão "File Compare", selecionei o método "Binary", setei o "Starting from" pra "Raw" e cliquei em "Compare": Se você não entendeu por que fiz isso, volte uma casa ou leia os tutorias de PE que indiquei. Ou pergunte que eu falo. 😍 Bem, entre esses dois caras então havia 9 bytes que o diferenciavam e eu já tinha os offsets a partir do início do arquivo. Agora é descobrir em que seção eles estavam no PE, o que são, o que comem e como eles vivem. 😎 Descobrindo como as diferenças são usadas Abri o executável no x64dbg (na verdade no x32dbg, já que este binário é de 32-bits) mas percebi que o entrypoint estava no endereço 013706AA. Como o ImageBase deste binário é 00400000, percebi que o ASLR estava habilitado e, antes de continuar , desabilitei-o com o DIE, como mostro neste vídeo rápido no canal Papo Binário: Antes de reabrir o binário no x32dbg, convém lembrar que eu tinha um offset e precisava convertê-lo para endereço virtual (VA). Isso é feito com o que alguns analisadores de PE chamam de FLC (File Location Calculator). O DIE tem, o Stud_PE tem e o pev também tem, com a ferramenta ofs2rva: $ ofs2rva 0x4c451 a.exe 0x4dc51 Mas pra não você não me acusar de saudosismo de novo, vou mostrar no Stud_PE 😄 Percebe que o Stud_PE já diz que este byte pertence à seção .rdata, o que à esta altura você já sabe, caso tenha feito o trabalho de casa de estudo do PE, que é provavelmente uma seção de dados somente-leitura, então há grandes chances de nossa sequência diferentona pertencer à uma string constante, por exemplo. Fui ver no debugger como é que tava a festa. Abri o a.exe lá e dei um Ctrl+G no Dump pra ir pro endereço 44DC51: De fato tinha uma string lá: zuk0KRrGrP, mas ela na verdade começava em 44DC44 e pra saber quando ela era usada no malware, coloquei um breakpoint de hardware no acesso ao byte, que é o primeiro da string e cheguei à conclusão de que, como o nome sugere, é realmente uma string de identificação da campanha do malware, sempre no mesmo offset (calculei de novo usando FLC). Agora foi só ver a dos outros e novamente recorri à uma ferramenta do pev (💚), a pestr: $ for i in *; do echo $i; pestr -so $i | grep 0x4c444; echo; done fdba340bb35635934aa43b4bddd11df31f2204e73394b59756931aa2f7f59e04 0x4c444 .rdata identifierStrzuk0KRrGrP fdf3060eb9c39b1a2be168b1ac52c2f80171394e73fe03c4e0c57911cb9358a9 0x4c444 .rdata identifierStrAR0U4hr1wW fedf9d9815b3d0ad28e62f99d5dcf92ec0f5fcb90135b4bdc30bb5709ab9ff05 0x4c444 .rdata identifierStrswEYVkFWeg ff2f1be6f64c91fa0a144cbc3c49f1970ba8107599d5c66d494ffb5550b0f7fd 0x4c444 .rdata identifierStrKXaUzlBDIj ff53c7ba285ffdc2c29683bb79bb239ea59b3532f8b146523adf24d6d61fc640 0x4c444 .rdata identifierStrv91TJ5c3Lr ffee504e292a9f3ae6c439736881ebb314c05eac8b73d8b9c7a5a33605be658e 0x4c444 .rdata identifierStrOzJnvFQy2U Bom, daí o céu é o limite. Dá pra criar assinatura, criar um script pra extrair esse ID da campanha, enfim, missão cumprida. FAQ 1. Por que você não utilizou só um comparador de arquivos qualquer, que compara os bytes em hexadecimal? Eu queria saber exatamente onde estavam as diferenças entre os arquivos, se na estrutura ou não. Em caso negativo, é código? Se sim, que código? Que faz o que? São dados? Usados onde? Em qual seção? Um editor hexadecimal ignorantão não me daria isso. Além disso, se os arquivos fossem diferente estruturalmente, ou em tamanho, eu queria saber antes, pra não perder tempo analisando diferenças de bytes hexa que eu não sei o que é. 2. Existem softwares para comparar binários PE muito mais poderosos, como o BinDiff. Por que caralhas você não o usou? O BinDiff é pra comparar código. Minha diferença estava nos dados. Além disso, o BinDiff e seus amigos traduzem o Assembly original do binário para uma linguagem intermediária própria e comparam lógica, não instruções. É bem fodão, mas não me atendia neste caso, afinal eu já sabia que os binários eram idênticos em funcionalidade. Só queria saber onde estava a diferença exata. 3. Percebi pela screenshot do Stud_PE que ele também compara a estrutura dos arquivos PE, então todo aquele processo com o readpe foi à toa? Sim, foi só pra Inglês ver. Não, brincadeira! O Stud_PE compara os cabeçalhos COFF, Optional e os diretórios de dados somente. O readpe imprime todos os cabeçalhos, incluindo todas as seções mais os imports. É outro nível, moleque! 😏 4. E quanto à executáveis ELF? O título não fala somente de PE propositalmente, já que a mesma técnica pode ser usada para arquivos ELF, só mudando os programas (readelf, etc). Por hora é só. Se você deixar sua análise abaixo ou quiser fazer um comentário/pergunta, ficarei muito grato. Considera apoiar a gente também vai. 💚
  16. Leandro Fróes

    ARQUIVOS ELF

    Entendi... Nossa comunidade tem foco no estudo das base da engenharia reversa em si, no porquê das coisas e na inserção de novatos na área. Como você já deve ter visto, temos vários cursos que tratam do assunto como por exemplo o CERO e o de Programação Moderna em C. Aparentemente você quer contratar os serviços de alguém, mas a maioria aqui tá estudando. Só avisando caso não encontre exatamente o que procura aqui. 😉 De qualquer forma, seja bem vindo! Espero que dê sorte e resolva seu problema! \o/
  17. Jaguar

    ARQUIVOS ELF

    Bom dia leandro , eh um arquivo elf Linux que um amigo fez a algum tempo atrás e perdi contato com o mesmo , preciso mudar um serial interno tipo : exemplo : de 1234567 para 7654321 obg pela atenção
  18. Leandro Fróes

    ARQUIVOS ELF

    Bom dia @Jaguar , tudo bem? Poderia dar mais detalhes sobre o que pretende? É um crackme? algum programa que você fez ? A pergunta foi meio solta demais 😃 Abs
  19. Eduardo Cintra

    Indicação de Livro socket em C

    Alguém me indica um bom livro para aprender programação utilizando sockets em C? Pode ser em inglês. Desde já agradeço!
  20. Jaguar

    ARQUIVOS ELF

    PRECISO DE ALGUÉM QUE FAÇA ENGENHARIA REVERSA EM ARQUIVOS ELF. CONTATOS :TAVARES11@HOTMAIL.COM
  21. Anteriormente
  22. Leandro Fróes

    Pythonicos

    O que é o Python? Python é uma linguagem de programação de alto nível, interpretada e de script. Foi lançada por Guido van Rossum em 1991 e nos dias que hoje Python está em todo lugar. É de longe a linguagem mais lembrada e utilizada quando o assunto é automatização, API, praticidade e resolução rápida de problemas. Por que estudar Python? Além da linguagem ser extremamente requisitada no mercado de TI como um todo possui também aspectos modernos e poderosos para o aprendizado no geral. São eles: Sintaxe simples e de fácil leitura, facilitando o aprendizado Fácil integração com APIs. Hoje em dia é muito difícil achar algum serviço que possua API e não tenha integração com a linguagem Python Facilita a criação de tarefas automatizadas, tendo em vista sua simplicidade Possui um amontoado de bibliotecas que ti permitem trabalhar com praticamente tudo o que imaginar: web, sockets, crawling, arquivos, machine learning, etc. O Treinamento Este curso foi feito e gentilmente disponibilizado gratuitamente pelo usuário @Matheus Bernardes . Seu conteúdo gira em torno não só da linguagem Python em si, mas também de conceitos extremamente relevantes para a área que vão desde sockets e crawling até boas práticas na hora de fazer seus scripts. O curso está no YouTube, no nosso canal Papo Binário, sem nenhum custo. Segue a lista: Aula 00 - Introdução Aula 01 - Preparando o ambiente Aula 02 - Sobre Python Aula 03 - Tipos de Dados Aula 04 - Tratando Valores Aula 05 - Primeiro programa Aula 06 - Condições Aula 07 - Condições (if else elif) Aula 08 - Condições (while) Aula 09 - Condições (for) Aula 10 - Listas Aula 11 - Trabalhando com Listas Aula 12 - Parece com Lista mas é Tupla Aula 13 - Dicionários Aula 14 - Manipulando strings (parte 1-2) Aula 14 - Manipulando strings (parte 2-2) Aula 15 - Funções Aula 16 - Módulos Aula 17 - Trabalhando com Módulo os Aula 18 - Lendo Arquivos Aula 19 - Escrevendo Arquivos Aula 20 - Organizando Arquivos Aula 21 - Arquivos zipados Aula 22 - Subprocess Aula 23 - Servidor TCP Aula 24 - Servidor UDP Aula 25 - Cliente TCP Aula 26 - Cliente UDP Aula 27 - Cliente FTP Aula 28 - Cliente SSH Aula 29 - Envio simples de e-mail Aula 30 - Envio de e-mail plus Aula 31 - Envio com anexo Aula 32 - Requisitando servidor web com socket Aula 33 - Lib Requests Aula 34 - Burlando votações (Parte 1) Aula 35 - Burlando votações (Parte 2) Aula 36 - Burlando votações (Parte 3) Aula 37 - Crawleando as coisas Aula 38 - Iniciando com Scapy Aula 39 - Scripts com Scapy
  23. nicolaslima321

    Dúvidas durante exibição utilizando de arquivos "Hexdump"

    Dei uma olhada no vídeo, me ajudou bastante, consegui entender agora o que faltou! Agradeço muito, não só pela ajuda mas, também pelos vídeos e os treinamentos que estou adorando! Incrível o trabalho de vocês! Abraço!! 😉
  24. Fernando Mercês

    Dúvidas durante exibição utilizando de arquivos "Hexdump"

    O hd em si não existe. Ele é só um atalho pra chamar o hexdump já com essa formatação. Dá uma olhada aqui ou no manual (opção -e) que você vai ver como fazer e com certeza pode criar um alias pra ter o comando hd disponível no teu sistema. 😉 Se tiver dúvida, só falar. Abraço!
  25. Caros, Utilizo o OpenSUSE Tumbleweed na minha máquina, minha distro não reconhece o comando "HD", eu tenho usado o "Hexdump" que eu imaginava que estaria fazendo a mesma coisa, tentando fazer os exemplos da aula 3 do curso CERO, o resultado ficou em ordem diferente (Print abaixo). Sabem se é possível adicionar o comando "HD", se fiz algo de errado ou se faltou alguma coisa? Agradeço desde já
  26. gnoo

    Livro para estudo TCP / IP

    Saudações, tenho estudado por este livro o protocolo TCP / IP, e é um livro bastante completo.
  27. fredericopissarra

    Converter IPv4 inteiro em xxx.xxx.xxx.xxx

    Claro, outra maneira de fazer é usando getaddrinfo(). Vantagem: suporta IPv6 tb. Desvantagens: Há tentariva de resolver nome; vários registros podem ser retornados (inclusive IPv4 mapeado em IPv6)....
  28. fredericopissarra

    Converter IPv4 inteiro em xxx.xxx.xxx.xxx

    Ao usar conversores "%d" não estão verificando se o valor é negativo ou superior a 255... Que tal: #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <inttypes.h> #include <errno.h> #include <string.h> #include <ctype.h> static int str2ip4 ( char *, uint32_t * ); int main ( int argc, char *argv[] ) { uint32_t ip; if ( ! *++argv ) { fprintf ( stderr, "Usage: %s ipv4string\n", * ( argv - 1 ) ); return EXIT_FAILURE; } if ( ! str2ip4 ( *argv, &ip ) ) { fputs ( "ERROR: Invalid IPv4 string.\n", stderr ); return EXIT_FAILURE; } // ESSA extensão (o 1$ e o 2$ nos conversores) é do GCC!!! printf ( "%1$s -> %2$" PRIu32 " (%2$#" PRIx32 ")\n", *argv, ip ); return EXIT_SUCCESS; } int str2ip4 ( char *s, uint32_t *ip ) { char *p, *q, *r, *t; int count; unsigned long n; p = strdup ( s ); // para garantir que estamos trabalhando com uma cópia // que possa ser escrita. *ip = 0; q = p; t = strchr ( q, '.' ); if ( t ) *t++ = '\0'; count = 1; while ( q ) { if ( ! isdigit ( *q ) ) { free ( p ); return 0; } r = NULL; n = strtoul ( q, &r, 10 ); if ( errno == ERANGE || n > 255 || *r ) { free ( p ); return 0; // falha! } *ip <<= 8; *ip |= ( uint8_t ) n; q = t; if ( t ) { count++; t = strchr ( q, '.' ); if ( t ) *t++ = '\0'; } } free ( p ); return count == 4; }
  1. Mais Resultados
×