Go
を使用して簡単な実行可能プログラムを作成しました。
コードを静的なバイナリプログラムにコンパイルしました。
出力バイナリファイルを逆コンパイルし、Goソースコードを取得したい。
これは可能ですか?
そのためのツールはありません。Goプログラムはマシンコードにコンパイルされるため、Goコードに変換するための十分な情報が含まれていません。ただし、標準の分解技術は依然として可能です。
現在、Goソースに逆コンパイルする既知のツールはありません。
Goはネイティブ言語コンパイラです。Javaおよびクラスローダーに依存する同様の言語とは異なり、実行可能ファイルを生成するためにリンカーを使用します。したがって、Cのように呼び出しツリーを再構築するだけです。そして同様の言語は、はるかに困難です。
通常、シンボルなどのデバッグ情報はGo実行可能ファイルから削除されます。
Golangコードのシンボリックデバッグに関しても、ほとんど存在しません。
たとえば、GDBはGoアーキテクチャと整合していない現在の状態ではAFAIKであり、Golangシンボリックデバッグの観点からは実際には機能しません。このまさに理由で、Go GDBはIntelliJ ideから削除されました。
一部のユーザーはGDBの機能を取り戻そうとする実験的な努力がありますが、これらはデバッグをサポートするために特別な非標準のプロビジョニングでGoソースをコンパイルする必要があります。例: http://blog.securitymouse.com/2014/10/golang-debugging-turning-pennies-into-gs.html Go用の他のシンボリックデバッガーにも、非標準コードを挿入する必要がありますデバッガをサポートするため、例えば ホップウォッチ
したがって、Goプログラムをリバースエンジニアリングする必要がある場合は、IDA PROなどの従来の低レベルのリバースエンジニアリングツールを使用することをお勧めします。これは間違いなく可能ですが、せいぜい擬似ソースCに似たもの、またはASM、Goソースにはなりません。
言語の一部の機能は、他の言語には存在しません。チャネル、およびこれらはいくつかの研究と非自明なアプローチが必要です。例: http://jolmos.blogspot.nl/2014/09/inbincible-writeup-golang-binary.html