実行可能ファイルをCソースコードに変換する

実行可能ファイルをCソースコードに変換する

残念ながら、ソースコードを紛失し、Linuxではgccで作成された出力ファイルしかないので、今はコンピュータにアクセスできません。出力ファイルをソースファイル(Linuxのc)に変換する方法はありますか?

答え1

だからあなたは牛を持っていますが、誤ってそれをハンバーガーにしました。

申し訳ありません。動作しません。

バックアップからソースファイルを復元するだけです。

ああ、バックアップはありません。残念ながら、宇宙はあなたに休憩を与えません。

あなたはできますデコンパイルバイナリファイル。これはソースコードを提供しませんが、以下を提供します。一部同じ動作を持つソースコード。デバッグバイナリ以外では変数名を取得できません。最適化なしでコンパイルしないと、まったく同じロジックを取得できません。当然コメントは受け付けません。

使ったブーメラン一部のプログラムをデコンパイルすると、結果がマシンコードよりも読みやすくなります。これが最高のツールかどうかはわかりません。とにかく奇跡を期待しないでください。

答え2

実行可能ファイルをリバースエンジニアリングするときによく使用されるいくつかのツールがあります。

  1. "file"コマンドはファイルパスを最初の引数として使用するため(ほとんどの場合)、どのタイプの実行可能ファイルがあるかを確認できます。
  2. 逆アセンブラは実行可能ファイルの機能を正確に示していますが、特定のアーキテクチャ用のアセンブリコードを書いていない、または逆アセンブルの経験を持つユーザーは読みにくいです。
  3. Boomerang、Hex-rays、Snowmanなどのデコンパイラはより高い読みやすさを提供できますが、実際の変数名や元のプログラムの構文を回復することはできず、特に実行可能ファイルを作成するエンジニアが使用する場合は100%信頼できません。次のコマンドはこれらのパッケージなしでテストされ、セキュリティをさらに難読化しようとします。
  4. データフロー図またはテーブル。これを自動化する無料のツールはありませんが、アセンブリを出力するテキストパーサーの上にPythonまたはBashスクリプト(sedまたはPerlで書くことができます)が役に立ちます。
  5. 信じられないか、鉛筆や紙は、プロセスやアイデアを記録するために使用されます。

私が見たほとんどの場合、コードを最初から書き直したり、アセンブリ言語プログラムとして保持したり、以前のバージョンに変更要求を再適用して再構築する必要がありました。

答え3

あなたがしたいことは「デコンパイリング」と呼ばれます。市内には多くのデコンパイラがあり、ここですべてを扱うことは不可能です。

しかしながら、一般的に、Cソースコードから実行可能な機械語コードへの変換は損失を引き起こす。たとえば、

  • コメントは元に戻せずに失われます。
  • 変数名がありません。
  • 時にはパフォーマンスのためにループを解くこともあります。
  • 機能スケジュールが変更されることがある

コードは書かれた方法でコンパイルされることはほとんどありません。最近、ほとんどのコンパイラは最適化のためにコードを完全に変更します。したがって、デコンパイル時にコンパイラはソースコードがどのように見えるかを推測するだけで、ソースコードが何であるかを知る方法はありません。あなたのコードは消えたからです。デコンパイラが良い場合は、少なくとも同等の実行可能ファイルに再コンパイルされたコードを取得してから、ゆっくりと読みやすいものに再構成を開始できます。しかし、デコンパイラはまったく読めないスパゲッティコードを生成する可能性が高く、これを解読することは途方もない悩みになるでしょう。時には最終的にこれが起こるかもしれません。少ないプログラムを最初から書き直してください。

関連情報