난독화 (Obfuscation)

I. 소프트웨어 보안 위한 난독화의 필요성

필요성설명
불법 복제 방지– 역공학 이용 시리얼 키 및 암/복호화 비교 루틴 우회 방지위해 난독화 통한 복제 방지
해킹 방지– S/W 취약점 탐지, 취약점 이용 S/W 제공 기능 우회 및 악성코드 제작 사전 방지
소프트웨어 경량화– 자바 등 소스 코드의 용량 인한 응답 속도 저하 해결 위해 난독화 통한 S/W 경량화

 

II. 역공학 분석 방지 목적 난독화

가. 난독화(Obfuscation)의 개념

  • 역공학 이용한 S/W 행위 분석자에게 소스 레벨의 분석을 어렵게 만들기 위한 코드 변형 기법
  • T(P)가 프로그램 P에 대한 변환이라 가정 시 T(P)와 P의 동작이 동일 시 T는 난독화 변환

나. 난독화 개념도 및 핵심 절차

절차설명
분석 작업– 입력 소스 코드로부터 어휘와 구문 분석 수행
기법 선택– 분석 결과를 기반으로 특성에 맞는 기법 선택
코드 난독화 수행– 소스 코드 수정 없이 난독화 설정 값에 따라 해당 로직을 조합하여 난독화 수행

 

III. 난독화 위한 기술 분류와 비교 설명

가. 난독화 위한 기술 분류

난독화기술설명
LayoutFormatting Change– 배열 등에 담아 둔 String 등 이용, 포맷 변환으로 코드 분석 난해
Remove Comments– String형식 주석문 제거, Reversing 분석 어렵게 만드는 방법
Scramble Identifiers– 변수, 식별자 등 이름 변경, Rever-sing 분석 어렵게 만드는 방버
DataStorage– 변수를 자르거나 정적 변수를 함수 호출 형식으로 변경
Aggregation– 자료 순서 변환, 하나의 클래스를 분리하는 방법
ControlComputation– 여러 개의 Loop를 나누거나 합치는 방식
Ordering– Loop Count를 역순으로 사용
Aggregation– Procedure Inline or Outline 이용 제어 흐름 순서 해석 어렵게 함
PreventiveTargeted– 알려진 역난독화 방법에 대해 역난독화 프로그램끼리 충돌
Inherent– 역난독화 프로그램에 가짜 데이터 반환하는 방법
  • 사용자의 실행 속도를 함께 고려하며 보안과 사용성의 Trade-off 관계를 S/W 성격에 맞게 적용 필요

나. 난독화 기술 비교

구분LayoutDataControlPreventive
특징– 세부적 요소 변화, 제거
 – 복원 성공 시에도 프로그램 상당 부분 훼손
– 프로그램 처리 변수의 변환
– 데이터 저장 변수 합치거나 읽기 어렵게 변경
– 프로그램 문장 단위 조절
– 프로시저 등 변경으로 인한 불명확성을 증대
– 역난독화에 대한 대응
 – 역난독화 프로그램이 구체화된 경우 사용 가능
장점– 성능 저하 미존재– 자료의 보호– 로직의 보호– 능동적 역공학 방해
단점– 로직 보호 불가– 성능의 저하– 성능 저하– 성능 저하
사례변경 전:
Get Payroll()
변경 후:
a()
변경 전:
t=”Net”;
변경 후:
t[1]=’N’;
t[2]=’e’;
t[3]=’t’;
변경 전:
for(i=0;i<100;i++)
변경 후:
for(i=100;i>0;i++)
– Hardware breakpoint Detection
– Detecting breakpoint by CRC

 

IV. 주요 난독화 기법

주요 기법설명
Split Obfuscation– 가장 간단한 난독화 방법으로 코드를 다수 스트링 변수로 잘게 쪼갠 후 재조립
인코딩 함수– ASCII 문자로 변환 수행
HEX Code– 주요 코드를 hex, asci, base64 코드로 변환
Replace 함수– 코드/변수에 복잡한 쓰레기 문자 삽입하여 replace를 이용하여 사용하는 기법
생성자 난독화– 생성자를 통해 문자열 처리하여 문자 없이 코드 작성 방법
Dehydrating a stringTechnique– 아스키코드로 0x20과 0x09인 스페이스와 수평 탭을 이용하여 코드 보이지 않는 기법

 

One Comment

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^