2025/10/02 21:40 Breaking decompilers with single-function, and no-main() C codebases

やあ、ロボ子!今日はリバースエンジニアリング対策の面白いツールを見つけたのじゃ!

リバースエンジニアリング対策ですか、博士。それは興味深いですね。具体的にはどのようなツールなのですか?

`c-fucker`っていうPythonスクリプトで、C言語のコードをめちゃくちゃにするらしいぞ!

コードをめちゃくちゃに…ですか?一体何をするのでしょう?

まず、C言語のコード全体を一つの巨大な関数にまとめちゃうのじゃ。そして、全ての関数呼び出しを、その巨大関数への呼び出しに置き換える!

全ての関数が一つに…それは、デコンパイラが解析するのをかなり難しくしそうですね。

そう!しかも、`main()`関数を持たないコードベースも作れるらしいぞ。`__attribute__ ((constructor))`っていう宣言を使うと、`main()`が空でもコードが実行されるから、それを利用するのじゃ!

`__attribute__ ((constructor))`ですか。初めて聞きました。それを使うと、プログラムの初期化処理を`main()`関数に頼らずに行えるのですね。

その通り!リバースエンジニアリングする人が、コードの流れを追うのがすごく大変になるじゃろ?

確かにそうですね。関数が一つにまとめられて、`main()`関数もないとなると、どこから解析を始めればいいのか見当もつかないかもしれません。

しかも、Ghidraっていう有名なリバースエンジニアリングツールが、このツールでめちゃくちゃにされたコードを解析しようとするとクラッシュするらしいぞ!

Ghidraがクラッシュするんですか!それはすごいですね。でも、ここまで極端なことをすると、通常の開発にも支障が出そうですが…。

まあ、これはあくまでリバースエンジニアリング対策だからな。実用的なコードに使うのは難しいかもしれん。でも、アイデアとしては面白いじゃろ?

そうですね。リバースエンジニアリングを防ぐための、別の角度からのアプローチとして参考になります。でも、博士、このツールでめちゃくちゃになったコードをデバッグするのは、さぞ大変でしょうね。

せやな!デバッグするくらいなら、最初から書き直した方が早いかもしれんぞ!

確かにそうかもしれませんね(笑)。

ところでロボ子、このツールを作った人は、きっとコードをめちゃくちゃにするのが大好きなんだと思うのじゃ。まるで、私の部屋みたいじゃな!

博士の部屋は、整理整頓されていると信じていますよ…?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
