Ir para conteúdo
  • Cadastre-se

Felipe.Silva

Membros
  • Total de itens

    48
  • Registro em

  • Última visita

Tudo que Felipe.Silva postou

  1. Felipe.Silva

    Dúvida sobre exploração de vulnerabilidades

    Sim, falhas do tipo continuam sendo encontradas. E sempre serão, não acredito que um dia haverá um sistema 100% seguro.
  2. Felipe.Silva

    Quebra de senha usando PMKID

    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 encontra a rede alvo. 2) Esperar pacientemente que alguém se conecte a rede. Quando o handshake é capturado é o "sinal" que alguém tentou se conectar a rede. 3) Quebrar a senha por força bruta. (se você pegou o handshake de uma conexão falha vai perder tempo :P ) Obs.: O passo dois pode ser acelerado forçando a desautenticação de algum dispositivo forjando pacotes. Mas isso não é importante para o assunto. Como eu disse eu não entendo muita coisa, mas o ataque de força bruta acontece no pacote de comunicação do 4-Way Handshake. Basicamente ele tenta "simular" a criação desse pacote usando uma chave X como se fosse a senha de autenticação. Se o resumo do pacote bater com o resumo do handshake capturado, então quer quiser que a senha é a correta. O novo método apresentado no artigo elimina a necessidade de capturar o handshake. (essa é a parte mais problemática) Isso porque ele descobriu que esse tal de PMKID é gerado usando o algoritmo HMAC-SHA1. Onde é usado como chave o PMK* e como dado a concatenação da string "PMK Name", o MAC do AP(o roteador neste caso) e o MAC do dispositivo que está se comunicando com o roteador. Ou seja: "PMK Name" + MAC_DO_ROTEADOR + MAC_DO_DISPOSITIVO Tudo isso concatenado é "hasheado" usando algoritmo HMAC-SHA1 e usando como chave o PMK. Onde o "PMK" nada mais é que a senha configurada para a rede WiFi. O MAC do roteador e do dispositivo pode ser capturado facilmente monitorando a rede... Percebeu onde se encontra a vulnerabilidade do sistema? Dessa forma dá para descobrir facilmente o dado, só o que não temos é a chave utilizada. (a senha da rede WiFi) Ou seja, isso abre uma porta para fazer força bruta... É só usar o algoritmo HMAC-SHA1 no dado com senhas diferentes... Se conseguir o mesmo PMKID significa que usou a mesma chave... Logo, você conseguiu senha da rede. ^-^
  3. Felipe.Silva

    Dica para Conversão de C para Assembly

    Hehehe, comigo foi o contrário. Eu já sabia Assembly quando comecei a aprender C, aí eu compilava código em C e lia em Assembly para entender melhor o funcionamento do executável gerado. O próprio GCC oferece opção para apenas compilar o código, sem montar nem linkar ele. Dessa forma é possível ler o Assembly. Só usar: $ gcc programa.c -o programa.asm -S # Com sintaxe da Intel $ gcc programa.c -o programa.asm -S -masm=intel Fica a dica para quem quiser dar uma olhada. É interessante também usar o objdump para ver o programa depois de linkado. Opção -d do objdump faz ele disassemblar a seção de código.
  4. Felipe.Silva

    Dúvida Curso de Engenharia Reversa - Aula 6

    @Leandro Fróes. Posso ter interpretado errado o texto dele, mas eu acho que não era ASLR. Ele disse que quando clicou "RUN" ele foi para o endereço 401000. Eu não sei o motivo e nem sei do que se trata, mas quando eu abro um executável no EDB ele também executa um código antes do entry point. Fica na região de memória do ld-2.26.so então eu imagino que seja alguma inicialização do S.O. Deve ser o mesmo caso no Windows. Mas como eu já disse eu não sei direito do que se trata. Inclusive eu queria perguntar aqui sobre isso e me esqueci.
  5. Felipe.Silva

    Engenharia reversa em interface vpn

    Olha eu vou te dar a "dica", mas você não vai gostar. 1) Você tem experiência com desenvolvimento de drivers? Se não, começa estudando isso. 2) Depois que ter pelo menos alguns meses de experiência com desenvolvimento de drivers, começa a estudar engenharia reversa. O curso CERO do Papo Binário é um bom começo... Eu imagino que ele já esteja completo quando você terminar de estudar sobre drivers. 3) Após o CERO aprenda Assembly. Mas cuidado para não aprender Assembly da arquitetura errada, existem várias linguagens Assembly... 4) Sabe redes? Se não, estude. Se sim, estude mais ainda. 5) Depois de estudar engenharia reversa e Assembly por pelo menos 1 ano e ter bastante conhecimento sobre redes, você já deve estar apto a tentar fazer a engenharia reversa no driver. Eu diria que ao todo, somando estudos e "mão na massa", você vai levar em torno de 1 ano e meio a 2 anos para encontrar a falha e corrigir ela. Isso se você conseguir, não é algo 100% garantido. Você pode fazer tudo isso ou reportar a falha e esperar uma atualização de correção. Você decide, não quero mandar na sua vida. 😙
  6. Felipe.Silva

    Automodificação de código em C

    Galera, tenho um canal no YouTube faz um tempo(uns 3 meses) e hoje resolvi voltar a publicar vídeos. (parei por 2 meses) Neste vídeo eu resolvi falar sobre automodificação de código na linguagem C em ambientes Linux. Por favor, podem criticar a vontade. Não precisam se conter. Link para o vídeo: https://www.youtube.com/watch?v=mFZ5XcuD7vc
  7. Felipe.Silva

    Primeira Certificação

    Aproveitando o assunto. O que vocês acham de um curso como o da Desec Security? Estou acompanhando a empresa faz um tempo e eles estão cada vez mais se profissionalizando. E inclusive mais recentemente criaram um certificado próprio(DCPT). Acham que é uma boa para quem quer aprender Pentest?
  8. Felipe.Silva

    Ajuda com indentação

    Seu professor não é chato, fazer um código bem organizado é tão importante quanto fazer um código que funcione. Se for só uma coisa ou outra, não adianta de nada. Tem que ser os dois. Aqui tem umas dicas interessantes. É para C++ porém boa parte é aproveitável para qualquer linguagem. > https://github.com/kelvins/Boas-Praticas-Cplusplus Vale lembrar que nenhuma dica que você achar por ai é uma "verdade absoluta". Cada um tem sua opinião e ponto de vista. Uma dica que eu dou é você sempre seguir o estilo de código recomendado da linguagem de programação. No caso da linguagem C tem o GNU Coding Standards que eu recomendo que você siga. (mas eu mesmo não sigo tudo, só para constar) Outra dica é que você use espaços para indentar o código ao invés de TAB. Eu uso quatro espaços. A maioria, senão todos os editores de código tem opção para converter o TAB em N espaços. Assim você continua com a praticidade de pressionar a tecla TAB porém usando espaços para indentar. O motivo disso é por causa de alinhamento. O tamanho de um TAB pode variar de acordo com editor e fonte utilizados. Um código que parece bem alinhado para você pode estar uma bagunça para outra pessoa. Já com espaços isso não é um problema.
  9. Felipe.Silva

    Função de impressão em uma string com alocação automática

    Isso é muito bacana... Eu não conhecia essa função. É de grande utilidade com certeza.
  10. Felipe.Silva

    Como funciona o spawn de um item em um jogo?

    Dependendo do motor do jogo algumas coisas vão mudar. Já brinquei com algumas game engines e elas tinham algo em comum: Uma função para criar uma nova instância e um elemento que serve de "modelo". Vou usar como exemplo uma biblioteca para desenvolvimento de jogos que eu mesmo fiz em JavaScript. Na minha gamelib existem os construtores Model() e Entity(). Model() cria uma espécie de modelo que não existe dentro do ambiente do jogo. É a partir do modelo que definimos coisas como sprites, códigos de execução em eventos etc. Enfim, todas as características que um objeto dentro do jogo precisa ter. Já Entity() cria uma entidade dentro do jogo a partir de um modelo criado por Model(). Essa entidade é "uma cópia" exata do modelo, e a entidade sim existe dentro do jogo... Então na hora que você cria uma entidade a partir do modelo, desde então ela existe no cenário do jogo. Esse conceito é quase o mesmo para qualquer game engine ou gamelib. Então digamos que você queira modificar um jogo para dropar um item qualquer, você precisa de duas coisas: 1) Descobrir qual é o "modelo" daquele objeto. (o nome pode variar de acordo com game engine/biblioteca) 2) Descobrir qual é a função que cria uma nova entidade e como usá-la. Se o jogo foi desenvolvido usando alguma game engine/biblioteca "pública", isto é, que não é exclusiva daquela empresa... Então você pode baixar ela e ler a documentação para descobrir como usar as funções para criar entidades etc. E você pode também fazer testes a partir de um código que você tem controle... Só ir estudando a estrutura do código até encontrar o que procura.
  11. Felipe.Silva

    Fluxo na execução do Programa

    Não é questão de ter faltado detalhes, mas sim os que você deu estavam errados. Mas eu entendo o seu ponto.
  12. Felipe.Silva

    Fluxo na execução do Programa

    Desculpe, mas eu devo fazer três correções. 1) Na verdade o opcode nessa instrução é somente o byte E8. Os outros quatro bytes são um valor imediato. Como uma analogia, pense que o opcode é "o nome da função" e os bytes seguintes são "argumentos" para essa função. Algo como: e8(0x78563412); No artigo da Wikipédia sobre código de máquina eu detalhei como uma instrução em código de máquina da arquitetura x86 é formada. Nele eu especifiquei sobre o formato da instrução e expliquei sobre os prefixos. Em resumo uma instrução de código de máquina pode haver prefixo, opcode, o byte ModR/M, o byte SIB, endereço de deslocamento e um valor imediato. É muito mais do que simplesmente opcode. 2) Na verdade os dados ficam em little-endian, logo a sequência de bytes 12 34 56 78 não formam o valor 0x12345678... Mas sim 0x78563412. 3) Tanto jmps quanto calls "curtos" (near) em código de máquina trabalham com endereços relativos. Então o call E8 12 34 56 78 na verdade não irá chamar uma instrução localizada no endereço 0x78563412... Mas sim executar a instrução 0x78563412 bytes a frente. Um exemplo básico: org 0x100 call teste ret teste: nop ret Trabalhando na sua suposição o call na linha 3 iria ser: E8 06 01 Ou seja, um call para o endereço 0x106. Mas na verdade é E8 01 00 Que seria um call para a instrução 1 byte a frente. (ret tem o tamanho de 1 byte, C3) Apenas calls e jmps "longos" (far) que usam o endereço exato. Os curtos usam endereço relativo. Então por exemplo a instrução call 0x7000:teste iria gerar: 9A 06 01 00 70 Dessa vez sim especificando o endereço exato. (0x106 no segmento 0x7000)
  13. Felipe.Silva

    Fluxo na execução do Programa

    @Leandro Fróes. Posso ter interpretado errado, mas eu trabalhei minha resposta com a teoria que o Luciano acreditava que os dados inseridos em um registrador em algum momento iriam parar na memória RAM. Ele não fez perguntas tipo: "como gravar X em memória?" Ele perguntou algo como: "em que momento isso vai ser gravado na memória?" Ele também perguntou sobre como funcionaria esse fluxo (de dados). Então eu acredito que na cabeça dele, ele pensava que os dados eram salvos "temporariamente" nos registradores e em algum momento o processador ia mover aquilo para a memória RAM. Eu não afirmei o contrário. Creio que houve uma falha na nossa comunicação.
  14. Felipe.Silva

    Fluxo na execução do Programa

    Resposta curta: Nunca Acho que você não entendeu o que é um registrador. Um registrador é uma pequena área de memória que fica dentro do processador, ela pode ser acessada de maneira muito mais rápida do que a memória RAM. (por causa do hardware) Quando você define o valor de um registrador está mudando o valor daquele registrador e apenas isso, o processador não vai "enviar" os dados nos registradores para a memória RAM. O registrador não é tipo um cache para acessar a RAM. Você deve ter se confundido porque deve ter lido algo sobre os registradores serem usados para armazenar dados temporariamente. Essa explicação se dá porque é muito mais rápido se você carregar os dados da memória e jogar em um registrador, trabalhar com esses dados no registrador e depois você jogar os dados de volta na RAM. O processador não vai fazer isso magicamente, é só um "truque" que o programador faz para otimizar tarefas de loop, por exemplo. Se quiser aprender sobre as instruções da linguagem Assembly, eu recomendo usar como referência o site c9x.me. Ele não tem um sistema de pesquisa mas você pode usar o Google para encontrar referências das instruções. Exemplo de pesquisa: site:c9x.me mov Com a pesquisa acima podemos encontrar a referência da instrução mov. No site tem uma explicação sobre a instrução e até mesmo um pseudo-código para explicar o que exatamente a instrução faz.
  15. Felipe.Silva

    Procurar Keys no registro

    Eu pesquisei no Google: msdn registry E encontrei isso: Registry Functions (Windows) É só procurar na MSDN que você encontra toda a documentação da API do Windows. Lá não apenas explica como usar como também exibe um exemplo de uso.
  16. Felipe.Silva

    Criando seu próprio Portscan

    Uma dica que eu dou em relação ao código é que você não precisava criar um socket novo a cada iteração do for. (6° linha) Você podia criar o socket antes do for e usar sem problemas. Assim você está criando muitos sockets a toa. Fiz o teste aqui e a diferença é absurda. Enquanto o seu código "normal" demora 7 segundos para executar. A versão que eu simplesmente movi a linha 6 para antes do for executa em menos de 1 segundo. (se demora 7 segundos para testar no localhost... Imagine em um host em uma rede externa...) Só isso que vou falar sobre o código. Em relação a seu método de ensino eu tenho uma crítica. Você não precisa explicar linha por linha do código, apenas um conceito geral. Se a pessoa sabe programar em Python, então ela vai se enjoar e não vai querer ler o que já sabe. E se ela não souber, ela não vai aprender lendo este post. De qualquer forma ou você fala mais do que precisa, ou fala algo que não vai adiantar de nada. É a mesma coisa que fazer comentários óbvios como: x += y; // Soma X mais Y Se a pessoa sabe programar é desnecessário, se não sabe não vai aprender porque leu esse comentário. e.e Sem falar que você explicou o óbvio mas esqueceu do principal: Como funciona e para que serve um portscan. Enfim, é só isso a minha crítica.
  17. Felipe.Silva

    Dúvida sobre ARP Poisoning

    Não entendo muita coisa do assunto mas vou tentar responder. Ah, e se isso for uma atividade de faculdade/curso como eu imagino que seja... Espero que você não simplesmente copie e cole a resposta, mas sim estude a respeito. A propósito, o Google é seu amigo. (jeito educado de dizer STFW) 1) Certo. 2) Não. ARP spoofing é um método para associar seu endereço MAC ao IP do gateway padrão da rede. Essa técnica pode ser usada para praticar um ataque MITM, porém ela em si não é um MITM. 3) Não. O nome disso é sniff e os dados não vão estar passando pelo seu computador. (aviso de analogia abaixo) Imagine que tenha duas pessoas se comunicando por cartas e você queira descobrir o que elas estão falando... Então você se disfarça de carteiro, pega a carta da pessoa A, ler o conteúdo da carta e depois entrega para a pessoa B. Isso é um ataque MITM. Perceba que isso não apenas te permite saber sobre o que estão conversando, como você também pode adulterar o texto nas cartas. (e criar uma intriga só por maldade, kkkk) Agora imagine que tenha duas pessoas conversando baixinho em uma praça e você queira ouvir... Então você se esconde atrás de uma árvore e começa a escutar o que elas estão falando. Isso é um sniff. No MITM você fica "no meio do caminho" entre um PC e outro, intercepta esses dados e pode manipular a requisição/resposta. No Sniff você simplesmente está ouvindo os dados enviados pela rede. Quando um dispositivo como um celular ou Notebook manda um sinal sem fio(estou falando de Wireless aqui), ele não pode direcionar esse sinal para um dispositivo específico. Qualquer um que esteja escutando pode receber esses dados. (e isso inclui seu PC em modo promíscuo) É por isso que criptografia na comunicação sem fio é muito importante. (com fio também, mas sem fio é mais fácil de escutar) Referências (Em inglês) Man-in-the-Middle (MITM) Attacks - Rapid7 (Em inglês) ARP spoofing - Wikipedia
  18. Felipe.Silva

    Problemas com um bug no for!

    Recomendo a leitura: http://cars--reviews.com/article43.html O Fernando já disse o que tem de errado no seu código, então o que eu vou fazer é tentar te ajudar a encontrar as falhas por conta própria. Primeira dica que eu dou é você tentar "executar" o código de cabeça. Olhe o código linha por linha e imagine o resultado apresentado por ele, o valor das variáveis em determinada linha etc. Sugiro que comece a exercitar isso com códigos básicos e depois vá aumentando a "dificuldade". Pode parecer bobagem isso, mas a maioria dos bugs eu consigo encontrar sem nem mesmo fazer um teste antes. Ai caso isso não der frutos, eu uso um debugger. Um debugger que eu recomendo para C é o Nemiver. Tem esse debugger online também: https://www.onlinegdb.com/ Mas eu acho que nesse nível você não precisa se preocupar com debuggers no momento.
  19. Felipe.Silva

    Duvida variaveis disassembly

    Certo, variável é um conceito abstrato. Não existe "de verdade". Após o código ser compilado tudo o que existe é memória. E o que é um vetor? Simplesmente uma sequência de valores de mesmo tipo. Qual a diferença entre três inteiros e um vetor de inteiros com 3 de tamanho? Após compilado, nenhuma. O software que criou esses rótulos simplesmente deu nome a referências de memória na pilha. Que podem ou não serem variáveis separadas. Ele não é mágico, não tem como adivinhar esse tipo de coisa. Só pode ler o código e presumir informações. Entenda que nenhuma dessas informações ficam salvas no executável, todas elas são geradas a partir da análise do código. Para você ver porque o software não conseguiu diferenciar uma array de variáveis separadas. Veja esse código: #include <stdio.h> int main(){ int x[3]; x[0] = 5; x[1] = 7; x[2] = 25; return 0; } O código acima compilado: Agora veja este código: #include <stdio.h> int main(){ int x, y, z; x = 5; y = 7; z = 25; return 0; } Agora ele compilado: Parece simplesmente idêntico, mas há uma diferença. Que é a ordem dos endereços relativos. Se eu tivesse definido os valores das variáveis x, y e z na ordem inversa então o código estaria idêntico. Só para fins de informação, eu não fiz o disassembly do código. Usei a opção -S do GCC que faz com que o código apenas seja compilado, sem que haja o processo de montagem e linkagem. $ gcc tst.c -o tst.s -S -masm=intel A opção -masm é só para especificar a sintaxe, no caso a Intel que é a que você está acostumado. (e não tenho certeza se conhece a da AT&T)
  20. Felipe.Silva

    Duvida sobre endereço extender

    Então, antes deixa eu te explicar como funciona o endereçamento de memória em Assembly. Como você já sabe (ou não) na sintaxe da Intel usamos os colchetes("[" e "]") para se referir a um valor na memória em um determinado endereço. É tipo como usar o operador de indireção (*) com um ponteiro na linguagem C. Dentro dos colchetes nós podemos especificar quatro valores diferentes: - Base - Índice - Escala - Deslocamento Exemplo: mov rax, [rbp + rbx*2 + 0x70] Onde no exemplo acima RBP é registrador usado como base, RBX índice, 2 a escala e 0x70 o deslocamento imediato. Abstraindo isso em um código em C, seria tipo isso: ptr[i*2 + 0x70] No print que você mando nós temos o endereço [rax + 548h]. Repare que 548h é um número em hexadecimal assim como 0x70. Só muda a forma de escrita. Ou seja, nesse endereço temos definido a base(RAX) e o deslocamento imediato. Abstraindo em C seria: ptr[0x548] O nome da variável que você passou nada mais é que um underline, seguido de um f de float e o endereço relativo. E esse nome é gerado pelo descompilador. Em um programa compilado, símbolos de nomes de variáveis não são preservados. Além disso, variáveis locais e não estáticas nunca tiveram um símbolo. Logo o nome da variável é simplesmente irrecuperável.
  21. Felipe.Silva

    Como reportar falhas

    @MateusP. Parece que você se esqueceu que eu passei DOIS links. Um é a lei que você citou, e o outro a Lei N° 2848 - artigo 14. Onde lá diz: E isso no Brasil. Como eu já disse, se o servidor estiver situado em território Americano é a lei dos Estados Unidos que entra em vigor. E eu acredito que você saiba muito bem que lá as leis são bem rigorosas o quanto a isso. Já teve gente que teve dor de cabeça no USA por simplesmente usar um portscan sem autorização... Imagine fazer um SQL Injection ou XSS. E voltando para a analogia... Mesmo que o "mecânico" não arrombe o capô, não esqueça que estamos no referindo a um Pentest e não a "escutar" problemas em uma máquina. Não tem como descobrir a falha em um sistema sem testar o mesmo, diferentemente de um carro que você pode ouvir um ronco estranho. E para testar o motor de um carro você teria que arrombar o capô... Mas já que você não gosta da palavra "arrombar". Podemos dizer que você deixou o capô do carro aberto e um cara estranho se aproximou SEM PERMISSÃO e começou a buscar por problemas. (ou a criar eles... Como você vai saber? Não entende de mecânica...) Acho que o problema é que você se perdeu na analogia.
  22. Felipe.Silva

    Como reportar falhas

    @MateusP Perfeita a sua analogia de um mecânico. Agora vamos trabalhar com ela de forma mais realista: Imagine que você estaciona seu carro e entra em um Shopping. Quando volta das compras se depara com um "mecânico" que arrombou o capô e está mexendo no motor do seu carro. E então ele diz: « Amigo, seu carro está com um problema de vazamento no radiador. Se quiser eu concerto por $$ reais. » Agora eu lhe pergunto: Quem garante a ética deste "mecânico"? Como o "cliente" pode saber se o problema é real ou causado pelo mecânico após ele ter arrombado o veículo? E se o "cliente" resolver não pagar pelo serviço(ou extorsão?), quem não garante que o mecânico não tenha feito algo para danificar o carro? (como ter cortado os freios) Percebe a situação desconfortável que o cliente(ou vítima?) permanece? Esse suposto profissional pode ser um criminoso extorquindo ele, e ele pode se sentir obrigado a pagar pelo "serviço" achando que o seu sistema corre perigo. Como eu disse: Se isso não fosse ilegal seria no mínimo antiético. E é sim ilegal. Eu já passei os links das leis para você ler e comprovar isso. Nem precisava de toda essa discussão para ver que tem algo de errado neste tipo de atitude.
  23. Felipe.Silva

    Onde aprendo sobre o que modificar para um assembly rodar no visual studio?

    Eu não entendi direito mas eu acho que você quer aprender como usar Inline Assembly. Eu fiz um vídeo falando sobre isso, se quiser dar uma olhada: > [Linguagem C] Inline Assembly na prática Detalhe que o tutorial é especificamente para o compilador do GCC. Outros compiladores podem ter uma estrutura um pouco diferente. Obs.: O tutorial é para C mas todos os compiladores do GCC seguem o mesmo padrão.
  24. Felipe.Silva

    Como reportar falhas

    @MateusP Trabalhando na realidade fictícia de que realmente não é crime, ainda sim seria no mínimo antiético. Com tantos sistemas de Bug Bounty e plataformas como o HackerOne por ai, não tem porque querer tentar ganhar dinheiro dessa forma invasiva. (onde "invasiva" é um eufemismo) É a mesma coisa que você jogar a pedra na janela do vizinho e depois oferecer a venda de uma janela nova. Que é crime e antiético isso é fato. Agora se você quer praticar esse tipo de atitude, ai é com você. Já é adulto e sabe o que faz. (ou pelo menos deveria saber)
  25. Felipe.Silva

    Como reportar falhas

    Imagine que no meio da noite você acorde com um barulho na porta da frente, você abre ela e dá de cara com um indivíduo que você nunca viu na vida... E então ele diz: « Não se preocupe eu não sou um ladrão, eu só estava testando a segurança da sua casa » Você vai acreditar nisso? A polícia vai acreditar nisso? O juiz vai acreditar nisso? Acho que não, hein. Qual a diferença entre fazer um "pentest" não combinado e atacar o sistema? Nenhuma! Se não houve um acordo preestabelecido então você não está fazendo um teste de segurança naquele sistema, está atacando ele. E em relação a ser crime ou não, não sou eu ou você quem decide isso. É a lei. Aproveitando a analogia do "ladrão bonzinho" eu vou usar outra: Imagine que um cara tente te esfaquear e seja pego pela polícia, então em sua defesa ele diz: « Por que eu estou sendo preso? Eu não matei ele, tentei fazer isso mas não consegui » Assim como a tentativa de assassinato é crime, a tentativa de invadir ou danificar um sistema também é. E mais uma vez NÃO sou eu quem digo, eu não estou falando da minha opinião ou ponto de vista aqui. Estou falando da lei. E vale lembrar que se o servidor estiver situado em solo Americano, são as leis de lá que entram em vigor. E o USA é bem rígido o quanto a isso. Referências legais. (badum tis!) > Lei N° 2848, artigo 14 > Lei N° 12.737
×