코드 난독화

From CS Wiki
Code Obfuscation

프로그램 코드를 읽기 어렵게 일부 또는 전체를 변경하는 것. 난독화의 대상에 따라 크게 '소스 코드 난독화'와 '바이너리 난독화'로 나뉜다. 소스 코드 난독화는 C/C++/자바 등의 프로그램의 소스 코드를 알아보기 힘든 형태로 바꾸는 기술이고, 바이너리 난독화는 컴파일 후에 생성된 바이너리를 역공학을 통해 분석하기 힘들게 변조하는 기술이다.

코드 난독화 유형[edit | edit source]

구분 설명
배치난독화
  • 실행파일에 포함된 문자열의 내용을 무작위 치환
자료난독화
  • 프로그램 내부 자료 구조 변환 또는 암호화
제어 난독화
  • 제어 흐름을 바꿈으로써 디컴파 난이도 향상
ㄴ계산 변환
  • goto분의 loop중간을 가르키게 함으로써 원래의 for문으로 쉽게 디커파일 불가
ㄴ집합 변환
  • inline/outline, 복제(cloning), 루프 해제(loop unrolling)
  • 루프 조건을 추가함으로써 루프 확장
ㄴ순서 변환
  • 분기 명령을 이용한 블록 순서 변환
  • 루프 순서 변환, 수식 순서 변환 등
디컴파일 방지
  • 역공학도구로 사용되는 디컴파일러나 디버거 또는 무력화
  • return instruction후 추가적인 instruction 삽입으로 특정 decompiler무력화

코드 난독화 주요 기술[edit | edit source]

기술 설명
심볼정보제거 배치 난독화 기법으로 주로 활용, 메소드와 변수이름을 바꾸어 의미 파악 최소화
코드암호화 코드를 암호키와 해독키에 의해 암호화, 해독키를 HW에 숨기는 방법
제어흐름변환 계산변환, 집합변환, 순서변환활용
순서섞기 명령어 순서를 바꿔 코드 난독화