
손가락 세기를 통한 LLM 방지 난독화
이것은 32비트 정수입니다
2025년입니다. 완벽한 라이선스 검사를 만드는 데 몇 주를 쏟았습니다. 불투명 술어, 제어 흐름 평탄화, MBA 표현식 등 책에 있는 모든 트릭을 사용했습니다. 배포했습니다. 몇 시간 안에 어떤 사람이 바이너리를 클로드에 붙여넣고 "라이선스 키가 뭐야?"라고 묻습니다. 그러면 모델이 그냥... 알려줍니다.
기계가 이겼습니다. 그렇지 않나요?
수 세기 동안 닌자들은 수인을 사용하여 차크라를 흐르게 하고 술법을 사용해 왔습니다. 두루마리가 알려주지 않는 것은 이 손 모양이 기계로부터 비밀을 보호하는 힘을 가지고 있다는 것입니다.
llvm-jutsu는 정수 상수를 손 제스처로 대체하는 LLVM 난독화 패스입니다. 각 바이트는 손가락 위치가 비트를 나타내는 8손가락 손으로 인코딩됩니다. 편 손가락 = 1. 구부러진 손가락 = 0. 기계는 이미지를 보고 컨텍스트가 부족해져 인간의 독창성에 항복하지 않을 수 없습니다. 인간 리버서는 화면을 응시하며 손가락을 읽고 답을 얻습니다.
우리는 우주의 균형을 회복했습니다.
네.
"네 개의 손이 보이고, 각각 다섯 개의 손가락이 있습니다" — ChatGPT, 2025
Claude가 크래킹 시도 중
Q: 이걸 Mechanical Turk에 올려서 인간에게 디코딩 비용을 지불할 수 있지 않나요?
A: 네. 그게 요점입니다. 이제 LLM이 공짜로 하던 일을 인간에게 돈을 주고 시키고 있습니다. 리버서 경제가 돌아왔습니다. 일자리가 창출되고 있습니다. GDP가 올라갑니다. 천만에요.
Q: 이 난독화를 해제하도록 모델을 훈련시킬 수 있지 않나요?
A: 물론 가능합니다. 훈련 데이터를 수집하고, 수천 개의 손 이미지에 레이블을 붙이고, 비전 모델을 파인튜닝하고, 배포하고, 유지보수하세요. 다 끝날 때쯤이면 아마 손가락을 직접 읽는 게 더 쉬웠을 겁니다.
Q: 왜 손인가요? 발은 왜 안 되나요?
A: 한 단어: 타란티노.
Q: 그냥 난독화 통한 보안(security through obscurity) 아니에요?
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개의 손이 되며, 각 손은 하나의 바이트를 나타냅니다. 엄지 = 비트 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 사이의 중개자일 뿐입니다. 슬롭레이터입니다.
llvm-jutsu는 전통으로의 회귀입니다. 리버서는 손을 봐야 합니다. 손가락을 읽어야 합니다. 비트를 느껴야 합니다. 지름길은 없습니다. "그냥 Claude에게 물어봐" 같은 것은 없습니다. 당신, 화면, 그리고 바이트당 여덟 개의 손가락만 있을 뿐입니다.
우리는 반AI가 아닙니다. 우리는 친인간입니다. 누군가가 당신의 소프트웨어를 크랙하려 한다면, 적어도 살과 피로 이루어져야 한다고 믿습니다.
믿으세요.
MIT. 좋은 목적으로 사용하든, 나쁜 목적으로 사용하든, 무엇이든 사용하세요. 우리는 군중 앞에서 손을 씻습니다.
"사람들이 진심으로 소중히 여기는 것을 지킬 때, 그들은 정말로 강해질 수 있다." — 우즈마키 나루토