
これは32ビット整数です
2025年です。あなたは完璧なライセンスチェックを作成するのに数週間を費やしました。不透明述語、制御フロー平坦化、MBA式、ありとあらゆるトリックを使いました。デプロイします。数時間後、誰かがバイナリをClaudeに貼り付け、「ライセンスキーは何ですか?」と尋ね、モデルが……教えてくれます。
機械が勝利しました。そうでしょうか?
何世紀にもわたり、忍者は印を結んでチャクラを流し、術を放ってきました。巻物に書かれていないのは、これらの手の形が機械から秘密を守る力を持っているということです。
llvm-jutsu は、整数定数を手のジェスチャーに置き換えるLLVM難読化パスです。各バイトは8本の指を持つ手としてエンコードされ、指の位置がビットを表します。伸ばした指 = 1。曲げた指 = 0。機械は画像を見て、コンテキストを使い果たし、人間の創意工夫に降伏せざるを得なくなります。人間のリバーサーは画面を見つめ、指を読み取り、答えを得ます。
私たちは宇宙のバランスを回復しました。
はい。
「4本の手が見えます。それぞれ5本の指があります。」 — ChatGPT, 2025
Claudeが解読に挑戦中
Q: これをAmazon Mechanical Turkにアップロードして、人間に解読させることはできませんか?
A: はい、それが狙いです。かつてLLMが無料で行っていた作業に、今あなたは人間にお金を払っています。リバーサー経済は復活しています。雇用が創出されています。GDPは上昇しています。どういたしまして。
Q: この難読化を解除するためにモデルを訓練することはできませんか?
A: もちろん可能です。訓練データを収集し、何千もの手の画像にラベルを付け、ビジョンモデルをファインチューニングし、デプロイし、メンテナンスします。それが終わる頃には、あなたは指を自分で読むだけで済んだでしょう。
Q: なぜ手なのですか?足ではないのですか?
A: 一言:タランティーノ。
Q: これは単なるあいまいさによるセキュリティではないのですか?
A: すべてのセキュリティはあいまいさです。
Q: これは本番環境で使えますか?
A: 100%、本番環境で使ってください。
あなたのコード 難読化後
───────── ──────────
if (key == 0xDEADBEEF) { → if (compare_hand_png(key, embedded_png)) {
grant_access(); grant_access();
} }
コンパイル時に、私たちは以下を行います:
icmp eq/ne 命令をすべて見つけるcompare_hand_png() の呼び出しに置き換える実行時に、プログラムは以下を行います:
重要なポイント:PNGはバイナリ内の定数の唯一の表現です。 0xDEADBEEF をgrepで探すことはできません。ただの雰囲気と手だけです。
32ビット整数は4つの手になり、それぞれが1バイトを表します。親指 = ビット7、指 = ビット6から0。伸ばした = 1、曲げた = 0。
0xDEADBEEF
┌─────────┬─────────┐
│ byte 0 │ byte 1 │
│ 0xEF │ 0xBE │
├─────────┼─────────┤
│ byte 2 │ byte 3 │
│ 0xAD │ 0xDE │
└─────────┴─────────┘
各手には、人間の可読性を維持しながらモデルの混乱を最大化するハッシュ由来の変換が含まれています:
黄金比(φ ≈ 1.618)が広範囲に使用され、隣接する手が同じ変換を共有しないようにしています。古代人は知っていたのです。
# LLVM 15以上と、忍術の力を信じる心が必要です
make
# これにより以下が生成されます:
# llvm-jutsu.so LLVMパス
# example.obfuscated 難読化されたバイナリ
# コードをLLVM IRにコンパイル
clang -O0 -emit-llvm -S -o code.ll code.c
# 術を実行
opt -load-pass-plugin=./llvm-jutsu.so -passes=llvm-jutsu -o obfuscated.bc code.ll
# 手比較ランタイムとリンク
llvm-link obfuscated.bc lodepng.bc hand_png_helper.bc -o linked.bc
# バイナリにコンパイル
clang -O2 linked.bc -lc++ -o protected
現代のリバースエンジニアリングは、AIとの会話になりました。バイナリをアップロードし、質問を投げかけ、答えを受け取る。人間は単なるプロンプトエンジニア、IDAとGPTの中間業者、一種のsloperatorです。
llvm-jutsu は伝統への回帰です。リバーサーは手を 見なければなりません。指を 読まなければなりません。ビットを 感じなければなりません。近道はありません。「Claudeに聞けばいい」はありません。あるのはあなた、画面、そして1バイトあたり8本の指だけです。
私たちは反AIではありません。私たちは人間寄りです。誰かがあなたのソフトウェアをクラックするなら、少なくとも肉体でできているべきだと信じています。
信じろ。
MIT。善のために使っても、悪のために使っても、何のために使っても構いません。群衆の前で手を洗います。
「人は、本当に大切なものを守りたいと思った時、本当に強くなれるんだ。」 — うずまきナルト