Manual DeObfuscation
**수동 해독 기법
소프트웨어 보안 영역에서 암호화된 코드를 이해 가능한 형태로 만드는 프로세스인 해독은 중요합니다. 이 가이드는 정적 분석 기법과 암호화 패턴 인식에 초점을 맞춘 다양한 해독 전략을 다룹니다. 또한 실제 응용 및 더 고급 주제를 탐구하려는 사람들을 위한 추가 자료를 제공합니다.
정적 해독을 위한 전략
암호화된 코드를 다룰 때, 암호화의 성격에 따라 여러 전략을 사용할 수 있습니다:
DEX 바이트 코드 (Java): 효과적인 접근 방법 중 하나는 응용 프로그램의 해독 방법을 식별한 다음 이러한 방법을 Java 파일에 복제하는 것입니다. 이 파일은 대상 요소의 암호화를 되돌리기 위해 실행됩니다.
Java 및 Native Code: 다른 방법은 해독 알고리즘을 Python과 같은 스크립팅 언어로 변환하는 것입니다. 이 전략은 주요 목표가 알고리즘을 완전히 이해하는 것이 아니라 효과적으로 실행하는 것임을 강조합니다.
암호화 인식
암호화된 코드를 인식하는 것은 해독 프로세스의 첫 번째 단계입니다. 주요 지표는 다음과 같습니다:
Java 및 Android에서 문자열의 부재 또는 섞임은 문자열 암호화를 시사할 수 있습니다.
에셋 디렉토리에 바이너리 파일의 존재 또는
DexClassLoader
호출은 코드 해제 및 동적 로딩을 시사합니다.식별할 수 없는 JNI 함수와 함께 사용되는 네이티브 라이브러리의 사용은 네이티브 메서드의 암호화를 시사합니다.
해독에서의 동적 분석
제어된 환경에서 코드를 실행함으로써 동적 분석은 암호화된 코드의 실시간 동작을 관찰할 수 있게 합니다. 이 방법은 코드의 진정한 의도를 숨기기 위해 설계된 복잡한 암호화 패턴의 내부 작동을 효과적으로 발견하는 데 특히 효과적입니다.
동적 분석의 응용
런타임 복호화: 많은 암호화 기법은 런타임에서만 복호화되는 문자열이나 코드 세그먼트를 암호화합니다. 동적 분석을 통해 이러한 암호화된 요소를 복호화하는 순간에 포착하여 진정한 형태를 확인할 수 있습니다.
암호화 기법 식별: 응용 프로그램의 동작을 모니터링함으로써 동적 분석은 코드 가상화, 패커 또는 동적 코드 생성과 같은 특정 암호화 기법을 식별하는 데 도움이 될 수 있습니다.
숨겨진 기능 발견: 암호화된 코드에는 정적 분석만으로는 알아차리기 어려운 숨겨진 기능이 포함될 수 있습니다. 동적 분석을 통해 조건에 따라 실행되는 모든 코드 경로를 관찰하여 이러한 숨겨진 기능을 발견할 수 있습니다.
참고 자료 및 추가 독서
BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” [video]
이 발표에서는 Android 애플리케이션에서 사용되는 가장 복잡한 안티 분석 네이티브 라이브러리 중 하나를 역공학하는 과정을 다룹니다. 이는 주로 네이티브 코드에서의 암호화 기법을 다룹니다.
REcon 2019: “The Path to the Payload: Android Edition” [video]
이 발표에서는 Java 코드만을 사용한 일련의 암호화 기법을 다루며, Android 봇넷이 동작을 숨기기 위해 사용한 기법입니다.
Last updated