본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Software Obfuscation; 난독화
프로그램의 동작은 그대로 두면서 사람이나 도구가 분석하기 어렵게 코드를 변형하는 기술

역공학(Reverse Engineering), 무단 변조, 알고리즘 도용을 어렵게 만드는 것이 목적이다. 암호화와 달리 복호화 과정 없이 그대로 실행된다는 점이 다르다.

대상에 따른 분류

편집 원본 편집
  • 소스 코드 난독화 : 원시 코드를 변형한다. 스크립트 언어(JavaScript)나 배포되는 소스에 적용
  • 바이너리 난독화 : 컴파일된 실행 파일이나 중간 언어(바이트코드)를 변형한다. Java·.NET·안드로이드 APK
구분 기법 내용
배치 난독화(Layout) 식별자 변경, 주석·디버그 정보 제거, 포맷 제거 클래스·메서드·변수명을 a, b, c 같은 무의미한 이름으로 바꾼다. 가장 기본적이고 부작용이 적다
제어 흐름 난독화(Control) 불투명 술어(Opaque Predicate) 결과가 항상 같지만 정적 분석으로는 알 수 없는 조건문을 끼워 넣어 가짜 분기를 만든다
제어 흐름 평탄화(Flattening) 중첩된 분기·반복을 하나의 거대한 switch 문과 상태 변수로 바꿔 구조를 뭉갠다
코드 분할·병합 하나의 함수를 쪼개거나 여러 함수를 합친다
가짜 코드 삽입 실행되지 않는 더미 코드를 넣는다
데이터 난독화(Data) 문자열 암호화, 상수 분할, 배열 재구성, 변수 인코딩 하드코딩된 키·URL 이 그대로 보이지 않게 한다
예방적 난독화(Preventive) 역난독화 도구의 알려진 취약점을 노린 구조 사용 디컴파일러가 오동작하게 만든다
  • 효력(Potency) - 사람이 이해하기 얼마나 어려워졌나
  • 내성(Resilience) - 자동 역난독화 도구에 얼마나 버티나
  • 은밀성(Stealth) - 난독화된 부분이 눈에 띄지 않는가
  • 비용(Cost) - 실행 속도와 크기가 얼마나 늘었나
  • 분석을 늦출 뿐 막지는 못한다. 충분한 시간과 실행 추적(동적 분석)으로는 결국 풀린다
  • 성능 저하와 파일 크기 증가
  • 디버깅과 오류 추적이 어려워진다. 배포용 매핑 파일을 따로 보관해야 한다
  • 악성코드도 같은 기법을 쓴다. 백신의 탐지를 피하는 데 난독화와 패킹이 동원된다. 무의미한 코드를 끼워 넣고 실행 순서를 뒤섞어 분석가의 디스어셈블과 디버깅을 방해한다. 패킹은 코드를 바꾸지 않고 압축·암호화해 감추는 것이라 난독화와 구별한다 → 패커