残念ながら、ソースコードを紛失し、Linuxではgccで作成された出力ファイルしかないので、今はコンピュータにアクセスできません。出力ファイルをソースファイル(Linuxのc)に変換する方法はありますか?
答え1
だからあなたは牛を持っていますが、誤ってそれをハンバーガーにしました。
申し訳ありません。動作しません。
バックアップからソースファイルを復元するだけです。
ああ、バックアップはありません。残念ながら、宇宙はあなたに休憩を与えません。
あなたはできますデコンパイルバイナリファイル。これはソースコードを提供しませんが、以下を提供します。一部同じ動作を持つソースコード。デバッグバイナリ以外では変数名を取得できません。最適化なしでコンパイルしないと、まったく同じロジックを取得できません。当然コメントは受け付けません。
使ったブーメラン一部のプログラムをデコンパイルすると、結果がマシンコードよりも読みやすくなります。これが最高のツールかどうかはわかりません。とにかく奇跡を期待しないでください。
答え2
実行可能ファイルをリバースエンジニアリングするときによく使用されるいくつかのツールがあります。
- "file"コマンドはファイルパスを最初の引数として使用するため(ほとんどの場合)、どのタイプの実行可能ファイルがあるかを確認できます。
- 逆アセンブラは実行可能ファイルの機能を正確に示していますが、特定のアーキテクチャ用のアセンブリコードを書いていない、または逆アセンブルの経験を持つユーザーは読みにくいです。
- Boomerang、Hex-rays、Snowmanなどのデコンパイラはより高い読みやすさを提供できますが、実際の変数名や元のプログラムの構文を回復することはできず、特に実行可能ファイルを作成するエンジニアが使用する場合は100%信頼できません。次のコマンドはこれらのパッケージなしでテストされ、セキュリティをさらに難読化しようとします。
- データフロー図またはテーブル。これを自動化する無料のツールはありませんが、アセンブリを出力するテキストパーサーの上にPythonまたはBashスクリプト(sedまたはPerlで書くことができます)が役に立ちます。
- 信じられないか、鉛筆や紙は、プロセスやアイデアを記録するために使用されます。
私が見たほとんどの場合、コードを最初から書き直したり、アセンブリ言語プログラムとして保持したり、以前のバージョンに変更要求を再適用して再構築する必要がありました。
答え3
あなたがしたいことは「デコンパイリング」と呼ばれます。市内には多くのデコンパイラがあり、ここですべてを扱うことは不可能です。
しかしながら、一般的に、Cソースコードから実行可能な機械語コードへの変換は損失を引き起こす。たとえば、
- コメントは元に戻せずに失われます。
- 変数名がありません。
- 時にはパフォーマンスのためにループを解くこともあります。
- 機能スケジュールが変更されることがある
コードは書かれた方法でコンパイルされることはほとんどありません。最近、ほとんどのコンパイラは最適化のためにコードを完全に変更します。したがって、デコンパイル時にコンパイラはソースコードがどのように見えるかを推測するだけで、ソースコードが何であるかを知る方法はありません。あなたのコードは消えたからです。デコンパイラが良い場合は、少なくとも同等の実行可能ファイルに再コンパイルされたコードを取得してから、ゆっくりと読みやすいものに再構成を開始できます。しかし、デコンパイラはまったく読めないスパゲッティコードを生成する可能性が高く、これを解読することは途方もない悩みになるでしょう。時には最終的にこれが起こるかもしれません。少ないプログラムを最初から書き直してください。