In unserem Unternehmen haben wir ein kleines Programm (.exe, 500 KB groß), das mathematische Berechnungen durchführt und am Ende das Ergebnis in einer Excel-Tabelle ausgibt, mit der wir unseren Workflow fortsetzen.
Ich möchte die Spalten, das Abstandsformat und die 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 zu sein, sie zu ändern, indem die EXE-Datei heruntergefahren / zurückentwickelt wird
Niemand weiß in welcher Sprache es programmiert wurde, das einzige was wir wissen ist:
- Vor über 20 Jahren entwickelt
- Developer ist vor 10 Jahren in den Ruhestand getreten
- GUI-Anwendung
- Läuft eigenständig
- Größe 500 KB
Irgendwelche Vorschläge, welche Optionen ich habe, um mit solchen Problemen umzugehen? Ist Reverse Engineering die einzige Option oder gibt es einen besseren Ansatz?
Antworten:
Reverse Engineering kann sehr schwierig werden, umso mehr, wenn Sie die Logik des Programms nicht nur verstehen, sondern ändern und neu kompilieren möchten. Als erstes würde ich versuchen, nach einer anderen Lösung zu suchen.
Wenn das das einzige ist, was Sie wollen und die Berechnung durch das Programm in Ordnung ist, warum schreiben Sie nicht ein Programm in der Sprache Ihrer Wahl (vielleicht ein Excel-Makro), das Ihr Erbe "exe" aufruft, die Ausgabe aufnimmt und verarbeitet des Weiteren.
quelle
subprocess.run()
, persönlich anzurufen .PIPE
Konstante. Andernfalls wird es verworfen. Was gibt es zu verstehen?Shell
Aufruf in Excel VBA wie folgt erforderlich : stackoverflow.com/questions/8902022/… . Sie können stdout / stderr vom Dienstprogramm cmd in separate Dateien umleiten und dann die Ausgabeformatierung anwenden.Zusätzlich zu den bereits gegebenen Antworten von Doc Brown und Telastyn möchte ich einen alternativen Ansatz vorschlagen (unter der Annahme, dass dies geschäftskritisch ist).
Wenn Sie die durchgeführten Berechnungen nicht kennen und die Berechnungen (etwas) unternehmenskritisch sind: Schliessen Sie die ursprüngliche Logik in der
.exe
Datei mit allen erforderlichen Mitteln ab. Dekodieren Sie es ggf. mit einem Dekompilierer / Disassemblierer wie IDA . Stellen Sie bei Bedarf einen Berater (oder eine Reihe von Beratern) ein.Sicher, umgehen Sie es jetzt mit ihrer Lösung, 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. Wenn also das Original
.exe
aufgrund von Änderungen auf Ihren Plattformen nicht mehr funktioniert (möglicherweise wird die 16-Bit-Unterstützung eingestellt?), Haben Sie gerade ein geschäftskritisches Wissen verloren .Jetzt mache ich mir keine Sorgen, dass ich das verliere
.exe
, sondern dass ich das Wissen verliere, das es codiert. Dieses Wissen muss zurückgewonnen werden.Wie zuvor: 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 notieren Sie es.
quelle
Fragen Sie nach Möglichkeit den ursprünglichen Programmierer.
Vor ein paar Wochen wurde ich von einer Firma kontaktiert, die ich vor 10 Jahren mit der gleichen Frage zu einer Mitte der 90er Jahre entwickelten MDB-Datei bearbeitet hatte.
quelle
Wenn Sie nur die Ausgabe ändern möchten, warum dann nicht einfach die Komposition verwenden?
Anstatt die Blackbox modifizieren können Sie nicht einfach zugreifen, erstellen Sie ein neues Programm, das die Excel - Ausgabe nimmt, und tut Ihre Formatierung / Spalte ändert sich auch . Dann könnten Sie eine neue exe / ein neues Skript erstellen, das die beiden Programme der Reihe nach aufruft. Für den Endbenutzer scheint es also nur ein einziges Programm zu geben, das die gesamte Arbeit erledigt - obwohl es sich um zwei verschiedene Schritte handelt.
quelle
Es gibt Unternehmen, die sich auf genau diese Art von Problem spezialisiert haben. Sie verwenden proprietären Code, um systemeigenen Code in eine Hochsprache zu dekompilieren, und wenden dann menschliches Fachwissen an, um ihn nützlich zu machen (z. B. um Variablen geeignete Namen zu geben).
Vor einigen Jahren verwendete mein Arbeitgeber dies, um nativen S / 390-Mainframe-Code auf Linux-Server zu migrieren. 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 nach der Produktion massieren. Wie andere bereits betont haben, könnte die versteckte Geschäftslogik in einem binären Blob ein anhaltendes Risiko darstellen.
quelle
Schreiben Sie einen einfachen Wrapper um das Programm und erfassen Sie die Ausgabe. Es ist nicht kompliziert, so viele Sprachen ( z. B. Java , C ++ , Python , .NET ) zu beherrschen. Analysieren Sie die Ausgabe und generieren Sie eine andere 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 dann automatisch nachbearbeiten, wenn diese GUI beendet wird.
quelle
Schreiben Sie einige Tests, in denen möglichst viele Fälle mit dem alten Code ausgeführt werden. Finden Sie Eckfälle, testen Sie die falsche Eingabe und testen Sie die korrekte Eingabe.
Legen Sie fest, welche Ausgabe in verschiedenen Fällen korrekt ist, und versuchen Sie dann, 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 ein bisschen zu viel Arbeit für das, was Sie suchen.
Wenn die Software vor 20 Jahren von einem einzigen Entwickler entwickelt wurde, benötigt sie wahrscheinlich nicht viel moderne Energie. Ein GUI-Programm, mit dem die Maschine vor 20 Jahren ausgelastet war, registriert sich kaum auf einer modernen Maschine, sodass Sie wahrscheinlich etwas suchen, das relativ einfach zu reproduzieren ist.
quelle
Versuchen Sie, die exe zurückzuentwickeln. Nur zum Zweck, die Berechnungslogik zu finden oder zumindest einen angemessenen Hinweis darauf zu erhalten, was sie tatsächlich tut, und wenn Ihr Reverse Engineering Sie zu diesem Punkt bringt, können Sie eine neue Anwendung schreiben, die auf dieser Berechnungslogik basiert. Abgesehen davon sehe ich keinen anderen Ausweg.
Einfacher gesagt als getan, Reverse Engineering einer vor 20 Jahren erstellten Exe ist eine echte Herausforderung.
quelle