Scrambler: Mixed Boolean Arithmetic Obfuscation Tool Using E-graph and Equality Expansion

이 논문은 동등성 확장을 기반으로 한 E-graph 를 활용하여 구성 단계에서 동등성이 보장되는 복잡하고 다양한 혼합 부울 산술 (MBA) 식을 효율적으로 생성하는 'Scrambler'라는 새로운 난독화 도구를 제안하고, 기존 도구보다 표현력과 복잡성이 향상되었음을 실험을 통해 입증합니다.

Seoksu Lee, Sangjun An, Eun-Sun Cho

게시일 Mon, 09 Ma
📖 3 분 읽기☕ 가벼운 읽기

Each language version is independently generated for its own context, not a direct translation.

📜 "스캠블러 (Scrambler)": 코드를 숨기는 마법의 요리사

이 논문은 프로그램을 해킹하거나 분석하기 어렵게 만드는 기술에 대한 이야기를 담고 있습니다. 마치 요리사가 맛있는 요리를 만들되, 그 레시피를 알 수 없게 만드는 것과 비슷하죠.

이 기술을 설명하기 위해 세 가지 핵심 개념을 일상적인 비유로 풀어보겠습니다.


1. 문제: "너무 쉬운 요리 레시피" (기존 기술의 한계)

지금까지 코드를 복잡하게 만드는 도구들은 **정해진 레시피 (규칙)**만 사용했습니다.

  • 비유: 요리사가 "소금만 넣는 법", "설탕만 넣는 법" 같은 단순한 레시피만 가지고 있습니다.
  • 결과: 해커들이 이 레시피를 외우면, 요리 (코드) 가 어떻게 만들어졌는지 금방 알아차리고 맛 (기능) 을 그대로 복원해버립니다. 또한, 만들 수 있는 요리 종류도 제한적입니다.

2. 해결책: "스캠블러 (Scrambler)"라는 새로운 요리사

이 논문에서 제안한 **'스캠블러'**는 기존 도구들과 완전히 다른 방식을 사용합니다.

🧩 비유 1: "동일한 맛을 가진 재료들" (E-Graph)

스캠블러는 코드를 단순한 나열이 아니라, **모든 가능한 변형이 동시에 연결된 거대한 그물망 (E-Graph)**으로 봅니다.

  • 상황: "소금 1g"과 "간장 1방울"이 같은 맛을 낸다고 가정해봅시다.
  • 기존 방식: 소금만 넣거나 간장만 넣는 두 개의 다른 요리를 따로 만들어야 합니다.
  • 스캠블러 방식: 그물망 안에 "소금"과 "간장"을 **같은 그릇 (E-class)**에 넣어둡니다. "이 두 재료는 맛 (의미) 이 똑같아!"라고 표시해두는 거죠. 이렇게 하면 코드를 분석할 때 어떤 재료를 썼든 결과는 똑같다는 것을 보장받습니다.

🌪️ 비유 2: "맛을 더하는 마법" (Equality Expansion)

기존 도구는 "최단 경로"를 찾아 요리를 빨리 끝내려 했지만, 스캠블러는 의도적으로 요리를 복잡하게 만듭니다.

  • 목표: "이 요리는 1000 개의 재료가 들어갈 때까지 계속 변형시켜!"
  • 과정:
    1. 간단한 요리 (예: x+yx + y) 를 그물망에 넣습니다.
    2. "소금 = 간장", "설탕 = 꿀" 같은 변환 규칙을 계속 적용합니다.
    3. 그물망 안에서 재료를 갈아치우며 요리를 점점 더 복잡하고 거대하게 만듭니다.
    4. 중요한 점: 재료가 아무리 많이 변해도, 원래 맛 (기능) 은 절대 변하지 않습니다.

3. 왜 이것이 대단한가요? (실험 결과)

연구팀은 스캠블러와 기존 도구들을 비교 실험했습니다.

비교 항목 기존 도구 (NeuReduce, Loki 등) 스캠블러 (Scrambler)
요리 크기 (복잡도) 중간 정도 (재료가 20~200 개) 엄청나게 큼 (재료가 3 만 개 이상!)
다양성 제한된 레시피만 사용 무한한 변형 가능
안전 확인 요리가 망가졌는지 한 번 더 확인 필요 (시간 걸림) 원래 맛 보장됨 (확인 불필요, 빠름)
  • 결과: 스캠블러는 기존 도구보다 수천 배 더 복잡한 코드를 만들 수 있었습니다. 해커가 이 코드를 뒤집어보려고 해도, 그 복잡함 때문에 포기하게 만들 가능성이 큽니다.

4. 핵심 요약: "왜 스캠블러가 특별한가?"

  1. 보장된 맛 (Equivalence Guaranteed): 코드를 아무리 복잡하게 변형해도, 프로그램이 원래 하던 일을 절대 망치지 않습니다. 그물망 구조 덕분에 변형 과정에서 실수가 날 수 없기 때문입니다.
  2. 검증 불필요: 기존 도구는 "이 복잡한 코드가 원래 코드랑 같은가?"를 확인하기 위해 무거운 계산기를 (SMT 솔버) 써야 했지만, 스캠블러는 구조상 이미 같은 것이 보장되어 있어 확인 과정이 필요 없습니다.
  3. 압도적인 복잡도: 적은 규칙 (약 14 가지) 만으로도 거대한 규모의 복잡한 코드를 순식간에 만들어냅니다.

🎁 결론

이 논문은 **"코드를 해커에게 숨기는 새로운 마법"**을 소개합니다.
기존에는 "단순한 규칙"으로 코드를 숨겼다면, 스캠블러는 "동일한 의미를 가진 수만 가지 변형"을 그물망으로 연결해 해커가 감당할 수 없을 정도로 복잡한 코드를 만들어냅니다.

마치 단순한 소금 한 알을, 수만 개의 다른 조미료 조합으로 변신시켜도 결국 같은 짠맛을 내는 마법과 같습니다. 덕분에 프로그램은 여전히 잘 작동하지만, 누가 만들었는지, 어떻게 작동하는지는 영원히 알 수 없게 됩니다.