Jump to content

Felipe.Silva

Membros
  • Content Count

    61
  • Joined

  • Last visited

Community Reputation

49 Excellent

2 Followers

Recent Profile Visitors

1,331 profile views
  1. Opa, não apenas é possível como é o hobby de muita gente kkk. O primeiro passo para fazer a engenharia reversa em um firmware é justamente fazer o dump (você usou o termo certo) do código do firmware, isto é chamado de extração de firmware. Sobre ter bloqueios, sim muitas vezes pode ter. Mas existem técnicas para tentar burlar alguns bloqueios. Eu não manjo do assunto mas vou te passar referências de quem manja: Embedded Hacking: Extração de Firmware usando SPI H2HC University 2018 - Internet of Sh!t - Hacking de Dispositivos Embarcados - Maycon Vitali Os dois conteúdos é do
  2. Texto ocupa muito espaço visual, mas não tanto espaço em memória. Por exemplo, um artigo de 65536 caracteres é grande "pakas" para se ler, mas só ocupa 64 KiB. (considerando somente caracteres ASCII) O que é muita coisa para um embarcado com 32 KiB, mas para uma requisição HTTP com um servidor não é lá grande coisa a ponto de causar uma negação de serviço. Por exemplo no PHP, o tamanho máximo para upload de um arquivo é por padrão 2 MiB. Uma imagem em full HD pode alcançar fácil 4~5 MiB. Agora respondendo as perguntas: Depende da infraestrutura do site e como ele foi programado. Um s
  3. Tenho uma ferramenta em Bash no meu GitHub chamada 'new' que pode ser útil para gerar executáveis assim, sem precisar de modificar "na mão". No repositório tu pode olhar a pasta "templates" que um deles é o bin-elf64. A sequência de comandos ficaria assim: $ nasm tst.asm -o tst.bin $ new bin-elf64 file=tst.bin out=tst $ chmod +x tst $ ./tst Um "Hello World!" fica com 171 bytes. Mas um detalhe: Menor não necessariamente significa melhor. Isso aí é só de brincadeira, o executável não vai ficar mais eficiente porque você "capou" ele. Mas como passa-tempo é válido.
  4. A questão é que usando um registrador de 64 bits, a instrução divide o valor contido em RDX:RAX pelo valor passado como operando. Considere que RDX são os 8 bytes mais significativos do valor, e RAX seriam os 8 bytes menos significativos. Simplesmente zerar RDX traria um resultado incorreto se o número em RAX fosse negativo, o certo seria fazer um sign-extend e a instrução CQO faz isso para você: mov rax, 2345 cqo ; RDX:RAX = sign_extend(RAX) idiv rbx
  5. Colega, pelo que pesquisei aqui isto é uma instrução intrísseca do compilador do Visual Studio (Microsoft). Tem muita coisa em C que não é padronização da linguagem mas sim de alguma implementação específica, esta é uma delas. https://docs.microsoft.com/pt-br/cpp/intrinsics/sidt?view=vs-2019 Se você usa o GCC, e suponho que sim, você pode usar Inline Assembly para isso. (outros compiladores também suportam Inline Assembly, mas com sintaxe diferente) Vou deixar um exemplo: #include <stdio.h> #include <inttypes.h> typedef struct idtr_s { void *base; uint16
  6. $ gcc jonth.c -o test.c -E Eu usei -E do GCC para ver o conteúdo expandido. Depois procurei pelo texto "main(" no arquivo de saída e encontrei. Aproveitando das diretivas de linha que o GCC insere, eu vi que o conteúdo estava expandindo no arquivo /usr/include/X11/Xlib.c na linha 3889. Nesta linha contém a seguinte declaração: extern XIM XIMOfIC( XIC /* ic */ ); O `#define` da linha 5 seta o macro de nome XIMOfIC. Perto do final desse macro nós temos um macro "O" ali. Veja em negrito: Acontece que aonde tem esse "O" é expandido o conteúdo do macro B. Pelo visto um
  7. Não, eles não fazem a mesma coisa. O código em Assembly é para 32-bit e faz uma chamada para a syscall write do kernel Linux. Já o código em C é compilado para 64-bit e faz uma chamada para a função printf() da libc. Os código são diferentes porque são diferentes. Além disso C é uma linguagem de alto nível, então é de se esperar que haja mais código no executável do que o programador consegue enxergar. C ainda é minimalista, mas experimenta ler o código de outras linguagens de alto nível para ver a diferença absurda. Ah, e só porque o resultado é o mesmo não quer dizer que esteja fa
  8. Concordo plenamente. De qualquer forma, foi uma excelente descoberta de sua parte.
  9. Sim, eu quero vê-las e agradeço as críticas. Sobre o binário, é que eu vejo muitas pessoas que não são capazes de separar o conceito do sistema numérico binário do próprio código de máquina em si. Por exemplo, já vi gente vendo um número em binário de uma letra ASCII e falando que era "o código de máquina da letra A". Outros já vi afirmando que binário é uma criptografia. Por isso eu tentei deixar claro que código de máquina é uma coisa, e o sistema numérico binário é outra. Embora o código de máquina seja fisicamente em sistema binário. E o mesmo vale para hexadecimal, já vi pessoas ach
  10. Galera, estou escrevendo uma série de artigos no Medium explicando o básico do código de máquina da arquitetura x86. (desconsiderando o modo de 64-bits e outras tecnologias que eu não estudei) Essa informação pode ser útil para entender melhor o Assembly da arquitetura e também se alguém, por algum motivo aleatório, quiser desenvolver um assembler, disassembler, emulador ou qualquer outra ferramenta que exija esse conhecimento. No final de cada artigo tem um link para a próxima parte, mas mesmo assim irei deixar todas as partes indexadas aqui. Quando eu escrever novas partes irei come
  11. Fui o único que votou no projeto Bumerangue. ☹️
  12. Sim, falhas do tipo continuam sendo encontradas. E sempre serão, não acredito que um dia haverá um sistema 100% seguro.
  13. Não sou lá um especialista no assunto, mas enquanto não aparece uma pessoa mais qualificada você vai ter que se contentar com o que eu sei. rsrsrs :P Antes de mais nada esse método é para atacar redes WPA2-PSK, que é um dos métodos de autenticação que uma rede WPA2 suporta. Geralmente esse método de autenticação mais simples é usado em residências. Empresas usam o outro método porque é mais seguro. (não sei como o outro método funciona, nem pergunte.) O "método tradicional" para quebrar uma senha de uma rede WPA2 segue três passos simples: 1) Monitorar o tráfego no canal em que se
×
×
  • Create New...