binファイルをC言語に変換することは可能でしょうか?

公式アカウントをフォロー+スターを付けて、楽しいコンテンツをお見逃しなく

10ec6ac0f13c42a986768085b9c2fc9e.gif

著者 | 黃強

WeChat パブリックアカウント | StrongHuang

バックグラウンドでネチズンからのメッセージを見ました:誰が bin ファイルを C 言語に変換できますか?

2b0369130981f810c27ab8187ee189a4.png

正直、bin ファイルを C 言語に変換するのは不可能だと思いますし、変換できたとしてもランプを点灯させるなどの非常に単純なプログラムです。

これまで真剣に勉強したことがなかったので、今日はただ少し時間をかけて勉強しました。Baidu/Google、ChatGPT、ダウンロードツール検証などが含まれます。

私の検証の最終結果は、bin ファイルを C 言語に変換することはほぼ不可能ですが、アセンブリに変換することは可能です。

リバースエンジニアリング

binファイルをC言語に変換する作業を専門用語ではリバースエンジニアリングといいます。平たく言えば「ひび割れ」と言います。

この種の作業は一般にハードウェア プラットフォーム (シングルチップ マイコンの特定のモデルなど) と深く組み合わされており、その逆の方が簡単です。

また、通常は PCB コピー ボードやチップの暗号化など、ボードとカードを組み合わせたリバース エンジニアリングを専門とするインターネット上の会社もいくつか見つかります。

83e64627fefab6d55389e96cae7a0117.png

チップクラックは今に始まったことではなく、プログラム(チップ)が登場した時からクラックはあり、基板も同様であり、このようなことは不思議ではありません。

実際、プログラムのクラックやボードのコピーに関係なく、ほとんどの場合、クラックできる製品にはクラックするのにお金の価値はありません。f9ad2f5bdeb044e912af718c259a4d0e.png

binファイルをC言語に変換する原理

bin ファイルを C 言語に変換できるかどうかを知りたい場合は、その基本原理を理解する必要があります。

この疑問についてBaidu/Googleに質問して結果は出ましたが、満足のいく回答は得られず、「おざなり」な内容ばかりでした。

4fb1ed5f69eb275288b59e435e0acd03.png

そこで、ChatGPT に再度質問しましたが、得られた答えはかなり消極的でした。

バイナリ ファイルを C 言語コードに変換するプロセスには、逆アセンブリおよびリバース エンジニアリング手法が含まれます。簡単な説明は次のとおりです。

逆アセンブリ: バイナリ ファイルは、コンピュータが直接実行できる命令であるマシン コードで構成されます。逆アセンブリとは、これらのマシンコードを対応するアセンブリ命令形式に変換することです。

リバース エンジニアリング: リバース エンジニアリングは、プログラムまたはバイナリを分析して、その機能、構造、および動作を理解することを目的としています。この例では、バイナリ ファイルから対応する C 言語コードを推定しようとしています。

シンボルの再構築: シンボルの再構築は、バイナリ ファイル内の関数、変数、その他のデータ構造などの要素の意味と使用法を識別して復元することを含む重要なタスクです。

制御フローの回復: 制御フローの回復とは、プログラムのさまざまな部分間のジャンプとフローを特定し、これに基づいて関数呼び出し関係グラフを再構築することを意味します。

擬似コードの生成: 通常、最終段階では C に似た (擬似コードとも呼ばれる) 表現を生成して、ソース コード構造を記述し、元のプログラムをできるだけ正確に復元します。

このプロセスは完全に自動化されておらず、非常に複雑であることに注意することが重要です。特に複雑なバイナリの場合、結果は正確ではない、または直接使用できない場合があります。したがって、実際のアプリケーションでは、通常、手動による分析とコードの作成を組み合わせて、より深いリバース エンジニアリングを行います。

f73db5dbd17c8a092b118cf14e42cf53.png

実際、一般的なプロセスは、ある程度の経験を持つ友人なら理解できると思います。bin ファイルを C 言語に変換する前に、まずアセンブリに変換し、次にアセンブリから C 言語に変換する必要があります

bin からアセンブリへの変換の難易度は比較的低いはずですが、コンパイルしてから C に変換する場合、変換できたとしても、変換された C のコードを理解できる人がどれだけいるでしょうか。

binファイルをC言語に変換するツールは何ですか?

理解するために、インターネット上で bin を C に変換するツールも見つけました。

bin ファイルはバイナリ ファイルであるため、C 言語コードに直接変換できません。これを読み取り可能な C コードに変換したい場合は、IDA Pro、OllyDbg、または Radare2 などのリバース エンジニアリング ツールを使用する必要があります。

699bb4351b68b7389891d66592705f95.png

ちなみに、ChatGPTについても質問しました。

逆アセンブリや分析に役立つように、バイナリ (.bin) ファイルを C コードに変換できるツールがいくつかあります。一般的に使用されるツールをいくつか示します。

IDA Pro: これは、強力な逆アセンブリおよび静的分析機能を提供する、広く使用されているリバース エンジニアリング プラットフォームです。IDA Pro はバイナリ ファイルを C 疑似コードに変換できるため、ソース コードの理解と再構築が容易になります。

Ghidra: これは NSA によって開発され、2019 年にリリースされた無料のリバース エンジニアリング フレームワークです。Ghidra はバイナリ ファイルから C 言語コードへの変換をサポートしており、非常に強力です。

Binary Ninja: これも、高度な逆アセンブリ、データ フロー分析、視覚化などの機能を提供する、人気のあるリバース エンジニアリング プラットフォームです。Binary Ninja は、バイナリ ファイルの C 言語表現への変換もサポートしています。

上記のツールを適切に使用するには、一定レベルの技術的知識が必要であり、結果が完全に正確ではない、または直接使用できるわけではないことに注意してください。したがって、機密情報を取り扱う前に、法令および関連する倫理原則に従い、法的ライセンス (必要な場合) を必ず取得してください。

88f091c25e09333484024d9e06aceb8d.png

また、広く使用されているリバース エンジニアリング プラットフォームである IDA Pro を使用して、実際に検証してみました。

eeba719db3e3a370b1eefd39cd2d5112.png

おおよその結果としては、アセンブリの変換(逆変換)はそれほど問題なく、C言語への変換は困難です。C言語に変換できたとしても、それは「疑似C」です。そんなC言語は分かりません。

したがって、小規模なプロジェクト (照明など) は転送する必要はありませんが、大規模なプロジェクトは転送できません。

わかりました、ここで共有しましょう。時間とエネルギーが限られているため、十分な知識がなかったり、間違っている可能性があります。

最後に皆さんに聞きたいのですが、リバースエンジニアリングをしたことがありますか?議論するメッセージを残すことを歓迎します。

------------ 終了 ------------

8a903c97f33fa5e0a3d7f89da2d85f07.gif

●コラム「組み込みツール

●コラム「組込み開発」

●コラム「Keilチュートリアル」

●埋め込み列に選択されたチュートリアル

公式アカウントに注意し、ルールに従って技術交流グループに参加するには「 Jiagroup 」と返信し、さらに多くのコンテンツを表示するには「 1024」と返信します。

de09757ce40e427726e5f111574ada50.jpeg

14ae2a38f1e6ea7ac79cb6ccf6a22c1c.png

さらに共有を確認するには、元のテキストを読む」をクリックしてください。

おすすめ

転載: blog.csdn.net/ybhuangfugui/article/details/132353174