Guest gnoo Posted June 18, 2019 Posted June 18, 2019 Saudações, Eu queria tentar fazer um "mac changer", e tenho lido algumas coisas que me indicam que o mac poderá ser alterado na eeprom, eprom, talvez... Mas não compreendi muito bem. Alguém sabe como isso é feito na prática?
fredericopissarra Posted June 18, 2019 Posted June 18, 2019 # ip link eth0 set macaddr xx:xx:xx:xx:xx:xx Se o device aceitar... Obtenha a lista de devices com: # ip link
Guest gnoo Posted June 18, 2019 Posted June 18, 2019 @fredericopissarra não sei se me fiz entender bem. O que eu quero é fazer um script em C ou em python que altere o endereço MAC, e também não quero usar bibliotecas para executar comando do sistema, na realidade por motivos educacionais quero fazer a alteração do MAC diretamente na memória ( se for essa forma ). No exemplo que tu usaste com programa " ip " onde é que ele está a fazer essa alteração quando executamos o comando mencionado ? quando iniciamos o sistema o endereço que pertence à placa de rede deve ficar numa memória qualquer sem ser alterado, certo? onde? Questões a ponderar são: A alteração desse endereço deve ser feito ( " reescrito " ), na memória? Se deve ser "reescrito" na memória em que memória deve ser feita essa alteração? Se a opção for "reescrever" na memória riscos envolvidos nisso?
kassane Posted June 18, 2019 Posted June 18, 2019 1 hora atrás, gnoo disse: @fredericopissarra não sei se me fiz entender bem. O que eu quero é fazer um script em C ou em python que altere o endereço MAC, e também não quero usar bibliotecas para executar comando do sistema, na realidade por motivos educacionais quero fazer a alteração do MAC diretamente na memória ( se for essa forma ). No exemplo que tu usaste com programa " ip " onde é que ele está a fazer essa alteração quando executamos o comando mencionado ? quando iniciamos o sistema o endereço que pertence à placa de rede deve ficar numa memória qualquer sem ser alterado, certo? onde? Questões a ponderar são: A alteração desse endereço deve ser feito ( " reescrito " ), na memória? Se deve ser "reescrito" na memória em que memória deve ser feita essa alteração? Se a opção for "reescrever" na memória riscos envolvidos nisso? Não tenho muito conhecimento na área de redes, mas acredito que este projeto pode lhe ajudar: SpoofMAC for debugging
Administrators Fernando Mercês Posted June 18, 2019 Administrators Posted June 18, 2019 6 horas atrás, gnoo disse: quando iniciamos o sistema o endereço que pertence à placa de rede deve ficar numa memória qualquer sem ser alterado, certo? onde? É no contexto do driver da placa de rede em kernelmode e/ou nos serivços de rede do SO, também em kernelmode. Você não vai conseguir alterar isso em usermode. A maneira como programas como ip, ifconfig, etc fazem é através de bibliotecas userland, que por sua vez invocam syscalls ou falando via socket. Você pode espiar como o ip faz em userland com o ltrace: # ltrace ip link set eth0 address de:ad:be:ef:b0:b0 Aqui fez via socket. Se quiser ver as syscalls chamadas, você pode usar a opção -S do ltrace ou usar o strace. No entanto, vai cair nas syscalls de rede de qualquer forma. Alternativas incluem a netlink (man 7 netlink / rtnetlink). Mas se realmente quiser fazer na memória, você vai precisar de um driver (kernel module, como são chamados no Linux) pra mudar o que pode ser visto em /sys/class/net/eth0/address (não adianta tentar mudar diretamente aqui... o endereço MAC exibido aqui é gerenciado pelo kernel, logo, em kernelmode). 4 horas atrás, kassane disse: Se a opção for "reescrever" na memória riscos envolvidos nisso? Vai depender de quão esperto é o código do teu módulo. Buscando nas estruturas certas, não me parece muito perigoso, mas um find na área de memória do kernel toda é loucura. Não que não deva ser feito (adoro loucura! haha) como PoC. E isso tudo só vale pra Linux. ? Então se quiser fazer no Windows, muda tudo... Abraço e boa sorte! Vou curtir ver isso pronto, independente do caminho escolhido.
Guest gnoo Posted June 18, 2019 Posted June 18, 2019 Olá @kassane tudo bem, o projeto que tu estás a indicar ele segue precisamente o caminho que eu não quero, eu não quero usar este tipo de utilitários do sistema, e como podemos ver no código do projeto em questão: def set_interface_mac(self, device, mac, port=None): """ Set the device's mac address. Handles shutting down and starting back up interface. """ # turn off device & set mac cmd = "ifconfig {} down hw ether {}".format(device, mac) subprocess.call(cmd.split()) # turn on device cmd = "ifconfig {} up".format(device) subprocess.call(cmd.split()) ele está a criar sub-processos, auxiliado com o programa " ifconfig ", eu quero ir um pouco mais fundo do que isso, aquilo que ele faz, isso eu já sei fazer qualquer das formas obrigado por mostrar esse projeto pode servir para outras coisas, nunca se sabe, tirar uma ideia... @Fernando Mercês obrigado pelas dicas com certeza vão ser muito úteis, na escolha do caminho a seguir, quando tiver pronto eu deixo ai o resultado, mas ainda vai demorar um bocado eu tenho outras prioridades no momento e não tenho cabeça para tudo, mas já vai dar para tentar desenhar uma estratégia de estudo e material a reunir, provavelmente vou ter que cair em cima do código do programa " ip ", para analisar isso melhor. Acho que vai ser interessante ficar a perceber como realmente funciona até para futuras ferramentas ou scripts que possam surgir... a estratégia de usar subprocess do python é um pouco primitivo, temos que refinar um pouco mais isso... Obrigado, abraço.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.