Engenharia reversa: para que é realmente bom? [fechadas]

15

Tenho algumas perguntas inocentes / iniciantes:

  • Para que serve a engenharia reversa?
  • Como programador, devo aprender a arte da engenharia reversa?
  • Quais são os benefícios para um programador experiente?
soquete
fonte
5
Esta pergunta é apenas sobre o tipo de desmontagem da engenharia reversa, ou as outras também? (uma vez que "assembléia" e "de baixo nível" estão nas tags ..)
Izkata

Respostas:

14

Para que serve a engenharia reversa?

A engenharia reversa é principalmente boa para cracking e hackers (remova a proteção do número de série ou prompts de senha), mas também para entender vírus ou milagres que outros softwares podem executar. Às vezes, é uma habilidade útil ter, a fim de encontrar bugs em programas para os quais você não tem a fonte e corrigi-los.

Como programador, devo aprender a arte da engenharia reversa?

Sim, tente aprender o assembler e usar um depurador decente. Isso fará de você um desenvolvedor melhor, entendendo as coisas em níveis mais baixos, mais próximos do metal.

Quais serão os benefícios de um programador experiente em engenharia reversa?

Você será um bom hacker / cracker. Você poderia trabalhar para outros produtores de antivírus. Como exemplo pessoal: uma vez eu fiz a engenharia reversa de um software para rastrear um erro que acontecia ao estabelecer uma conexão Oracle. Ninguém mais poderia resolver o problema, então eu tenho alguma fama.

Além disso, eu também gostaria de citar o comentário de @ johannes , pois ele está absolutamente certo:

Não vou limitá-lo a "maus" rachaduras. Desmontar pode ser útil para descobrir se o compilador enlouqueceu (geralmente é o seu código), de um ponto de vista mais sysadmin, pode ser interessante ver onde um aplicativo falha

Falcão
fonte
8
Não vou limitá-lo a "maus" rachaduras. A desmontagem pode ser útil para descobrir se o compilador enlouqueceu (geralmente é o seu código, embora), a partir de um ponto de sysadmin mais de vista, pode ser interessante ver onde um aplicativo falhar, ...
Johannes
@ johannes: Sim, você está certo. Posso escrever isso na minha resposta?
Falcon
certeza, fazer o que quiser, eu reivindico direitos de autor sobre que ;-)
Johannes
7
Sinto muito, mas esta é uma resposta absolutamente terrível. A engenharia reversa não é absolutamente "principalmente para ... quebrar e invadir", conforme definido, e qualquer pessoa que não lide com programação de sistemas está fazendo um desserviço ao ser introduzida a partir dessa perspectiva ideológica.
Chuu 15/08/12
1
Acho que não foi mencionado ainda, mas tenha cuidado se fizer isso em software que não é seu (ou não conte a ninguém). Quase todos os EULAs comerciais proíbem a engenharia reversa. Você não deseja receber uma carta de cessação e desistência com cópias para o advogado de propriedade intelectual de alguém.
Bratch
25

Gosto da resposta de Falcon , mas gostaria de acrescentar que em alguns antigos e chatos aplicativos de negócios a engenharia reversa pode tirar você de alguns problemas desagradáveis.

No trabalho, fazemos isso muito ao fazer a integração de dados com um sistema de terceiros que não possui nenhuma manutenção nova, para que possamos saber onde ele deve ou não interromper.

Também usamos a engenharia reversa para verificar a qualidade do código (com certas restrições, é claro) nos componentes de terceiros que compramos, se o código-fonte não estiver incluído.

Meu argumento real é: a engenharia reversa não está ligada a uma única tecnologia ou linguagem, mas é um processo em que você aprende os aspectos internos de uma "caixa preta" . Se você possui um código do qual depende, mas não confia ou não pode confiar, você deve definitivamente dar uma olhada e ver o que esse código está fazendo.

Machado
fonte
Heck, até analisamos os procedimentos armazenados em SQL de sistemas de terceiros que alugamos apenas para verificar se eles estão preenchendo nossos requisitos corretamente às vezes.
Machado
3
+1. Até mesmo um produto de software de grande venda de uma grande empresa pode às vezes ser uma espécie de caixa preta, com documentação on-line inadequada, desatualizada, completamente errada, às vezes inexistente e outras.
RalphChapin
13

Há também o lado chato da engenharia reversa. É quando a empresa em que você está possui um pouco de código ou programa que ainda está sendo usado, mas ninguém afirma saber nada sobre isso. Então você passa por isso, documenta, escreve testes e todo esse material de engenharia que deve ser feito antes do início de um projeto. Você faz isso para um software que já está escrito, portanto, "engenharia reversa".

É muito mais fácil quando você tem o código, mas ainda é tecnicamente a engenharia reversa. É um desses termos que aparece muito em reuniões de negócios quando se trata de projetos legados.

Philip
fonte
+1, particularmente verdadeiro para mim. Já trabalhei em alguns bancos onde os sistemas legados não tinham um único documento técnico.
Machado
7

Apenas para expandir o valor comercial da engenharia reversa - mais da metade dos novos clientes que encontramos têm um sistema / aplicativo existente (nem sempre em produção, lembre-se), mas onde o relacionamento com um fornecedor anterior de desenvolvimento de software atinge o limite.

Em cerca de 30% dos casos, o cliente não possui a fonte do sistema e, em muitos casos, grande parte do processo, regras e conhecimentos reais dos negócios está bloqueado no código.

E em alguns casos em que os fornecedores anteriores se tornaram mal-intencionados, ofuscaram os binários, bloquearam o código por tempo, etc, para prender o cliente indefinidamente.

Portanto, para responder à sua pergunta, a engenharia reversa geralmente é o ponto de partida para novos compromissos com clientes desesperados (e queimados), e pode ser um fator de sucesso "crítico para os negócios" extrair o conhecimento esquecido do código existente.

StuartLC
fonte
2

Eu diria que o conjunto de habilidades para engenharia reversa e o conjunto de habilidades para depuração são exatamente os mesmos - se você é um depurador fantástico, também é um engenheiro reverso fantástico e vice-versa.

BlueRaja - Danny Pflughoeft
fonte
1

Às vezes, é usado para fazer com que algumas peças / software interoperem até onde eu entendi. Algumas interfaces estranhas, erros na implementação, etc.

Mas, pelo que entendi, é um assunto muito escorregadio e, portanto, as já complexas leis do desenvolvimento de software são levadas ao extremo com a engenharia reversa.

Codificador
fonte
1

Bem, com a engenharia reversa, você pode reutilizar o código, minimizando o seu trabalho. Por exemplo, no Symfony2, você pode converter um banco de dados criado a partir do MySQL normal e convertê-lo para o formato de doutrina, e este é um processo de engenharia reversa possível no Symfony .... e com engenharia reversa, você pode ver o código, digamos 'em 2D'

wanjiku
fonte
0

Estou dando apenas um exemplo do mundo real da minha experiência.

Uma vez que nossa empresa assumiu um projeto de outra empresa. Cerca de meio ano no projeto, percebemos que um subprojeto estava sem código. Quando pedimos à antiga empresa que entregasse o código, eles responderam educadamente que não conseguiam encontrar o código para o subprojeto. Precisávamos do código porque queríamos mudar algo nesse subprojeto.

Eu tive que fazer engenharia reversa do subprojeto.

Primeiro eu descompilei o assembly (sim, é um projeto .NET). O resultado do assembly descompilado é um código sem graça e confuso, sem nomes de variáveis ​​locais e uma estrutura de controle complicada. Isso ocorre porque a compilação descarta informações importantes que não podem ser descompiladas.

Depois, tentei descobrir onde alterar esse código. Para fazer isso, simplifiquei o código para se comportar da mesma maneira, mas de maneira mais concisa. Também adivinhei os nomes das variáveis ​​pelo seu comportamento. Eu segui o código várias vezes até descobrir o que estava fazendo.

Não fiz engenharia reversa de tudo, apenas a parte que tivemos que mudar. Não foi tão ruim, cerca de 200 linhas de código VB. Foram necessários cinco dias de tempo de trabalho.

nalply
fonte