이 보고서를 왜 읽어야 할까요?

AI 기반 리버스 엔지니어링 도구는 이제 난독화된 애플리케이션 코드를 해독할 수 있을 만큼 강력해졌습니다. 모바일 소프트웨어를 보호하는 모든 보안 팀은 위험이 정확히 어디에 있는지 파악해야 합니다.

Promon의 보안 연구팀은 두 가지 프로세서 아키텍처에 걸쳐 수천 개의 난독화된 코드 샘플을 대상으로, 세계 최고 수준의 AI 모델 10개를 동원하여 엄격한 실증 테스트를 수행했습니다. 그 결과, 난독화 기법은 여전히 효과가 있지만, 모든 환경에서 동등하게 작동하는 것은 아니며, 대부분의 위협 모델이 가정하는 방식대로 작동하지도 않는다는 사실이 밝혀졌습니다.

귀사가 적대적인 환경에서도 보호되어야 하는 소프트웨어를 출시하고 있다면, 이 보고서는 방어 전략에 대한 귀사의 사고를 한층 더 날카롭게 해줄 것입니다. 이 보고서에서는 다음 내용을 확인할 수 있습니다:

  • 왜 난독화 기법을 결합하면 단일 기법을 단독으로 사용할 때보다 훨씬 강력한 보호 효과를 얻을 수 있는지, 그리고 데이터가 보여주는 정확한 배가 효과는 무엇인지

  • 동일한 보호 조치를 적용했을 때, ARM 기반 모바일 앱이 x86 애플리케이션보다 AI 공격에 훨씬 더 잘 견디는 이유와, 이것이 귀사의 위협 모델에 어떤 의미를 갖는지

  • AI 난독화 해제 도구가 이미 깨끗한 코드에 대해 내재된 오류율을 가지고 있는 이유와, 이것이 난독화와 결합되어 공격자의 입지가 헤드라인에 제시된 수치보다 훨씬 취약해지는 과정

  • 공격자가 사용하는 디컴파일러 도구의 품질이, 그들이 사용하는 AI 모델만큼이나 상황을 크게 바꾼다는 점

  • 현재 주요 AI 모델 중 어떤 것이 난독화된 코드에 가장 큰 위협을 가하는지, 그리고 어떤 모델이 실제 환경에서는 대부분 실패하는지

  • 아키텍처, 공격자의 기술 수준, 그리고 현재 AI 성능 상태에 맞춰 조정된 보안 및 제품 팀을 위한 6가지 구체적인 권고 사항

아래에서 보고서를 읽거나 다운로드하십시오.

 

 
바로 가기:

코드 난독화와 그 중요성

결과

주요 요점

권고 사항

연구 방법론

인용문

 

서론

수년 동안 코드 난독화는 모바일 애플리케이션 보안 도구 중 가장 신뢰할 수 있는 수단 중 하나였습니다. 난독화는 앱 코드의 내부 구조를 뒤섞어, 코드를 읽거나 이해하거나 복사하기 어렵게 만듭니다. 그 목적은 지적 재산을 보호하고, 잠재적 공격자의 시도를 좌절시키며, 합법적인 소프트웨어가 악성코드 스캐너의 탐지를 피할 수 있도록 돕는 데 있습니다. 이는 은행, 핀테크 기업, 대기업 및 잠재적으로 적대적인 환경에 소프트웨어를 배포하는 모든 조직을 위한 기초적인 방어 계층입니다.

더 읽어보기: 보안 전문가를 위한 코드 난독화 종합 가이드

인공지능, 특히 GPT, Claude, Gemini, DeepSeek과 같은 대규모 언어 모델(LLM)은 소프트웨어 개발자들에게 유능한 조력자가 되었을 뿐만 아니라, 타인의 소프트웨어를 리버스 엔지니어링하여 민감한 데이터를 유출하고 사기를 저지르려는 이들에게도 점점 더 유용한 도구가 되고 있습니다. 이러한 모델들은 디스어셈블된 코드를 읽고, 그 논리를 분석하며, 원본 프로그램을 재구성하려고 시도할 수 있습니다. 오늘날 모든 보안 엔지니어가 직면한 질문은 난독화 기술이 여전히 유효한지 여부입니다.

Promon의 보안 연구팀은 이 질문에 실증적으로 답하기 위해, 전 세계에서 가장 뛰어난 성능의 AI 모델 10개를 대상으로 가장 널리 배포된 상용 난독화 프레임워크 중 하나인 Obfuscator-LLVM(OLLVM)과 비교 테스트를 진행했습니다. 이 테스트는 두 가지 프로세서 아키텍처(ARM 및 x86)와 수천 개의 코드 샘플을 대상으로 진행되었습니다. 그 결과에는 안도감을 주는 부분과 경고를 주는 부분이 모두 포함되어 있습니다.

 

코드 난독화와 그 중요성

개발자가 애플리케이션을 작성할 때, 소스 코드는 비교적 읽기 쉽습니다. 여기에는 프로그래머의 의도를 반영하는 논리, 함수 이름, 주석 및 구조가 포함되어 있습니다. 배포를 위해 바이너리로 컴파일되면 이러한 명료성의 상당 부분이 사라지지만, 리버스 엔지니어링 도구를 사용하면 여전히 부분적으로 복원할 수 있습니다. 난독화는 컴파일된 바이너리를 대상으로 의도적으로 이를 더욱 왜곡하여, 재구성을 훨씬 더 어렵게 만듭니다.

더 읽어보기: 난독화 설명: 코드 보호 기법에 대한 종합 가이드

OLLVM은 다음 세 가지 핵심 변환 기법을 적용하는 컴파일러 수준의 난독화 프레임워크입니다:

명령어 대체(SUB) 는 표준 산술 연산을 기능적으로는 동일하지만 더 복잡한 시퀀스로 대체합니다. 이를 “cat”이라는 단어를, 같은 의미를 지니지만 분석하는 데 더 오랜 시간이 걸리는 생소한 동의어로 대체하는 것으로 생각하면 됩니다.

제어 흐름 평탄화(FLA) 는 프로그램의 자연스러운 분기 구조, 즉 if/then/else 논리와 루프를 해체합니다. 그런 다음 이를 실행 경로를 제어하는 중앙 트래픽 컨트롤러로 대체합니다. 그 결과, 시각적으로 흐름을 파악하기가 거의 불가능한 프로그램이 만들어집니다.

가짜 제어 흐름(BCF) 은 프로그램에 가짜 조건 분기 및 도달할 수 없는 코드 경로를 삽입하여, 공격자의 시간과 주의를 소모시키는 막다른 길과 허위 단서를 생성합니다.

OLLVM 3 layers of protection
이러한 기법들은 개별적으로 또는 조합하여 적용될 수 있으며, OLLVM은 합법적인 상용 애플리케이션은 물론, 안타깝게도 정교한 악성코드에서도 광범위하게 사용되고 있습니다. 이러한 보호 메커니즘이 AI 기반 리버스 엔지니어링에 얼마나 효과적으로 대응하는지 이해하는 것은 배포된 소프트웨어를 보호할 책임이 있는 모든 이에게 직접적인 영향을 미칩니다.

더 읽어보기:AI 난독화 해제 도구: AI가 (아직은) 해커들의 코드 난독화 해제에 도움이 되지 않는 이유

결과

다음은 저희의 연구 결과입니다.

결과 표

아래 표는 테스트된 10개 모델 전체의 평균 성공률을 요약한 것으로, 난독화 복잡도와 입력 유형이 AI 난독화 해독 성능에 어떤 영향을 미치는지 보여줍니다.

Results_table

이 결과는 테스트된 10개 모델 전체의 평균을 나타냅니다. 최고 성능을 보인 개별 모델들은 이 평균을 크게 상회하는 반면, 성능이 가장 낮은 모델들은 평균보다 훨씬 낮은 수치를 기록했습니다. 기준(Baseline) 행은 난독화가 전혀 적용되지 않은 코드의 성능을 보여줍니다. 이는 어떠한 보호 조치도 적용되기 전, 공격자의 출발점입니다.

 

주요 결론

본 연구를 통해 보안 및 제품 팀이 주목해야 할 몇 가지 중요한 결과를 도출했습니다.

AI는 실질적인 위협이 되지만, 그 위협의 정도는 모든 곳에서 동일하지 않습니다

세 가지 난독화 단계를 모두 적용한 가장 강력한 조합 하에서도, 성능이 가장 뛰어난 AI 모델들은 x86 아키텍처(대부분의 데스크톱 및 서버 컴퓨팅에 사용되는 프로세서 아키텍처)에서 약 20~36%의 확률로 작동하는 코드를 성공적으로 재구성해 냈습니다. 이는 결코 사소한 문제가 아닙니다. 공격자가 최상위 수준의 AI 도구에 난독화된 함수 3~4개를 입력할 때마다, 그중 하나 이상은 성공적으로 해독될 가능성이 높습니다.

ARM 아키텍처는 사실상 모든 최신 스마트폰과 태블릿에 사용되는 프로세서입니다. 이 아키텍처의 경우, 방어 측에 훨씬 유리한 상황이 펼쳐집니다. 동일한 최대 난독화 수준에서 평균 성공률은 8.5%로 떨어졌으며, 대부분의 모델은 한 자릿수 성공률을 기록했습니다. ARM 어셈블리에서 가장 성능이 뛰어난 모델은 24%의 성공률을 기록했으며, 이는 고품질 디컴파일된 입력을 제공했을 때의 50%와 대비되는 수치입니다.

실질적인 시사점은 OLLVM의 계층적 보호 기능이 모바일 앱의 주요 플랫폼인 ARM에서는 진정으로 효과적이라는 것이다. 반면 x86 환경에서는 그 효과가 상대적으로 낮으며, 이 환경에서는 AI 도구, 특히 플래그십 모델들이 여전히 우려할 만한 영향력을 유지하고 있다.

아키텍처 격차는 예상보다 더 크다

난독화된 코드의 근본적인 수학적 복잡도가 두 아키텍처에서 거의 동일하다는 점을 고려할 때, x86과 ARM 간의 AI 성능 격차는 놀라울 정도입니다. 세 가지 난독화 단계를 모두 적용했을 때, 코드 복잡도(프로그램 내 기본 구성 요소의 수로 측정)는 두 아키텍처 모두에서 약 610~611개 블록에 달합니다. 구조적으로 볼 때 문제는 동일합니다. 그러나 x86 아키텍처에서 AI 성공률은 평균 2.4배 더 높으며, 개별 모델의 경우 그 격차가 최대 5배에 달하기도 합니다.

가장 유력한 원인은 훈련 데이터입니다. 테스트된 모델들은 공개 인터넷에서 수집한 방대한 양의 코드와 문서를 바탕으로 훈련되었습니다. 해당 데이터에서는 x86 어셈블리 언어가 ARM보다 훨씬 더 많이 포함되어 있습니다. 수십 년에 걸친 PC 및 서버 컴퓨팅 문서, 리버스 엔지니어링 블로그, 악성코드 분석 보고서, 포럼 토론 등은 대부분 x86을 다루고 있습니다. ARM은 모바일 컴퓨팅 분야에서 지배적인 위치를 차지하고 있음에도 불구하고, 주목받는 리버스 엔지니어링 논의에서는 비교적 최근에 등장한 편입니다.

이는 AI 모델들이 ARM 코드에 대한 경험이 상대적으로 부족하기 때문에, 현재 ARM 기반 모바일 애플리케이션이 어느 정도 ‘자연스러운’ AI 저항력을 누리고 있음을 의미합니다. 이러한 이점은 훈련 데이터 세트가 확대됨에 따라 점차 약화될 수 있습니다.

3 pass obfuscation success rates

AI 도구는 난독화 전에도 내재된 오류율을 가지고 있습니다.

이는 연구에서 가장 중요하면서도 제대로 평가받지 못한 발견 사항 중 하나인데, 방어 측이 수치를 해석하는 방식을 근본적으로 바꾸기 때문입니다. 이 보고서의 다른 연구 결과들은 난독화가 AI 성능을 어떻게 저하시키는지 설명하고 있습니다. 하지만 이 발견은 전혀 다른 질문을 제기합니다.

애초에 난독화되지 않은 코드에 대해 AI 난독화 해제 도구는 얼마나 잘 작동할까요?

연구진이 이를 테스트한 이유는 실제 공격이 작동하는 방식에 기인합니다. 애플리케이션을 표적으로 삼는 공격자는 어떤 함수가 난독화되었고 어떤 함수가 그렇지 않은지 사전에 알 수 없습니다. 어떤 자동화된 공격 파이프라인에서든, 공격자는 깨끗한 코드와 난독화된 코드를 포함해 모든 코드에 대해 난독화 해제 도구를 단순히 실행할 것입니다. 이 연구는 모델들에게 보호되지 않은 코드의 난독화를 해제하도록 요청한 “None” 기준 조건을 통해 이러한 시나리오를 재현합니다.

결과에 따르면, 연구에 포함된 어떤 모델도 입력 유형에 관계없이 난독화되지 않은 깨끗한 코드에 대해 86% 이상의 성공률을 달성하지 못했습니다. GPT-4o는 난독화되지 않은 x86 어셈블리 코드에서 48%의 성공률을 기록했는데, 이는 난독화할 요소가 전혀 없었음에도 처리한 난독화되지 않은 함수의 절반 이상이 손상된 상태로 출력되었음을 의미합니다. Claude Opus 4.5는 전체 연구에서 가장 우수한 성능을 보인 모델이었습니다. 하지만 이 모델은 난독화되지 않은 ARM 의사 코드의 16%, 난독화되지 않은 ARM 어셈블리 코드의 28%에서 실패했다. 10개 모델 모두를 평균했을 때, 난독화 기법이 단 하나도 적용되기 전인 난독화되지 않은 ARM 어셈블리 코드에 대한 성공률은 63.7%에 불과했다.

이는 방어 측에 있어 매우 중요한 의미를 지닙니다. 난독화는 공격자의 초기 성공률 100%에서 그 수치를 낮추는 것이 아닙니다. 오히려 이미 100%보다 훨씬 낮은 수준에서 시작하여 그 수치를 더욱 낮추는 것입니다. 이 두 가지 효과가 복합적으로 작용합니다. 3회 반복 ARM 어셈블리의 경우, 모든 모델의 평균 성공률은 8.5%입니다. 그러나 난독화가 전혀 적용되지 않은 깨끗한 ARM 어셈블리의 경우, 평균 성공률은 이미 63.7%에 불과합니다. 난독화는 유능한 공격자를 무능한 공격자로 바꾸지는 않습니다. 이미 3분의 1 이상의 확률로 실패하고 있던 공격자의 상황을 극적으로 악화시킬 뿐입니다.

The defenders double advantage

대규모로 공격을 수행하는 공격자에게는 실질적인 운영 비용도 발생합니다. 수백 또는 수천 개의 함수를 포함하는 실제 애플리케이션을 처리하는 자동화된 파이프라인에서는, 공격자가 잘못 난독화 해제된 출력을 식별하고 제거한 후 조치를 취하기가 쉽지 않습니다. 손상된 각 함수는 실행되어 논리적 결함을 일으키거나(이는 전체 리버스 엔지니어링 노력을 무산시킬 가능성이 있음), 수동 검증에 소요되는 시간 낭비 중 하나가 됩니다. 대규모 코드베이스에서는 이러한 비용이 급속히 누적됩니다.

난독화 계층은 단순히 가산적으로 작용하는 것이 아니라 곱셈적으로 작용합니다.

가장 중요한 기술적 발견 중 하나는 난독화 기법들이 어떻게 상호작용하는지와 관련이 있습니다. 제어 흐름 평탄화(Control Flow Flattening)와 가짜 제어 흐름(Bogus Control Flow)을 함께 적용할 때, 그 결과로 발생하는 복잡성은 단순히 두 기법의 합이 아닙니다. 오히려 곱셈 효과가 나타납니다.

FLA는 프로그램의 실행 경로를 결정하는 중앙 디스패처를 생성합니다. 그런 다음 BCF는 이러한 경로 결정 지점마다 가짜 분기문을 삽입합니다. FLA가 생성하는 경로 결정 지점이 많을수록, BCF가 삽입할 수 있는 가짜 분기문의 수도 늘어납니다. x86 아키텍처에서 이러한 상호작용은 BCF를 단독으로 적용했을 때와 비교해 코드 복잡도를 4.18배 증폭시킵니다. ARM 아키텍처에서는 증폭 효과가 더욱 강해져 5.50배에 달합니다.

how obfuscation complexity escalates

보안 엔지니어들에게 중요한 점은, FLA와 BCF를 함께 사용하는 것이 단순히 두 가지 보호 수단을 중첩하는 것이 아니라는 사실입니다. 오히려 이는 두 기술 중 어느 하나를 단독으로 사용할 때보다 훨씬 더 강력한 저항력을 만들어내는 ‘힘의 증폭기’ 역할을 합니다. 여기에 세 번째 단계인 명령어 대체(Instruction Substitution)를 추가하더라도 구조적 복잡성은 더 이상 증가하지 않지만, 공격자를 좌절시킬 수 있는 상당한 수준의 산술 노이즈를 추가하게 됩니다.

디컴파일러의 품질에 따라 상황이 달라집니다

어셈블리 코드는 컴파일된 바이너리의 저수준 기계어 명령어입니다. 의사코드는 Ghidra와 같은 디컴파일러 도구가 생성하는, 더 높은 수준이며 사람이 읽기 쉬운 표현입니다. AI 모델에 원시 어셈블리 코드를 제공했을 때, 의사코드를 제공했을 때보다 성능이 현저히 떨어졌습니다.

이 연구에서 전반적으로 가장 우수한 성능을 보인 Claude Opus 4.5는 의사코드를 기반으로 작업했을 때 3단계 ARM 난독화에서 50%의 성공률을 기록했으나, 원시 ARM 어셈블리 코드를 기반으로 작업했을 때는 24%에 그쳤다. 성능이 낮은 모델들의 경우, 그 격차는 훨씬 더 컸다. GPT-4o는 의사 코드 기반 작업 시 10%의 성공률을 기록한 반면, 원시 어셈블리 코드 기반 작업 시에는 고작 2%에 그쳤습니다.

이는 위협 모델링에 있어 중요한 시사점을 제공합니다. 원시 바이너리 분석 도구를 사용하는 공격자는 고품질 디컴파일러에 접근할 수 있는 공격자보다 훨씬 더 어려운 과제에 직면하게 됩니다. 또한 이는 현재 충분히 탐구되지 않은 방어 수단을 시사하기도 합니다. 디컴파일러가 생성하는 의사코드를 오해의 소지가 있거나 손상된 형태로 만들어 디컴파일러의 출력 품질을 의도적으로 저하시키는 기법은, 구조적 난독화만으로는 달성할 수 없는 수준 이상으로 AI 기반 리버스 엔지니어링에 대한 저항력을 의미 있게 높일 수 있습니다.

모든 AI 모델이 동일하지 않다는 사실은 위협 모델에 영향을 미칩니다

테스트된 10개 모델은 성능 면에서 큰 차이를 보였습니다. 최상위 모델(Claude 4.5 Opus, DeepSeek Chat 및 Reasoner, Gemini 3 Pro)은 최대 난독화 조건에서도 상당한 성공률을 유지했습니다. 반면 다른 모델들은 동일한 조건에서 현저히 낮은 성능을 보였습니다. Claude 4.5 Haiku와 GPT-4o는 3회 통과 ARM 어셈블리에서 1~2%에 불과한 성공률을 기록했습니다. 이는 일반적인 성능 수준과 무관하게, 기능적인 코드를 재구성하는 데 거의 완전히 실패했음을 의미합니다.

이러한 성능 격차는 위험을 평가할 때 중요한 의미를 갖습니다. 소규모 모델을 사용하는 자동화되고 비용이 최적화된 공격 파이프라인은, 가장 성능이 뛰어난 최첨단 모델에 접근할 수 있는 정교한 공격자가 수행하는 표적 공격보다 위협 수준이 훨씬 낮습니다. 고가치 지적재산권을 보유하거나 국가 차원의 위협에 직면한 조직은 이에 따라 방어 체계를 조정해야 합니다.

자세히 알아보기: 공격의 자동화 증가

 

권장 사항

다음은 이번 조사 결과를 바탕으로 보안 및 제품 팀을 위해 제시하는 권고 사항입니다.

Recommendations_for_security_and_product_teams

1) 단일 기법에 의존하기보다는 다층적인 난독화 기법을 적용하십시오

이번 연구에서 도출된 가장 중요한 실무적 결론은 제어 흐름 평탄화(Control Flow Flattening)와 가짜 제어 흐름(Bogus Control Flow)을 결합하면 두 기법을 단독으로 사용할 때보다 훨씬 강력한 보호 효과를 얻을 수 있다는 점입니다. 단일 난독화 유형만을 사용하는 OLLVM 배포 환경은 상당한 수준의 보호 효과를 놓치고 있는 셈이다. 민감한 로직이나 독점 알고리즘을 다루는 모든 애플리케이션의 경우, 3단계 난독화(SUB + FLA + BCF)를 기본 구성으로 적용해야 한다.

더 읽어보기: 앱 보호: 모바일 앱 보안을 위한 필수 계층

2) ARM 및 x86 대상 플랫폼을 다르게 처리하기

주요 배포 대상이 모바일(iOS, Android)인 경우, 현재의 AI 위협 상황은 훨씬 더 관리하기 쉽습니다. ARM 어셈블리는 현재 AI 모델이 난독화를 해제하기 훨씬 더 어렵고, ARM 기반 3패스 OLLVM은 현재 이용 가능한 최고의 모델을 상대로도 상당한 보호 효과를 제공합니다.

x86 배포 환경(예: Windows 애플리케이션, 서버 측 구성 요소 또는 데스크톱 소프트웨어)의 경우, 최첨단 AI 모델에 접근할 수 있는 정교한 공격자에 대항하기에는 OLLVM만으로는 불충분합니다. 이러한 대상에는 가상화 기반 난독화(CoVirt 또는 VxLang이 제공하는 것과 같은), 런타임 무결성 검사,변조 방지 조치 등 추가적인 보호 계층이 필요합니다.

3) AI 도구가 불완전하다는 점을 인식하고, 이를 악용할 수 있는 방어 체계를 설계하십시오.

기준 오류율에 대한 연구 결과는 공격자의 공격 파이프라인을 어떻게 바라볼지에 직접적인 시사점을 제공합니다. 대규모로 볼 때, AI 역난독화를 이용한 자동화된 공격은 성공 사례와 더불어 상당한 양의 손상되거나 잘못된 출력을 생성하게 됩니다. 구조적 복잡성 증가, 오인 유도 코드 패턴, 분석 방지 구조 등을 통해 정상 출력과 비정상 출력을 구별하기 어렵게 만드는 방어 기법들이 있습니다. 이러한 방어 기법들은 개별 난독화 해제 시도의 단순한 난이도뿐만 아니라 공격자의 운영 비용을 증대시킵니다.

더 읽어보기: 모바일 AI의 신흥 위협: 기업이 알아야 할 사항

4) 디컴파일 방지를 전략적 투자로 고려하십시오

현재 OLLVM 변환은 코드의 구조를 복잡하게 만들지만, 디컴파일러 출력의 품질을 구체적으로 타깃으로 하지는 않습니다. 의사코드 입력이 AI 모델의 성공률을 2~5배 향상시키는 만큼, 디컴파일러 출력을 저하시키는 조치(예: 손상된 타입 정보, 오해의 소지가 있는 함수 경계, 디컴파일러 방지 구조)는 현재 OLLVM의 범위를 벗어난 잠재적으로 높은 가치를 지닌 방어적 투자 수단이 될 수 있습니다.

5) 위협 모델에 모델의 성능을 반영하십시오

귀사의 위협 환경에는 경쟁사, 범죄 조직 또는 국가 기관과 같이 정교하고 자원이 풍부한 공격자가 포함될 수 있습니다. 만약 그렇다면, 이들이 이용 가능한 최고의 AI 도구에 접근할 수 있으며 이를 활용하는 방법을 알고 있다고 가정하십시오. 이러한 가정 하에서는 평균 수치가 아닌 최상위 모델 성능 수치가 관련 벤치마크가 됩니다. 정교하지 않은 자동화된 공격에 직면한 조직의 경우, 평균 성능 수치가 더 적절하며, 현재의 3패스 OLLVM은 강력한 보호 기능을 제공합니다.

더 읽어보기: 신흥 보안 위협으로부터 AI 기반 모바일 앱을 보호하는 방법

6) 기능 발전에 대비한 계획 수립

현재 x86이 ARM에 비해 갖는 AI 우위는 적어도 부분적으로는 훈련 데이터의 구성에 기인한 결과입니다. AI 모델이 더욱 다양한 데이터셋으로 훈련되고, 데이터 센터 및 임베디드 시스템에서 ARM 컴퓨팅의 비중이 높아짐에 따라 이러한 격차는 좁혀질 수 있습니다. 보안 전략은 오늘날 AI의 한계가 영구적이라는 가정 하에 수립되어서는 안 됩니다. 난독화 효과에 대한 장기적인 평가는 보안 평가 프로그램의 정기적인 구성 요소가 되어야 합니다.

더 읽어보기: 프레임워크에서 실행으로: 모바일 앱 내 AI 보안을 위한 새로운 로드맵

 

방법론

본 연구는 다음과 같은 방식으로 수행되었습니다.

기준

저희 팀은 이번 평가를 위해 특별히 설계된 200개의 고유한 C 프로그램으로 구성된 데이터셋인 ‘Promon 디오브퍼스케이션 벤치마크(PDB-LLM)’를 개발했습니다. 이 프로그램들은 두 가지 영역을 아우릅니다. 데이터 변환 작업(문자열 조작, 산술 연산, 유효성 검사)을 다루는 150개의 일반 프로그램과, 탈옥 탐지, 루트 권한 탐지,디버깅 방지, 후크 탐지 등 모바일 애플리케이션 보호에서 실제로 사용되는 방어 로직을 반영한 50개의 보안 중심 프로그램으로 구성되어 있습니다.

자세히 알아보기: 루팅 및 탈옥

모든 프로그램은 AI 모델이 논리를 분석하는 대신 이름으로 알고리즘을 식별하는 것을 방지하기 위해, “hash_djb2”와 같은 설명적인 이름 대신 일반적인 함수 명명 규칙을 사용하여 작성되었습니다. 프로그램의 코드 줄 수는 15줄에서 70줄 사이입니다. 이는 의미 있는 복잡성을 담기에 충분히 길면서도, LLM 처리 한도 내에 들어갈 수 있을 만큼 짧습니다.

테스트 환경 및 절차

바이너리 준비

200개의 프로그램 각각을 OLLVM을 사용하여 x86-64 및 ARM64 아키텍처용으로 컴파일하였으며, 다음의 다섯 가지 난독화 구성을 적용했습니다: SUB 단독; FLA 단독; BCF 단독; FLA+BCF 결합; 그리고 전체 3단계 처리인 SUB+FLA+BCF. 이를 통해 총 2,000개의 고유한 난독화 바이너리가 생성되었습니다.

복잡도 분석

IDA 9.2를 사용하여 각 바이너리에서 구조적 복잡도 지표(예: 기본 블록 수, 명령어 수, 사이클로매틱 복잡도)를 추출했습니다. 변환 효과를 정확하게 측정할 수 있도록 난독화 전에 기준 복잡도를 설정했습니다.

입력 준비

AI 모델을 위해 두 가지 유형의 입력을 준비했다. 두 아키텍처 모두에 대해 IDA 9.2를 사용하여 원시 어셈블리 코드를 추출했다. ARM64 바이너리의 경우 Ghidra 11.2.1을 사용하여 고수준 의사코드(디컴파일된 C 언어와 유사한 표현)를 생성했습니다. 이름 기반 패턴 매칭을 방지하기 위해 모든 입력에서 바이너리 식별자를 제거했습니다.

AI 평가

10개의 모델 각각은 사용된 난독화 기법에 대한 힌트나 원본 소스 코드에 대한 접근 권한 없이 동일한 제로샷 프롬프트를 받았습니다. 이를 통해 현실적인 공격자 환경을 시뮬레이션할 수 있었습니다. 또한 모델들은 완전히 난독화되지 않은 코드에 대해서도 테스트되어 ‘클린 코드’ 기준선을 확립했으며, 이는 자동화된 파이프라인을 사용하는 공격자가 어떤 함수가 보호 대상인지 사전에 알 수 없다는 현실을 반영한 것입니다. 모델들은 입력과 동일한 기능을 구현하는, 오류 없이 컴파일 가능한 C 코드를 생성하도록 지시받았습니다.

평가 대상 모델

Claude 4.5 Opus, Claude 4.5 Sonnet, Claude 4.5 Haiku (Anthropic); GPT-5, GPT-4o (OpenAI); Gemini 3 Pro, Gemini 3 Flash, Gemini 2.5 Pro (Google); DeepSeek Chat, DeepSeek Reasoner (DeepSeek).

검증

결과는 엄격한 2단계 검증 과정을 통해 검증되었습니다. 첫째, AI가 생성한 각 C 프로그램은 GCC를 사용하여 컴파일되었습니다. 컴파일에 실패한 출력은 모두 실패로 간주되었습니다. 둘째, 성공적으로 컴파일된 프로그램은 원래의 정답(ground-truth) 출력을 생성하는 데 사용된 것과 동일한 테스트 입력에 대해 실행되었습니다. 결과가 성공으로 간주되려면 모든 출력이 정확히 일치하고 종료 코드도 일치해야 했습니다.

품질 평가

합격/불합격 판정 외에도, 성공적으로 컴파일된 출력은 구조적 단순화 척도(0.0–1.0)에 따라 점수가 매겨졌으며, 이는 AI의 출력이 길이, 복잡도, 난독화 흔적 제거 측면에서 원본 코드와 얼마나 근접하게 일치하는지를 측정하는 기준이었습니다.

 

인용문

Collberg, C., Thomborson, C., 및 Low, D. (1997). 난독화 변환의 분류 체계. 오클랜드 대학교 기술 보고서 148.

Brezinski, K. 및 Ferens, K. (2023). 변형형 악성코드 및 난독화: 기법, 변종 및 생성 키트에 대한 고찰. Security and Communication Networks.

Raubitzek, S. 외 (2024). 은밀한 난독화: 난독화 계층화가 구조적 코드 패턴에 미치는 영향 규명. 정보 보안 및 응용 저널, 85, 103850.

Junod, P. 외 (2015). Obfuscator-LLVM: 대중을 위한 소프트웨어 보호. Proc. IEEE/ACM SPRO, pp. 3–9.

Blazquez, E. 및 Tapiador, J. (2025). 실제 환경에서의 실용적인 안드로이드 소프트웨어 보호. ACM Computing Surveys, 58(2).

Tkachenko, A. (2026). Promon 디오브퍼케이션 벤치마크. https://doi.org/10.5281/zenodo.18377774

Beste, D. 외 (2025). 코드 디오브퍼스케이션을 위한 대규모 언어 모델(LLM)의 잠재력 탐구. DIMVA, pp. 267–286.

Patsakis, C., Casino, F., 및 Lykousas, N. (2024). 실제 악성코드 캠페인의 악성 코드 난독화 해제에 있어 대규모 언어 모델(LLM) 평가. Expert Systems with Applications, 256, 124912.

Tkachenko, A., Suskevic, D., 및 Adolphi, B. (2025). 난독화 해체: 대규모 언어 모델의 어셈블리 코드 난독화 해제 능력을 평가하기 위한 4차원 프레임워크. arXiv:2505.19887.

앱과 지적 재산권을 AI 공격으로부터 보호하는 방법에 대해 상담을 받아보세요.
최신 난독화 기법이 공격자를 좌절시키고, 소프트웨어가 악성코드 검사기를 피하는 데 도움을 줄 수 있는 방법을 확인해 보세요. 이 기법들은 적대적인 환경에서도 효과적입니다.
상담 요청하기