it-swarm.com.de

So ändern Sie die Ausgabe eines Programms, für das Sie keinen Quellcode haben

In unserem Unternehmen haben wir ein kleines Programm (Größe .exe 500 KB), das mathematische Berechnungen durchführt und am Ende das Ergebnis in einer Excel-Tabelle ausspuckt, mit der wir unseren Workflow fortsetzen.

Ich möchte die Spalten, das Abstandsformat und das Hinzufügen von VBA-Logik usw. in der Excel-Tabelle ändern, aber da diese Parameter in diesem Programm nicht konfigurierbar sind, scheint es mir die einzige Möglichkeit, sie zu ändern, darin zu bestehen, die EXE-Datei aufzuschlüsseln/zurückzuentwickeln

Niemand weiß, in welcher Sprache es programmiert wurde. Wir wissen nur:

  1. Vor über 20 Jahren entwickelt
  2. Entwickler vor 10 Jahren in den Ruhestand getreten
  3. GUI-Anwendung
  4. Läuft eigenständig
  5. Größe 500Kb

Irgendwelche Vorschläge, welche Optionen ich habe, um mit solchen Problemen umzugehen? Ist Reverse Engineering die einzige Option oder gibt es einen besseren Ansatz?

90
Alec

Reverse Engineering kann sehr schwierig werden, umso mehr, wenn Sie die Programmlogik nicht nur verstehen, sondern ändern und neu kompilieren möchten. Als erstes würde ich versuchen, nach einer anderen Lösung zu suchen.

Ich möchte die Spalten, das Abstandsformat und die VBA-Logik usw. in der Excel-Tabelle ändern

Wenn dies das einzige ist, was Sie möchten, und die vom Programm durchgeführte Berechnung in Ordnung ist, schreiben Sie ein Programm in der Sprache Ihrer Wahl (möglicherweise ein Excel-Makro), das Ihr Legacy "exe" nennt, die Ausgabe übernimmt und verarbeitet des Weiteren.

234
Doc Brown

Zusätzlich zu den bereits gegebenen Antworten von Doc Brown und Telastyn möchte ich einen alternativen Ansatz vorschlagen (unter der Annahme, dass er geschäftskritisch ist).

Wenn Sie die durchgeführten Berechnungen nicht kennen und die Berechnungen (etwas) geschäftskritisch sind: Leiten Sie die ursprüngliche Logik im .exe Datei mit allen Mitteln notwendig. Dekodieren Sie es mit einem Dekompiler/Disassembler wie IDA , falls erforderlich. Stellen Sie bei Bedarf einen Berater (oder eine Reihe von Beratern) ein.

Sicher, arbeiten Sie jetzt mit ihrer Lösung daran, aber lassen Sie es nicht zu.

Der Grund, den ich vorschlage, ist folgender: Sie haben zugegeben, dass die Berechnungen sehr komplex sind (laut einem Ingenieur, mit dem Sie gesprochen haben). Es ist auch geschäftskritisch. Also wenn irgendwie das Original .exe funktioniert aufgrund von Änderungen an Ihren Plattformen nicht mehr (möglicherweise wird die 16-Bit-Unterstützung eingestellt?). Sie haben gerade ein unternehmenskritisches Stück Wissen verloren .

Jetzt mache ich mir keine Sorgen, dass ich das .exe, aber über den Verlust des Wissens, das es codiert. Dieses Wissen muss wiederhergestellt werden.

Nach wie vor: Wenn dieses Wissen bereits verfügbar ist, schreiben Sie es in einem Format auf, das nicht so schnell verloren geht. Andernfalls stellen Sie es wieder her und schreiben Sie es auf.

113

Fragen Sie nach Möglichkeit den Originalprogrammierer.

Vor ein paar Wochen wurde ich von einer Firma kontaktiert, für die ich vor 10 Jahren gearbeitet habe, mit der gleichen Frage zu einer MDB-Datei, die Mitte der 90er Jahre entwickelt wurde.

74
Paolo

Irgendwelche Vorschläge, welche Optionen ich habe, um mit solchen Problemen umzugehen?

Wenn Sie nur die Ausgabe ändern möchten, verwenden Sie doch einfach die Komposition.

Anstatt die Blackbox zu ändern, auf die Sie nicht einfach zugreifen können, erstellen Sie ein neues Programm, das die Excel-Ausgabe übernimmt und Ihre Formatierungs-/Spaltenänderungen vornimmt auch. Dann könnten Sie eine neue exe/ein neues Skript erstellen, das die beiden Programme der Reihe nach aufruft, sodass der Endbenutzer den Eindruck hat, dass es nur ein Programm gibt, das die gesamte Arbeit erledigt - obwohl es zwei verschiedene Schritte unter der Haube sind.

55
Telastyn

Schreiben Sie einen einfachen Wrapper um das Programm und erfassen Sie dessen Ausgabe. Es ist nicht komplex, so viele Sprachen zu beherrschen ( Java , C++ , Python , . NET zum Beispiel). Mittel dafür haben. Analysieren Sie die Ausgabe und generieren Sie eine weitere in der gewünschten Form. Der Benutzer ruft Ihr neues Programm auf. Die alte ausführbare Datei bleibt daneben oder kann sogar automatisch aus der Ressource extrahiert werden, bevor sie aufgerufen wird.

Diese Lösung funktioniert natürlich nur dann gut genug, wenn die Ausgabe gut strukturiert und so einfach zu analysieren ist.

Dass es sich um eine GUI-Anwendung handelt, ist kein Blockierungsproblem. Sie können es starten, eine Ausgabe generieren und es dann automatisch nachbearbeiten, wenn diese GUI beendet wird.

3
h22

Es gibt Unternehmen, die sich auf genau diese Art von Problem spezialisiert haben. Sie verwenden proprietären Code, um nativen Code in eine Hochsprache zu dekompilieren, und wenden dann menschliches Fachwissen an, um ihn nützlich zu machen (z. B. Variablen geeignete Namen zu geben).

Vor einigen Jahren hat mein Arbeitgeber damit nativen S/390-Mainframe-Code auf Linux-Server migriert. Wir gaben ihnen eine Binärdatei, sie gaben uns Quellcode in C.

Ob dies in Ihrem Fall notwendig ist, liegt bei Ihnen. Wenn Sie sich nur für das Format der Ausgabe interessieren, können Sie die Ausgabe einfach massieren, nachdem sie erstellt wurde. Wie andere bereits betont haben, kann es jedoch ein anhaltendes Risiko sein, Geschäftslogik in einem binären Blob zu verbergen.

3
slim

Schreiben Sie einige Tests, die so viele Fälle wie möglich mit dem alten Code ausführen. Finden Sie Eckfälle, testen Sie falsche Eingaben und testen Sie korrekte Eingaben.

Stellen Sie fest, welche Ausgabe in verschiedenen Fällen korrekt ist, und dann versuchen Sie, eine Implementierung zu schreiben, die dieselben Tests erfüllt.

Ich würde nicht den Reverse Engineering-Weg gehen. Es ist unglaublich kompliziert, Maschinencode umzukehren, und Sie sollten bereits wissen, was der Zweck der Exe ist. Reverse Engineering ist etwas zu viel Arbeit für das, wonach Sie suchen.

Wenn die Software vor 20 Jahren von einem Mann entwickelt wurde, braucht sie wahrscheinlich nicht viel moderne Energie. Ein GUI-Programm, das die Maschine vor 20 Jahren gestreckt hat, wird sich kaum auf einer modernen Maschine registrieren lassen. Sie suchen also wahrscheinlich nach etwas, das relativ einfach zu reproduzieren ist.

1
Carlos

Versuchen Sie, die Exe zurückzuentwickeln. Nur um die Berechnungslogik zu finden oder zumindest um einen angemessenen Hinweis darauf zu erhalten, was sie tatsächlich tut, und wenn Ihr Reverse Engineering Sie an diesen Punkt bringt, können Sie eine neue Anwendung schreiben, die auf dieser Berechnungslogik basiert. Abgesehen davon sehe ich keinen anderen Ausweg.

Leichter gesagt als getan, Reverse Engineering einer Exe, die vor 20 Jahren erstellt wurde, ist eine echte Herausforderung.

0
Mukesh Adhvaryu