https://www.appsealing.com/kr/코드-난독화/

난독화 종류

이름 변경 난독화

이 기술은 변수의 이름을 혼동하게 만들어 원래 사용 의도를 지능적으로 가려줍니다. 메소드와 변수는 서로 다른 표기법과 숫자를 사용하여 이름이 변경되므로 디컴파일러가 제어 흐름을 이해하기 어렵습니다. 이 난독화 기술은 Java, .NET, Android 플랫폼에서 개발된 애플리케이션 코드를 난독화하기 위해 주로 사용됩니다. 이는 레이아웃 난독화의 전반적인 범주에 속하며, 소스 코드를 직접 대상으로 하여 애플리케이션에 대한 방어 계층을 제공합니다.

이름 변경 난독화 메소드의 예

https://resources.appsealing.com/4-svc/wp-content/uploads/2020/08/26120614/example-of-a-rename-obfuscation-method.jpg.webp

출처: PreEmptive

데이터 난독화

이 기술은 해커가 프로그램의 실제 의도를 파악할 수 없도록 코드에 사용되는 데이터 구조를 대상으로 합니다. 여기에는 프로그램을 통해 데이터가 메모리에 저장되는 방식과 저장된 데이터가 최종 출력을 표시하기 위해 해석되는 방식을 변경하는 것이 포함될 수 있습니다. 이 기술에는 다양한 변형이 있습니다.

1. 집계 난독화

이 방법은 프로그램에 데이터가 저장되는 방식을 변경합니다. 예를 들어, 배열은 많은 하위 배열로 분할될 수 있으며 프로그램의 다른 위치에서 참조될 수 있습니다.

2. 저장 난독화

이 방법은 데이터가 메모리에 저장되는 방식을 변경합니다. 예를 들어, 개발자는 변수의 저장 위치를 로컬 저장소와 전역 저장소 사이에서 이리저리 바꿀 수 있어서 변수 동작의 실제 특성을 난독화할 수 있습니다.

3. 순서 난독화

이 방법은 프로그램/코드 스니펫의 동작을 변경하지 않고 데이터의 순서를 변경합니다. 개발자는 변수 참조의 모든 인스턴스에 대해 호출되는 별도의 모듈을 개발하는 방식으로 이러한 방법을 구현합니다.

4. 문자열 암호화

이 방법은 읽을 수 있는 문자열을 모두 암호화하여 읽을 수 없는 코드를 생성합니다. 따라서 프로그램이 실행될 때 런타임에 암호를 해독해야 합니다.

5. 제어/코드 흐름 난독화

제어가 코드베이스의 한 섹션에서 다른 섹션으로 전달되는 방법은 프로그램의 의도를 결정하는 데 중요한 역할을 합니다. 이 흐름을 혼란스럽게 하는 것은 일반적으로 해커를 혼동하게 만들 수 있는 방법 중 가장 효과가 좋은 방법입니다. 이 난독화 방법은 해커가 코드의 특정 흐름을 채택하는 방법과 이유를 해독하지 못하게 합니다.

이를 구현하는 가장 일반적인 방법 중 하나는 임의적이고 예상치 못한 구문을 사용하여, 절대로 실행되지 않는 불필요한 대소문자 전환 구문(데드 코드)을 추가하는 것입니다. 이러한 구문은 해커를 혼란스럽게 만드는 것을 목적으로 합니다. 프로그램 실행 구문의 순서에 대한 이러한 변경은 조건부 프로그램 성향을 가진 경우에 특히 유용합니다.