난독화란

안상준·2025년 4월 28일

Obfuscation

목록 보기
1/2

1. 난독화(Obfuscation)란

난독화란 실행가능한 코드를 해킹으로 부터 보호하기 위해 사용 되는 기술 중에 하나로 제 3자가 코드를 이해할 수 없도록 어렵게 만드는 것이다.

난독화를 적용하는 범위에 따라 소스 코드 난독화, 바이너리 난독화로 나눌 수 있다.

2. 바이너리 난독화

소스코드가 컴파일되며 생성되는 바이너리 파일을 대상으로 난독화를 수행한다. 대다수의 악성코드들은 실행파일 단계에 난독화를 적용하고 있다. 도구로는 OLLVM, Themida, VMProtect가 있다.

3. 난독화 방법

  1. 레이아웃 난독화
    • 프로그램에 큰 영향을 끼치지 않는 세부적인 요소들을 변화시키거나 제거하여, 코드를 완전히 복원할 수 없도록 하는 방법이다. 구체적인 방법으로는 형식변화, 주석제거, 식별자 손상이 있다.
      • 형식변화 : 공백, 줄바꿈을 없애는 방법
      • 주석제거 : 코드의 힌트가 되는 주석을 제거하여 가독성 저하
      • 식별자 손상 : 변수나 식별자의 이름을 프로그램과 상관없는 단어로 바꿈
        ex) add(a, b) → func(_, __)
  2. 데이터 난독화
    • 자료형을 대상으로 변환하는 방법으로 데이터를 읽기 어렵게 비효율 적이고, 부자연스러운 형태로 변환하는 방법이다. 종류로는 저장장소와 인코딩 변환기법, 집합 변환기법, 순서 변환기법이 있다.
      • 저장장소와 인코딩 변환기법 : 프로그램에서 사용하는 변수나 객체에 해당하는 저장 장소의 형태를 변경시키는 방법
      • 집합 변환기법 : 변수나 객체의 상속관계, 배열 등을 통합하거나 분리하여 데이터의 그룹을 변경시키는 방법
      • 순서 변환기법 : 코드에서 데이터의 순서를 변경하는 방법
      • 계산 변환기법 : 동일한 연산이지만 복잡한 수식들을 추가하여 분석하기 어렵게 하는 방법
        ex) a + b = ((a * 3) / 3) + b)
      • MBA Expression(Mixed Boolean Arithmetic Expression) : 계산 변환기법으로 조건문 혹은 분기문을 이용하여 코드의 흐름을 복잡하게 하여 난독화하는 방법
        ex) if (x == 5 && (y > 10 || z == 3)) → if (!(x != 5 || (y <= 10 && z != 3)))
  3. 제어 흐름 난독화
    - 코드에서 함수들의 흐름을 이해하기 어렵게 만드는 방식으로 기능상의 변화를 주지 않고 흐름을 추가하는 방법이다. 의미없는 조건문, 반복문 등을 이용하여 난독화 처리를 한다.
    - Opaque predicates : 제어 흐름 난독화 방법으로 항상 참 또는 거짓 이거나, 참이나 거짓 어느 것을 선택해도 코드의 영향이 가지 않도록 하는 방법이다.
    ex) x^2 ≥ 0, (x* 2)%2 == 0
    업로드중..

4. 가상화 난독화

  • 가상화 난독화란 소스코드를 가상 머신에서 동작하며, 코드에 해당 머신에서 실행할 수 있는 바이트코드 형태로 변환하여 난독화하는 방법이다.
  • 가상머신상에 맞는 바이트 코드로 변환이 되어 공격자는 가상머신의 로직과 바이트코드를 해독해야 한다.
  • 가상화를 적용하는 경우 난독화 된 영역에 대한 실행 속도가 매우 느려지게 된다.

5. 난독화 품질 평가

  1. 복잡도
    • 코드가 난독화 전에 비해 얼마나 이해하기 어려줘 졌는지
      연산자의 증가량, CFG의 노드 개수, 지역변수의 증가,…
  2. 복원력
    • 역변환도구의 공격으로부터의 내구성을 측정
  3. 은닉성
    • 난독처리된 코드가 다른 코드들과 얼마나 잘 섞여 있는지
  4. 비용
    • 난독처리된 코드가 원래의 코드보다 필요한 실행시간 및 메모리를 나타낸

6. 난독화의 단점

  • 난독화를 위한 불필요한 코드들이 추가되며 메모리 낭비가 발생할 수 있다.
  • 원래 코드보다 복잡한 연산들이 추가되는 경우 프로그램 실행시 성능 저하의 문제가 발생할 수 있다.

출처 :

  • 난독화 바이너리 분석 방안, 2018년, 최석우
  • 역공학 공격에 대한 소프트웨어 보호 기법, 2010년, 장혜영(단국대 박사학위논문)
  • 소프트웨어 불법 복제를 방지하기 위한 C 코드 난독화 도구, 2020년, 강서연 et al
  • https://yonniii.github.io/page5/
  • https://yarncha.github.io

0개의 댓글