본문 바로가기
끄적끄적 etc

코드 난독화란 ? 난독화 시 오류 발생 가능성은 ?

by Dddu 2024. 5. 5.
SMALL

담당하고 있는 시스템에서 front는 vue.js + typescript로 구성되어 있다.

 얘는 또 코딩 후 빌드하여 난독화 된 소스로 운영 이행을 하고 있다.

개발 환경에서 정상 100번 확인하고 운영에 넘겼다가 문제가 발견되어 급히 롤백을 했는데 ㅎㅎ심장강화이벤트

 

원인 분석 중 코드는 암만 봐도 문제 없고, 빌드 과정을 의심 우선순위에 두고 있다. 과거엔  블록 주석이 아닌 한 줄 주석을 사용했을 경우 난독화하여 빌드하는 과정에서 오류가 발생하는 경우가 있었다고도 들었다.

 

사실 보안때문에 난독화를 해야한다니 걍 하고 있구나. 만 알고 있었지 난독화에 대해 자세히 알지 못하여 정리해보았다.

 

 


난독화를 사용하는 이유는 ?

소프트웨어 보안 및 저작권 보호와 관련하여 사용 ! 악성 코드 작성자들은 난독화를 사용하여 자신의 코드를 분석하고 탐지하는 것을 어렵게 만들어 보다 효과적으로 사용자의 시스템에 침입하거나 악성 기능을 실행하는 데 사용한다. 따라서, 난독화는 악성 코드 작성자들이 코드를 분석하거나 수정하는 것을 방해하여 보안적인 측면에서 중요한 역할을 한다.

 

하지만, 난독화는 코드의 가독성을 낮추고 유지 보수를 어렵게 만드는 등의 부작용을 가지기도 함.

 

 

* uglify 

 - 자바스크립트 코드 자체를 분석하기 어렵게 만드는 과정

 - 난독화를 했다고 보안처리 없이 중요 정보나 루틴을 자바스크립트에 넣는 것은 매우 위험

 - 변수명, 함수명 치환에서부터 자바스크립트의 일부 루틴을 문자열로 바꿔 변수에 담고 뒤섞는 단계 등 여러 단계 존재

 - 난독화의 단계를 높일 수록 루틴을 알아보기 어렵게 만들 수 있음

 - 변수, 함수명 등이 줄어 용량이 감소하지만 난독화 단계를 높일수록 코드를 해석하고 실행하는 속도가 느려질 수 있으므로, 프로젝트에 맞게 선택하여 적용하는 것이 좋음

 

 

 


난독화 (Code Obfuscation)

프로그램 코드를 읽기 어렵게 일부 또는 전체를 변경하는 것. 

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

 

 


코드 난독화 유형

 

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

코드 난독화 주요 기술

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

 

 

 

빌드 시 난독화 오류 케이스를 찾다 발견하여 첨부.

관련 내용 아시는 분은 댓글로 공유 부탁드립니다..........! ! ! !!!

빌드시 난독화 오류 : 네이버 블로그 (naver.com)

 

빌드시 난독화 오류

빌드할경우 Debug를 체크 해제 하면 난독화가 적용되어 빌드가 된다 이때 문제가 발생하는데 함수의 이름...

blog.naver.com

 

 

LIST