Pergunta

Você pode descobrir muito sobre o funcionamento interno de uma aplicação através da reflexão, ele é exposto pela .NET BCL (biblioteca de classes base) e torna-se trivial para recuperar IL real para qualquer método de .NET.

A engenharia reversa em Wikipedia :

A engenharia reversa é o processo de descoberta a princípios tecnológicos de um dispositivo, objecto ou sistema por meio de análise de sua estrutura, função e operação.

Reflexão certamente satisfazer como análise da estrutura. Mas onde você traçar a linha entre a introspecção e engenharia reversa real? E do ponto de vista legal, é a engenharia reversa reflexão?

Foi útil?

Solução

A fronteira entre os dois parece desfocada. Eticamente eu desenhar a linha na motivação do programador.

Se ele está usando reflexão para construir uma biblioteca, ferramenta ou software similar que é suposto para interagir com qualquer código do 3o partido que satisfaça determinados critérios, eu não iria vê-lo como engenharia reversa.

Por exemplo, eu estava escrevendo recentemente uma classe base genérica para camadas de dados Linq2Sql. A base usos classe reflexão para obter insights sobre o layout de banco de dados e lidar correctamente com as atualizações de entidades empresariais aninhadas. Se alguém usa minha classe bases para a sua aplicação web, eu não iria ganhar qualquer conhecimento sobre o código de sua fonte. Esse uso de reflexão é certamente nenhuma engenharia reversa.

Se, por outro lado, o programador está tentando entender o funcionamento interno de software de um concorrente usando a reflexão, ele é engenharia reversa-lo.

Outras dicas

É preciso pôr em causa a definição de Engenharia Reversa , quando a capacidade de facilmente descompilar a língua é uma parte da linguagem ala Reflexão.

Com uma ferramenta como .NET Reflector Eu sinto que as linhas realmente começar a borrão!

Usando um exemplo do próprio SO, que recentemente de-ofuscado o código-fonte para o seu editor de WMD. Eu diria que isso define engenharia reversa mais do que Reflexão faz.

A reflexão é apenas uma ferramenta para ler informações a partir de uma montagem, de modo que por si só não é a engenharia reversa.

Se você, em seguida, usar essa informação para descobrir como a montagem foi criado, por exemplo, usando .NET refletor para produzir código fonte legível que poderia gerar o mesmo código IL, que é a engenharia reversa.

Eu diria reflexão é apenas uma ferramenta. O uso de reflexão não necessariamente engenharia reversa média.

Por exemplo, se você usar o reflexo para descobrir as assinaturas de todos os públicos e métodos protegidos em uma montagem que não iria engenharia reversa média.

Quanto ponto de vista legal, eu sugiro que você tem que olhar para a lei que você está preocupado com a encontrar a definição de engenharia reversa.

A reflexão é uma ferramenta que pode ser usada para muitas coisas, incluindo a engenharia reversa do código. A reflexão pode ser usado para muitos outros fins também, implementar linguagens dinâmicas é muito mais fácil graças à reflexão, por exemplo.

Reflexão sozinho também não é suficiente para engenharia reversa. Você pode encontrar informações sobre a estrutura do programa dessa maneira, mas você ainda precisa descompilar o código. Ferramentas como o refletor fazer adicionar esta funcionalidade.

Na verdade, é o oposto direto de engenharia reversa.

Corretamente, "engenharia reversa" é olhar para os resultados de um processo, e trabalhar para trás, para determinar como ele chegou lá. Geralmente, isso é feito sem nenhum conhecimento do código original e geralmente produz um processo muito diferente.

Apesar das ameaças de terror por detentores de direitos autorais, é perfeitamente legal.

"Desmontagem" (aka "Reflexão") é apenas a ação de ler bytes no seu disco rígido, e atribuindo significado para eles. Este é precisamente o que a CPU faz quando executa o código. Aqui, estamos apenas tornando-se legível. Mais uma vez, apesar das ameaças de terror por detentores de direitos autorais, é perfeitamente legal.

Venda de código de outra pessoa (ou usá-lo você mesmo) de uma forma que evita detentor dos direitos autorais de lucrar com seu trabalho, é ilegal, mas nós não estamos falando sobre isso aqui.

Eu acho que você está falando de duas coisas diferentes aqui:

  • Reflexão é uma técnica, que pode ser usado para a engenharia reversa (entre outras coisas).
  • A engenharia reversa é uma ação que pode, mas não necessariamente obrigatória, o uso de reflexão para alcançar os seus objectivos.

Do ponto de vista legal, isso depende do seu objetivo, se você estiver usando reflexão com o propósito de engenharia reversa.

É claro IANAL, mas acredito que a engenharia reversa não é ilegal por si só. Ela pode se tornar uma atividade ilegal por procuração , ou seja, através de violação de direitos autorais etc.

No. Com reflexão, normalmente você está falando apenas de uma forma diferente de chamar métodos, ou possivelmente olhar para os atributos de método.

A título de contraste, espero que o produto da engenharia reversa para o código-fonte de produtos que eu posso olhar para entender algoritmos e as idéias do autor, que normalmente é o que eles estão tentando proteger.

Questões legais devem ser feitas de advogados. Advogados cobram dinheiro. Não contratação de advogados pode custar ainda mais dinheiro se você for processado por não pedir um advogado.

Melhor aposta: não precisa perguntar. Microsoft já lançou fonte para um monte de .NET. Consulte http://www.microsoft.com/resources/sharedsource/default.mspx.

Tudo depende da extensão você tomar reflexão. Se você usar uma ferramenta como refletor , ou código-se algo assim mesmo, em seguida, que seria engenharia reversa como você está realmente ficando ao código-fonte.

A reflexão pode ser usado para chamar métodos ou olhar para atributos como Don disse, mas ele também pode ser usado para analisar a estrutura de um interior de montagem e até mesmo espiada no código MSIL subjacente. Assim, um uso de reflexão pode ser inocente, e um seria a engenharia reversa.

Reflexão é um termo geral de ciência da computação que estava em uso décadas antes a introdução do Microsoft .NET framework (do que a Sun JVM). A ideia era não destinado à aplicação de engenharia reversa. Que em contextos específicos pode ser utilizado para este fim é apenas acidental. Como outros têm escritos, a reflexão é uma "ferramenta".

Reflexão em muitas linguagens como .NET e Java são patches para sintaxes pobres que não lhe permitem interagir livremente com objetos.

Em realmente objeto linguagens orientadas como Smalltak ou Eu, você quase nunca precisa de reflexão e, se necessário, é de longe mais poderoso do que as oferecidas pelo .NET e Java.

Dito isto, eu acredito que a reflexão é a engenharia reversa, considerando RE é mais parecido com código de entendimento para fazer algo com ele, em vez de quebrar outras das proteções.

Atualmente estou trabalhando muito com Drupal (PHP-based), que usa coisas feias como concatenar nomes do módulo para nomes gancho pré-definidos para descobrir se essa função existe, então ele pode ser chamado mais tarde (por exemplo module_hook_name).

É muito útil, mas acredito que em linguagens OO reais que podem ser evitados por sub-classificar uma classe abstrata que pode responder a qualquer mensagem e subclasses poderia substituir isso.

Reflection não deve ser utilizado exceto para circunstâncias extremas, que é onde você pode ver falhas de linguagens de programação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top