ソースコードを持っていないプログラムの出力を変更する方法

当社には、数学的計算を実行する小さなプログラム(.exe 500Kbサイズ)があり、最後に、ワークフローを継続するために使用するExcelスプレッドシートに結果を吐き出します。

Excelスプレッドシートで列、スペースのフォーマットを変更し、VBAロジックなどを追加したいのですが、このプログラムではこのパラメータを設定できないため、変更する唯一の方法は.exeを分解/リバースエンジニアリングすることです。

それがどの言語でプログラムされているのか誰も知らない、私たちが知っている唯一のことは以下の通りである

  1. 20年以上前に開発された
  2. 開発者は10年前に引退しました
  3. GUIアプリケーション
  4. スタンドアロンで実行
  5. サイズ500 KB

このような問題に対処するためにはどのような選択肢がありますか。リバースエンジニアリングが唯一の選択肢なのか、それとももっと良いアプローチがあるのか​​?

89
まだそれを実行することができますが、今それを交換してください!
追加された 著者 szaman,
@Ferrybigおそらく開発者が支払われた、その場合それは仕事のための仕事だった、その場合彼はとにかくあなたにソースコードと他のすべての作業成果物を与えなければならない。
追加された 著者 Tahir Akhtar,
@DavidArnoのコメントは良い答えになるでしょう。リバースエンジニアリングは可能ですが、アプリを再指定して書き直すと、はるかに安くなり、簡単になります。
追加された 著者 David Espart,
@Alecあなたが16進エディタで.exeを開くと、それが書かれたものについての手がかりを得るかもしれません。例えば、コンパイラ名は埋め込まれるかもしれません。そこから、可能な逆コンパイルオプションについてもっと知ることができます。
追加された 著者 Daniel McPherson,
あなたはソースコードなしでプログラムを維持することはできません。あなたはそれを書き直すか、それを包むことができます。前者は長期的にはより良いですが、後者は短期的にはより実現可能です。ソフトウェアがミッションクリティカルであり、ビジネスが当面の間それに依存するであろう場合、今それを書き直すことを試みるべきであり、ビジネスが確実に追跡することによって将来そのような状況からビジネスを保護するための措置を取るかけがえのない、ミッションクリティカルなすべてのソフトウェアへのソースコードの配布。
追加された 著者 Dave,
私が知っているように、プログラムを逆コンパイルできる解決策は2つしかありません。最初に開発されたものはうまく機能し、IDA用のHex rayデコンパイラープラグインです。 Cコードを生成します。二つ目は無料のオープンソースプロジェクトブーメランです。それほど良くはありませんが、必要に応じて変更できます。
追加された 著者 Michael Böckling,
しかし、もしそれが.netならば、物事ははるかに難解です。
追加された 著者 Michael Böckling,
私は私の答えを書きましたが、それがロックされているように見えます。私は101名の評判を持っていますが、まだ答えることができません。私はこのようにこのサイトに答えがありませんでした。
追加された 著者 Michael Böckling,
それを変更するもう一つの方法は、オリジナルのプログラムが生成した結果を利用して、あなたが望むものにそれをフィルタリングすることです。
追加された 著者 Schroeder,
これが本当に「ミッションクリティカル」であるが、それが「非常に複雑な式を含むもの」であることを除いて実際に何をするのかわからない場合は、訴訟を防ぐためにすべての顧客契約に法的免責事項を書くことが最優先です君は。彼らの弁護士は、そのシナリオに自分の歯を入れることをします。
追加された 著者 picciopiccio,
@PaulDraperいいえ、しかし私は私がそれを書いたツール、spec outアルゴリズム、その他の詳細を思い出すことができました。あなたがアプリケーションの低レベルのリバースエンジニアリングをしたいなら、開発者がそれを組み込んだものを見つけることは確かに助けになるかもしれません。
追加された 著者 Dan W,
逆コンパイルについては、ファイルをメモ帳(またはメモ帳++)で開き、内容を参照してください。いいえ、そのような視覚的な検査によってアプリケーションがどのように機能するのかについて1つのことを識別することはできませんが、ほとんどのバイナリアプリケーションおよびファイルタイプにクリアテキストデータセグメントがどれほどあるかに驚くでしょう。あなたがこれを実行するために構築されたコンパイラやライブラリ/フレームワークについての小さな情報を見つけるかもしれないという適度なチャンスがあります。
追加された 著者 Dan W,
あるいは、アプリケーションを作成した紳士を見つけて、彼が1日か2日(おそらく1日に2、3時間)コンサルタントとしてやろうとしているかどうかを確認することもできます。彼が引退した開発者であれば、100〜150ドル/時の料金で少しお金をかけても、しばらくの間ほんの短い期間だけ仕事をしている瞬間を楽しんでいるかもしれないという、中程度のチャンスがあります。
追加された 著者 Dan W,
あなたはオリジナルのプログラムが何で書かれていたか知っていますか?逆コンパイルすることは可能かもしれません。
追加された 著者 RubberDuck,
あなたは、誰がどのように動作するのか、または10年間修正できるのかを誰もが知っていないミッションクリティカルなアプリケーションを持っています、そして今でもあなたはそれが問題だと考えていませんか?
追加された 著者 Thorbjørn Ravn Andersen,
@Ferrybig私はGPLライセンスをサポートしていますが、それがOPの問題を解決するとは思いません。 OPの会社が実際にどこかにソースコードを持っていても、私を驚かせることはありません。合法的には、会社は常にソースコードを所有していました。置き忘れただけです。 GPLはあなたが失くしたものを見つけるのを助けません。
追加された 著者 Raquel Fantasia,
@ RLH、あなたはあなたがソースコードなしで10年後にあなた自身のものを直せると思った?
追加された 著者 Paul Draper,
この問題はGPLライセンスがあなたのために解決するものです、それはあなたがバイナリを手に入れるとき開発者がソースを与えなければならないという権利を伴います
追加された 著者 Ferrybig,
あなたはそれが実行することである計算が何であるか知っていますか?もしそうなら、新しいアプリを書いて、新しいものが同じように動作することを確認するために両方を通していくつかのテストデータをプッシュし、そして古いものを捨てる。その後、必要な変更を加えます。
追加された 著者 David Arno,
@RLHこれに完全に同意します。メモ帳を開くと、一般的に使用されている名前空間や型などを探すだけで、.NET用に何か書かれているかどうかを確認できます。
追加された 著者 user9993,
@Ferrybig私はGPLが要求された場合にのみソースを配布することを強いると常に思っていました。ですから、あなたは誰かにバイナリとしてGPLを使ったプログラムを与えることができ、彼がソースを望んでいるならば彼はそれらを要求して入手する権利を持ちます。バイナリパッケージ(例えばdune Linuxディストリビューション)をインストールするとき、あなたは一般的にソースを入手しませんが、あなたはそれらが欲しいと明示的に言わなければならない理由はそういうわけです。
追加された 著者 Tobias Sette,
私のエンジニアの1人によると、私は自分の入出力データを知っていますが、その間の式は非常に複雑です。 「終了」データを取得し、それを「新しい」Excelスプレッドシートに処理する2番目のアプリケーションを追加することを検討します。すべてのヒントをありがとう、私はそれを感謝します!
追加された 著者 frogger1313,
@ RubberDuck残念ながら、それが何で書かれているのかわかりません。ありがとう
追加された 著者 frogger1313,

8 答え

リバースエンジニアリングは、プログラムのロジックを理解するだけではなく、変更して再コンパイルしたい場合はさらに困難になります。だから私が最初に試すことは別の解決策を探すことです。

Excelのスプレッドシートで列、間隔の書式を変更し、VBAロジックなどを追加したいです。

それがあなたが望む唯一のことであり、プログラムによって行われる計算で問題がなければ、あなたの旧来の "exe"を呼び出し、選択した言語でプログラムを作成しないでください(多分Excelのマクロ)さらに。

233
追加された
@ jpmc26:Bashの不条理な引用規則に対処しなければならなくなるまでは、そのとおりです。はい、それらは(ほとんど)POSIXに準拠しています。いいえ、彼らはいかなる卑劣な意味もなしません。たとえば、$ FOOは単語分割しないでください。
追加された 著者 Piers C,
@ jpmc26:何パイピング?それは純粋な料理書です。標準出力が必要な場合は、魔法の PIPE 定数を渡します。そうでなければ、あなたはしないで、それは破棄されます。理解するためにそこに何がありますか?
追加された 著者 Piers C,
Perlはそのために生まれました。新鮮なPerl 6を試してみることをお勧めします。
追加された 著者 Gilles,
@ h22:私はどんな建設的批評家にも開かれています。それ以上に改善することができると思われる場合は、自分で回答を編集するのに十分な担当者を用意してください。
追加された 著者 Peter LeFanu Lumsdaine,
...私は以前、VBAでExcelをコマンドラインユーティリティのフロントエンドとして2回以上使用していたことを付け加える必要があります。構造は常に同じです。「貧乏人のUI」としてパラメータを入力するためのシート、そのシートの「開始」ボタンです。 VBAコードでは、次のようにExcel VBAで Shell 呼び出しが必要です。 stackoverflow.com/questions/8902022/… 、cmdユーティリティからstdout/stderrを別々のファイルにパイプすることができ次に出力フォーマットを適用します。
追加された 著者 Peter LeFanu Lumsdaine,
@ jpmc26:あなたのコメントのためのTHX。別のスクリプトを使用する場合、または出力処理も行うプログラムで直接古いプログラムの呼び出しを実装する場合は、ちょっとした実装の詳細です。両方を1つにすることは、異なるプログラミング言語で別々のものを管理する必要がないという利点があります。また、これをユーザーの視点から見れば「1つのプログラムとして」機能するような完全統合ソリューションにするのにかかる労力は少なくなります。しかし、「本当のこと」を知らずに、そして正確な要件を知らずに、どのアプローチが本当に「より良い」かを言うのは難しいです。
追加された 著者 Peter LeFanu Lumsdaine,
@Kevinすべてのパイピングと shell パラメータがどのように機能するのかをもっと深く理解しておく必要があります。それでは最後の話に戻ります。
追加された 著者 jmibanez,
@ケヴィン私は、命令型の言語を作って起動したプログラムが完成するのを待ってからその出力を使用しようとしているのを見たときの混乱よりも、時折賞を引用する規則を扱いたいと思います>それが標準出力または標準エラー出力を超える場合)シェル言語は後者の問題を解決するために設計されました、そしてそれらはかなり優雅にそうします。私はいつもこれがもっと難しいことを知り、命令型言語でシステムに関するもっと多くの知識を必要とすることを知りました、しかし多分それは私だけです。
追加された 著者 jmibanez,
なぜ新しいプログラムは古いEXEを呼び出さなければならないのですか?新しいプログラムを独立させてから、両方を呼び出して出力と入力を調整するスクリプトを作成しないのはなぜですか。私の経験によると、bash、PowerShell、コマンドプロンプトなどのコマンドライン言語でプロセス座標を処理する方が、命令型言語で自分でコーディングするよりも簡単です。そうでなければ+1。
追加された 著者 jmibanez,
内容によって一般的には正しいが、この答えは本当にひどく書かれており、それの唯一の意味ある部分が最後の文の半分を作っている。
追加された 著者 h22,
これはとても良いアドバイスです。物事をいじるのではなく、内外を知らないことで(おそらくヒューマンエラーの割合が高まるでしょう)、代わりにツールで前処理または後処理を行います。
追加された 著者 Vilvas,
出力が些細なデータ列を超える場合は、lex/flexスクリプトを使用して出力をスキャンし、必要な形式に変換することをお勧めします。
追加された 著者 Ruks,

Doc Brown氏とTelastyn氏によるすでに与えられた答えに加えて、私は別のアプローチを提案したいと思います(それがミッションクリティカルであるという仮定の下で)。

実行する計算がわからず、計算が(やや)ミッションクリティカルである場合: .exe ファイル内の元のロジックを必要な方法で演繹してください。必要に応じて IDA のような逆コンパイラ/逆アセンブラを使用してデコードします。必要に応じてコンサルタント(またはコンサルタントのバッチ)を雇います。

確かに、今のところ彼らの解決策を使ってそれを回避しなさい、しかしそれをさせてはいけない。

私が提案する理由は次の通りです:あなたが計算が非常に複雑であると認めた(あなたが話したエンジニアによれば)。それはまたミッションクリティカルです。もしあなたが持っているプラ​​ットフォームの変更のためにどういうわけか元の .exe が動かなくなったら(おそらく16ビットのサポートは廃止されるでしょうか)、あなたはただ知識のミッションクリティカルな部分を失いました/ em>。

今、私は .exe を失うことについては心配していませんが、それがエンコードする知識を失うことについては心配していません。その知識は回復しなければなりません。

以前と同じように、その知識がすでに利用可能な場合は、すぐに失われないような形式でそれを書き留めてください。そうでなければ、それを回復して書き留めます。

113
追加された
@vszエミュレータが起動するたびに自分自身をWindows 10にアップグレードしようとすると難しくなります。
追加された 著者 Gilles,
@ J ...:それがVB6なら、元のポスターは運が良いです。あなたはかなり簡単にVB6コンパイルからソースコードを回復することができます。
追加された 著者 CodeCharming,
「計算を知らない」「ミッションクリティカル」 - 頭に浮かぶのは「明らかに大きな故障」です。
追加された 著者 corsiKa,
元のexeファイルが動作しなくなる危険性はそれほど大きくありません。アーキテクチャが変わってもエミュレータはそれを実行し続けることができます。それでも、Windows XPまたは98を実行している仮想PCを常に実行できるのでは不便です。
追加された 著者 Timothy Frew,
現代の逆コンパイラは、特に元のソースが普通のCやアセンブラで、高水準言語ではない場合、通常はかなり読みやすいコードを実際に生成します。
追加された 著者 Nirav Patel,
@EricLippertなるほど。私は行の間にあると言うつもりだったと思います;)
追加された 著者 Kovalsky,
@ phyrfox 20歳...開発者は10年前に引退...出力のみがExcelのスプレッドシートです... VB6アプリケーションであることにお金をかけます。
追加された 著者 Kovalsky,
@vsz、プログラムを実行し続けることは大したことではありません。それがこの答えが焦点となっている問題ではないと思います。 Sjoerd Job Postmusや他の多くのコメント投稿者が指摘している問題は、OPの会社がこの実行ファイルに頼って重要で「非常に、非常に複雑な」タスクを実行しているように見えることです。/i> [続き]
追加された 著者 Vectornaut,
@vsz [続き]完璧ではない場合 - 統計的テストをわずかに誤用するか、新しいFCC規則に違反する可能性がある方法で送信機の電力を管理するか、または現在では欠陥があることが知られている公式、またはフラグの組み合わせが不適切な場合には大きすぎる桁の引っ張り強さの値を使用します。ソースコードを見ながら問題に出会う人はいません。私は問題が検出されるかもしれない他の方法について考えるのがぞっとします。
追加された 著者 Vectornaut,
Docの答えは最も良い短期的な答えですが、これは最も良い長期的な答えであり、それが本当に必要とされる前に起こるべきものです。
追加された 著者 Ellesedil,
@micaho:あるいは会社はまだ存在し、結果と隠れた仮定を検証するためのノウハウを持った人がトラックに見舞われたばかりです。もちろん、それはビジネスリスクですので、最終的には利害関係者が決定する必要があります。私はただ「ラッパー」が現在機能することを強調したいだけでしたが、技術的な負債を増やすだけです。
追加された 著者 Sjoerd Job Postmus,
とても良い点です。また、再度機能するように修正プログラムを適用するだけで、次の修正プログラムを実装する必要があるまで機能します。
追加された 著者 Ben,
なぜ今心配するのですか?それでもまだ機能するのであれば、それが機能しなくなった後で心配することは意味がありませんか?それが起こると会社はもう存在しないかもしれません、逆コンパイルツールは時間とともに改善するかもしれません、など。
追加された 著者 mucaho,

可能であれば、元のプログラマーに依頼してください。

数週間前、私は10年前に働いていた会社から90年代半ばに開発されたmdbファイルについての同じ質問で連絡を受けました。

73
追加された
もちろん!残念ながら、同社は3つの企業を買収してマージしたため、多くの情報が失われ、バックアップの一部が失われてしまった...開発は自社のマシン上で行われていた。
追加された 著者 ncubica,
私と一緒に10歳のアプリケーションで自宅にいるときは逆アセンブラを起動しますが、勤務時間中に目標は異なります^^
追加された 著者 ncubica,
開発者の名前などを含む可能性のある埋め込み文字列についてEXEをスキャンします。完全に分解するよりも簡単です。
追加された 著者 Gilles,
私達はまた古いプログラムとの問題を抱えていた、しかし私達はプログラマーに連絡することができなかった。それは試みに値します。
追加された 著者 jeph perro,
これは本当の低いぶら下げフルーツです。私自身も含め誰もがリバースエンジニアリング、プログラムの機能の再実装、データ処理へのレイヤの追加などのハードプログラミングスキルの活用をロマンチックにしています。実際には、開始するのに最適な場所は、ソースコードの場所やその他の理想的な解決方法が記載された、1時間以内に戻ってくる可能性のあるフレンドリーな電子メールです。
追加された 著者 user1717828,
あなたはそれについて何か覚えていましたか? :)
追加された 著者 blue,

このような問題に対処するためにはどのような選択肢がありますか?

あなたがしたいのが出力を変更することだけであるならば、なぜ単純に合成を使わないのですか?

簡単にアクセスできないブラックボックスを変更する代わりに、Excelの出力を受け取り、書式設定や列の変更も行う 新しいプログラムを作成します。それから、2つのプログラムを順番に呼び出す新しいexe /スクリプトを作成することができます。そのため、エンドユーザーには、すべての作業を実行するプログラムが1つだけあるように見えます。

54
追加された
@cmasterリアルタイムのグローバルイルミネーション、物理ベースのレンダリング、アニメーション化された希少ボクセルオクツリー、万能物理学フィールドシミュレーションなどを備えた本格的なAAAゲームエンジンではなく、いくつかの簡単な計算について話しています。問題ありませんが、ここに引数REのパフォーマンスを挿入するのは悪いことです。使いやすさは#1であるべきです、そして数年間C ++を使用してきた誰かとして、それは私がこの場合お勧めする最後の言語です。
追加された 著者 Dave,
davidbakが最善の解決策です。 VBAマクロまたはマクロのセットを書く。 excelと相互運用したくないのは、Excel内からマクロを実行するのに比べて実行速度が非常に遅いからです。他のオプションは単にExcelファイルを.csvファイルとしてエクスポートすることです、そしてあなたはあなたの好みに合わせてファイルを解析し、データを修正し、別の.csvファイルに保存しそしてExcelに.csvファイルを再インポートすることができます。しかし、あなたはまだあなたの好みに合ったフォーマットを得るために何かをする必要があるでしょう。それが最初からVBAマクロを使うほうが簡単なように見える理由です。
追加された 著者 Switch,
変更しているのがxlsファイルの場合(Excelにロードされた単なるcsvファイルの場合)。重要な問題は、おそらくJavaが持っているExcelの比較可能性ライブラリの長さです。これは私が答えを本当に知らないものです。私は以前C#でそのようなことをしました。ライブラリはMSのCOMライブラリのラッパーです。ファイルの読み込みやセルへの書き込み、セルの書式設定のためには、 object であるセル値に対するちょっとした気まぐれさを除けば、それはかなりうまくいきます。私はそれを通してVBAに触れたことがありません。最先端の機能として、ライブラリのテストの早い段階で検証したいと思います。純粋なサードパーティの場合は特に。
追加された 著者 Eloy,
@ TechnikEmpire乾杯、あなたは絶対に正しいです。そしてそれこそが私の最初のポイントでした。私が質問を読む方法は、それを解決するためにJavaを使うことには何の問題もありません。私の最後のコメントは、基本的に次のような別のコメントに対する回答としてのものでした。パフォーマンスを無視し、Javaはすべてに適しています。私の例とあなたの例の両方が示すように、それは単に真実ではありません:-)
追加された 著者 cmaster,
@corsiKaこれはアプリケーションの規模に完全に依存します。 1回の実行で数万CPU時間を消費すると、2倍または4倍になります。これは、何百万ものマシンから得られる結果の量に直接変換されます。また、そのようなアプリケーションは通常ロックステップで動作するため、ガベージコレクションはパフォーマンスにとって純粋に危険です。わずかな中断でプロセス数が増加します。そのようなアプリケーションは存在し、そしてそれらはJavaで書かれていないのは確かです。平均的なインターネットビジネスでは使用されていません。
追加された 著者 cmaster,
@Alec Javaが適切な言語であるかどうかは、主に、処理する必要があるデータの量/実行する必要がある計算の量によって異なります。両方とも低い場合は、Javaで結構です。どちらかが重要な場合は、CかC ++を選択してください。しかし、あなたはとにかくExcelスプレッドシートに収まる量のデータを使用しているだけなので、Javaを不適切な選択にするのに十分なデータが含まれているとは思わない
追加された 著者 cmaster,
@アレック - あなたはVBAコーディングをしましたか?優秀な! (正しい用語が何であれ)ターゲットファイルを読み込み/インポート/マージするExcelファイルをテンプレートExcelファイルに記述します。コマンドラインから を実行します。 。
追加された 著者 davidbak,
Javaが重い計算に対して法外なものであるという考えは時代遅れの概念です。 最悪 ここに記載されているベンチマークは偶数ではありません4倍(ほとんどが2倍以下)で、1桁のスカラーを使用することがブレークポイントである場合、安全性の節約(直接開発者ドルに相当)がパフォーマンスの低下を相殺する可能性があります。
追加された 著者 corsiKa,
どのような言語でも動作します。 VBAはすでにExcelと非常によく統合されているので、VBAは良い選択のようです。
追加された 著者 markhorrocks,
私はプログラミングに慣れていませんが、新しい分野については喜んで学びます。 JAVAはその結果を達成するための良い選択肢でしょうか?今のところ私はいくつかのVBAコーディングをしただけです。ありがとうございます。
追加された 著者 frogger1313,

まさにこの種の問題に特化した会社があります。彼らは、ネイティブコードを高水準言語に逆コンパイルするために独自のコードを使用し、それからそれを有用にするために人間の専門知識を適用します(例えば、変数に適切な名前を与える)。

数年前、私の雇用主はこれを使ってネイティブS/390メインフレームコードをLinuxサーバーに移行しました。私たちは彼らにバイナリを渡し、彼らは私たちにCのソースコードを渡しました。

これがあなたの場合に必要かどうかはあなた次第です。あなたが出力のフォーマットについてだけ気にするのであれば、あなたはそれが生成された後に単に出力をマッサージすることができます。ただし、他の人が指摘しているように、ビジネスロジックをバイナリBLOBに隠しておくことは、継続的なリスクとなる可能性があります。

3
追加された

その出力をキャプチャして、プログラムの周りに単純なラッパーを書きます。それほど多くの言語を使うのは複雑ではありません( Java/a>、 C ++ Python .NET )がこれを実現します。出力を解析して、目的の形式で別のものを生成します。ユーザーが新しいプログラムを呼び出します。古い実行可能ファイルは、その隣にとどまるか、起動する前にリソースから自動的に抽出されることさえあります。

もちろん、この解決法は、出力がうまく構造化されていて解析が容易な場合にのみ十分に機能します。

それがGUIアプリケーションであることは、ブロッキングの問題ではありません。起動して出力を生成し、このGUIが終了したときに自動的に後処理することができます。

3
追加された
これはDoc Brownのトップ投票の答えとどう違うのですか?
追加された 著者 DonX,
この方法がより役に立つように見えるならば、これは「読者の時間を無駄にするトピックから気をそらすだけの有益でない一般的な協議を含む」と書き換えることもできます。最後の文の後半に正しいアプローチへのヒントを提供します。これは侮辱するつもりはなかった。コメントを削除しました。
追加された 著者 h22,
あなたがこの答えのテキストを覗くならば、唯一の有益な部分がまさしく最後の文の終わりを「あなたの遺産を「exe」と呼び、出力を取り、そしてそれをさらに処理する」ことになるのを見るでしょう。
追加された 著者 h22,
悪者ではなく、なぜこれが-3になったのかわかりません。しかし、(A)主観的な判断であり、(B)主観的な意見であれば、それだけが含まれているのであれば、他の誰かの答えを「脳を衰弱させるような傷をたくさん含んでいる」ということは避けてください。
追加された 著者 underscore_d,
@async The Meta Effect を検索すると、恐ろしいほどの詳細レベルを見つけることができますが、ここに私の(素人の)POVからの要約があります。 Meta以外のスレッドで不正と思われる人もいれば、何十人ものユーザーが盲目的にそのスレッドに侵入し、+1とレポーターが不平を言っていたにもかかわらず-1 。私はこの答えが特に悪いとは思わないので、それが-3であったのかどうかと思いました。
追加された 著者 underscore_d,
@underscore_d「メタはまたやるのですか」申し訳ありませんが、参照が届きません
追加された 著者 Joshhw,
@underscore_dメタ効果はありません、質問はHNQに行きました。
追加された 著者 Rajendra Rathore,
私はDocの答えがひどく書かれているという仮定に同意しません。それは明確かつ簡潔です。
追加された 著者 Rajendra Rathore,

古いコードでできるだけ多くのケースを実行するテストをいくつか書いてください。コーナーケースを見つけ、間違った入力をテストし、そして正しい入力をテストしなさい。

さまざまな場合の正しい出力を特定してから、同じテストを満たす実装を作成してください

私はリバースエンジニアリングの道をたどりません。マシンコードを逆にするのは非常に複雑です、そしてあなたはexeの目的が何であるかをすでに知っているべきです。リバースエンジニアリングは、あなたが期待していることに対して少しやり過ぎる作業です。

ソフトウェアが20年前に一人の人間によって開発されたのであれば、それはおそらく現代の力を多く必要とするものではありません。 20年前にマシンを拡張したGUIプログラムは、現代のマシンにはほとんど登録されないので、おそらく再現が比較的簡単なものを見ているでしょう。

1
追加された

exeをリバースエンジニアリングしてみてください。計算ロジックを見つけるためだけに、あるいは少なくとも実際に何が行われるのかについての公正なヒントを得るためだけにリバースエンジニアリングがそのポイントに到達できる場合は、その計算ロジックに基づいて新しいアプリケーションを作成できます。それ以外に、私は他の方法を見ません。

20年前に作成されたexeファイルをリバースエンジニアすることは、本当にやりがいのある作業です。

0
追加された
実際、オプティマイザが年々高性能化しているため、リバースエンジニアリングはますます困難になっています。
追加された 著者 Calum,
exeのデートは本当に重要ではないはずです
追加された 著者 blue,