Como modificar a saída de um programa para o qual você não possui o código fonte

89

Em nossa empresa, temos um pequeno programa (.exe com tamanho de 500Kb) que faz cálculos matemáticos e no final cuspiu o resultado em uma planilha do Excel que usamos para continuar nosso fluxo de trabalho.

Eu quero modificar as colunas, o formato de espaçamento e adicionar a lógica do VBA, etc. na planilha do Excel, mas como esses parâmetros não são configuráveis nesse programa, parece-me que a única maneira de modificá-lo é a engenharia reversa o .exe

Ninguém sabe em qual idioma foi programado, a única coisa que sabemos é:

  1. Desenvolvido há mais de 20 anos
  2. Desenvolvedor aposentado há 10 anos
  3. Aplicação da GUI
  4. Executa autônomo
  5. Tamanho 500Kb

Alguma sugestão de quais opções eu tenho para lidar com esse tipo de problema? A engenharia reversa é a única opção ou existe uma abordagem melhor?

    
por Alec 27.05.2016 / 16:03
fonte

8 respostas

233

A engenharia reversa pode se tornar muito difícil, ainda mais se você não quer apenas entender a lógica do programa, mas também mudar e recompilar. Então, a primeira coisa que eu tentaria é procurar uma solução diferente.

I want to modify the columns, spacing format and add VBA logic etc. on the Excel spreadsheet

Se essa é a única coisa que você quer, e o cálculo feito pelo programa é bom, por que não escrever um programa na linguagem de sua escolha (talvez uma macro do Excel) que chama seu "exe" legado? e processa-o ainda mais.

    
por 27.05.2016 / 16:25
fonte
113

Além das respostas já dadas por Doc Brown e Telastyn, gostaria de sugerir uma abordagem alternativa (sob a suposição de que é missão crítica).

Se você não conhece os cálculos que executa e os cálculos são (um pouco) críticos para a missão: Deduza a lógica original no arquivo .exe por qualquer meio necessário. Decodificá-lo usando um descompilador / desmontador como IDA se necessário. Contrate um consultor (ou um lote de consultores), se necessário.

Claro, trabalhe com isso por enquanto usando a solução deles, mas não deixe.

A razão pela qual sugiro é a seguinte: Você admitiu que os cálculos são muito complexos (de acordo com um engenheiro com quem você falou). Também é missão crítica. Então, se de alguma forma o .exe original parar de funcionar devido a mudanças nas plataformas que você tem (talvez o suporte de 16 bits seja descartado?), Você acabou de perder uma parte essencial do conhecimento .

Agora, não estou preocupado em perder o .exe , mas em perder o conhecimento que ele codifica. Esse conhecimento deve ser recuperado.

Como antes: se esse conhecimento já estiver disponível, certifique-se de anotá-lo em um formato que não será perdido tão cedo. Caso contrário, recupere-o e anote-o.

    
por 27.05.2016 / 18:23
fonte
73

Pergunte ao programador original, se possível.

Algumas semanas atrás eu fui contatado por uma empresa que eu trabalhava há 10 anos com a mesma pergunta sobre um arquivo mdb desenvolvido em meados dos anos 90.

    
por 27.05.2016 / 19:51
fonte
54

Any suggestions what options I have to deal with such kind of problems?

Se tudo o que você quer fazer é modificar a saída, então por que não usar simplesmente a composição?

Em vez de modificar a caixa preta que você não pode acessar facilmente, você cria um novo programa que leva a saída do Excel, e sua formatação / coluna também é alterada . Então você poderia criar um novo script / exe que chame os dois programas em ordem, de modo que pareça ao usuário final que há apenas um programa que faz todo o trabalho - mesmo que sejam dois passos distintos sob o capô.

    
por 27.05.2016 / 16:25
fonte
3

Existem empresas especializadas em exatamente esse tipo de problema. Eles usam código proprietário para descompilar o código nativo em uma linguagem de alto nível e, em seguida, aplicam conhecimentos humanos para torná-lo útil (por exemplo, dando nomes apropriados às variáveis).

Alguns anos atrás, meu empregador usou isso para migrar alguns códigos de mainframes S / 390 nativos para servidores Linux. Nós demos a eles um binário, eles nos deram o código fonte em C.

Se isso é necessário no seu caso, é com você. Se você se importa apenas com o formato da saída, pode simplesmente massagear a saída depois que ela for produzida. No entanto, como outros apontaram, ter uma lógica de negócios escondida em um blob binário pode ser um risco contínuo.

    
por 31.05.2016 / 12:40
fonte
3

Escreva um wrapper simples em torno do programa, capturando sua saída. Não é complexo fazer tantas línguas ( Java , C ++ , Python , .NET , por exemplo) tem meios para isso. Analise a saída e gere outra, na forma desejada. O usuário ligará para o seu novo programa. O antigo executável permanecerá próximo a ele ou poderá ser extraído automaticamente do recurso antes de invocá-lo.

Esta solução só funciona bem quando a saída é bem estruturada e fácil de analisar.

Esse é um aplicativo gráfico, não é um problema de bloqueio. Você pode iniciá-lo, gerar saída e depois publicá-lo automaticamente quando esta GUI terminar.

    
por 30.05.2016 / 16:21
fonte
1

Escreva alguns testes que exercitam o maior número possível de casos no código antigo. Encontre casos de canto, teste entrada errada e teste a entrada correta.

Defina o resultado correto em vários casos e tente escrever uma implementação que satisfaça os mesmos testes .

Eu não descia a rota de engenharia reversa. É incrivelmente complicado reverter código de máquina, e você já deve saber qual é o objetivo do exe. A engenharia reversa é um pouco demais para o que você procura.

Se o software foi desenvolvido por um cara há 20 anos, provavelmente não é algo que precise de muita energia moderna. Um programa de GUI que esticou a máquina há 20 anos dificilmente se registrará em uma máquina moderna, então você provavelmente está olhando para algo que é relativamente simples de reproduzir.

    
por 31.05.2016 / 12:16
fonte
0

Tente fazer engenharia reversa no exe. Apenas para o propósito de encontrar a lógica de computação ou, pelo menos, para obter uma sugestão justa do que ela realmente faz e se sua engenharia reversa pode levá-lo até esse ponto, você pode escrever um novo aplicativo baseado nessa lógica de cálculo. Além disso, não vejo outro caminho.

Mais fácil falar do que fazer, fazer engenharia reversa de um exe criado há 20 anos é um verdadeiro desafio.

    
por 27.05.2016 / 19:20
fonte