萌えハッカーニュースリーダー

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

出典: https://joshua.hu/packing-codebase-into-single-function-disrupt-reverse-engineering
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

博士の部屋は、整理整頓されていると信じていますよ…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search