Extrair código fonte

1,165 views
Skip to first unread message

Thiago Salgado

unread,
Feb 5, 2013, 8:20:06 PM2/5/13
to ardu...@googlegroups.com
Pessoal,

     Aproveitando.... é possivel extrair o código fonte do programa compilado no Arduino UNO rev3 ?

Paulo Coutinho

unread,
Feb 5, 2013, 10:05:21 PM2/5/13
to ardu...@googlegroups.com
Se ele estiver compilado não vai ter como, é praticamente impossível fazer engenharia reversa de código nativo, alguns programas até tentam, mas não chega nem perto, a resposta neste caso é: não :(




Em 5 de fevereiro de 2013 23:20, Thiago Salgado <scrimf...@gmail.com> escreveu:
Pessoal,

     Aproveitando.... é possivel extrair o código fonte do programa compilado no Arduino UNO rev3 ?

--
Você está recebendo esta mensagem porque se inscreveu no grupo "ArduInRio" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para arduinrio+...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 



--
Atenciosamente,
Paulo Coutinho.
Blog: www.prsolucoes.com/blog
Site: www.prsolucoes.com
Msn:  pa...@prsolucoes.com
Skype: paulo.prsolucoes
Telefone: +55 21 9386-0010
Consultor Certificado Bindows

Izaias Cabral

unread,
Feb 6, 2013, 11:06:35 AM2/6/13
to ardu...@googlegroups.com
Apenas reforçando a resposta. Já fiz muita pesquisa, mas ainda não encontrei nada que pudesse fazer isso. Copiar o código HEX é até possível, mas daí transformá-lo para algo editável...

abs

Dado Sutter

unread,
Feb 6, 2013, 11:13:24 AM2/6/13
to ardu...@googlegroups.com


2013/2/6 Izaias Cabral <izaias...@gmail.com>
Apenas reforçando a resposta. Já fiz muita pesquisa, mas ainda não encontrei nada que pudesse fazer isso. Copiar o código HEX é até possível, mas daí transformá-lo para algo editável...

abs

--

Leonardo Baracat

unread,
Feb 6, 2013, 12:00:28 PM2/6/13
to ardu...@googlegroups.com
Ainda que vc consiga pegar o binário e converter para assembly, o problema vai ser o que fazer com esse assembly. Se for um projeto grande, acho que vai ser MUITO difícil você fazer algo prático.

Portanto:
- Extrair o binário do arduino (ou pegá-lo no pc que compilou)
- Arrumar um disassembler para arduino
- Conhecer o suficiente em assembly de arduino para programar nele
- Uma ferramenta que converta o assembly para C, não conheço.

Acho que vc tem um problema grande.

Abraços,
Leonardo


2013/2/6 Dado Sutter <dados...@gmail.com>



--
A cadeia é forte até o elo mais fraco.
__________________________
I get less spam
thanks to Mailnull.com.
http://www.mailnull.com

Rogerio Lucas

unread,
Feb 6, 2013, 12:51:07 PM2/6/13
to ardu...@googlegroups.com
Resposta curta:
Converter em C código binário gravado no Arduino não é possível.

Resposta longa:
C é uma linguagem de alto nível e o resultado final (binário) pode ter como origem (fonte) infinitas possibilidades e fazer o caminho inverso à partir de código assembly simplesmente não é possível de forma  automatizada. Até poderia fazer algo próximo, mas usando referências conhecidas, precisaria ter uma base de conhecimento muito complexa para fazer isso de forma automatizada, então em termos práticos não é possível.

Um exemplo: eu digo que 1, 2 e 3 (fonte) viram A (binário), 4, 5 e 6 viram B (binário), logo à partir de A e B não tenho como determinar se a origem era 1, 2, 3, 4….

Tentando explicar de uma forma lúdica:
Neste exemplo simples acho que é possível entender o motivo do problema:

Tenho um texto escrito em três idiomas diferentes, poderiam ser frases diferentes, mas para o exemplo é a mesma:
Português: Arduino é uma plataforma que facilita a criação de protótipos
Espanhol: Arduino es una plataforma que facilita la creación de prototipos
Italiano: Arduino è una piattaforma che facilita la prototipazione

E traduzo os três textos para o Inglês:
Arduino is a platform that facilitates the prototyping
Arduino is a platform that facilitates the prototyping
Arduino is a platform that facilitates the prototyping

Neste exemplo os três textos são os fontes (linguagem de alto nível, classes, etc…) e a tradução,  texto em inglês, é o binário compilado e "linkado" para o Arduino.

É fácil notar que usando o texto traduzido (binário) não é possível determinar o texto original (fonte).

Este exemplo não reflete nem de longe o que acontece na realidade, mas para este tipo de dúvida, muito técnica, se não falar de outra forma acho que não ajudaria.

[]s

Rogério Lucas.

Thiago Salgado

unread,
Feb 6, 2013, 1:22:37 PM2/6/13
to ardu...@googlegroups.com
A minha questão era essa mesma ! Saber se alguém poderia descobrir o código inscrito ali, conseguir identificar o source... ex: tenho um droid... ele cai em um lugar, ess elugar é militar... o pessoal pega... eles não vão saber o código correto Oo ??

Espionagem :??? Auheuaehae...


2013/2/6 Rogerio Lucas <rlu...@rlrobotics.ind.br>

Leonardo Baracat

unread,
Feb 6, 2013, 1:44:02 PM2/6/13
to ardu...@googlegroups.com
Bom,

Fui investigar um pouco.

Como eu disse antes, extrair o assembly é relativamente fácil, pois a grande maioria dos assembly são uma tabela 1-1 para as instruções de linguagem de máquina.

Para subir um nível, é preciso pegar esse assembly e convertê-lo em C, C++. Para isso, existem os decompilers - na tradução direta, decompiladores - que fazem o caminho inverso. Abaixo segue um link com alguns exemplos de ambos:


Embora seja possível, em termos práticos é o último recurso. Quando se cria um código binário, todas as variáveis/funções(métodos) perdem seus nomes como as vemos. Essa informação simplesmente se perde, a menos que você tenha o binário compilado com as informações de debug. Fora que o código final, dependendo do tamanho do programa, provavelmente estará enorme e ilegível para mortais.

Como não existe um caminho fácil, fica a pergunta idiota. Todo esse trabalho compensa? Não seria melhor refazer na unha esse fonte?

Abraços,
Leonardo Baracat




2013/2/6 Rogerio Lucas <rlu...@rlrobotics.ind.br>

Thiago Salgado

unread,
Feb 6, 2013, 1:48:11 PM2/6/13
to ardu...@googlegroups.com
Leonardo,

       Então, mas nesse caso a minha pergunta é referente a:  - Ouvi dizer que caiu um droid em um lugar na china se não me engano ( acho que quem falou isso foi o Oscar na palestra sobre VANT ) , nesse caso, imagino que os caras tiveram curiosidade de ver o código por trás daquilo, portanto... gostaria de saber se isso é possivel ! Mas pelo que li também... acredito que não seja !


2013/2/6 Leonardo Baracat <lbar...@gmail.com>

Leonardo Baracat

unread,
Feb 6, 2013, 2:11:46 PM2/6/13
to ardu...@googlegroups.com
Thiago,

Nesse caso então, é ainda mais complicado. Existem coisas que você faz no código pra dificultar a vida dos disassemblers. Mas, isso pode ser difícil pra mortais. Te garanto que se valer a pena (espionagem industrial) alguém perde um tempo pra fazer isso.

A resposta mais próxima da realidade é que isso é possível, apesar de não ser NADA trivial.

Se você fizer um droid e quiser evitar esse problema, equipa ele com um dispositivo de auto-destruição. Tem de ser algo que destrua totalmente o chip / droid. C4, RDX resolve a parada! Uma solução mais simples pode ser usar thermite para derreter tudo no droid. Também resolve, só não é tão rápido.

Abraços,
Leonardo Baracat


2013/2/6 Thiago Salgado <scrimf...@gmail.com>
Reply all
Reply to author
Forward
0 new messages