Reversing Native Libraries

HackTricks 지원하기

자세한 정보는 다음을 확인하세요: https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html

안드로이드 앱은 성능이 중요한 작업을 위해 일반적으로 C 또는 C++로 작성된 네이티브 라이브러리를 사용할 수 있습니다. 악성코드 제작자들도 이러한 라이브러리를 사용합니다. 왜냐하면 DEX 바이트코드보다 리버스 엔지니어링이 더 어렵기 때문입니다. 이 섹션은 어셈블리 언어를 가르치는 대신 안드로이드에 맞춘 리버스 엔지니어링 기술을 강조합니다. 호환성을 위해 ARM 및 x86 버전의 라이브러리가 제공됩니다.

주요 사항:

  • 안드로이드 앱의 네이티브 라이브러리:

  • 성능 집약적인 작업에 사용됩니다.

  • C 또는 C++로 작성되어 리버스 엔지니어링이 어렵습니다.

  • 리눅스 바이너리와 유사한 .so (공유 객체) 형식으로 발견됩니다.

  • 악성코드 제작자는 분석을 어렵게 만들기 위해 네이티브 코드를 선호합니다.

  • Java 네이티브 인터페이스 (JNI) 및 안드로이드 NDK:

  • JNI는 Java 메서드를 네이티브 코드로 구현할 수 있게 합니다.

  • NDK는 네이티브 코드를 작성하기 위한 안드로이드 전용 도구 세트입니다.

  • JNI와 NDK는 Java (또는 Kotlin) 코드를 네이티브 라이브러리와 연결합니다.

  • 라이브러리 로딩 및 실행:

  • 라이브러리는 System.loadLibrary 또는 System.load를 사용하여 메모리에 로드됩니다.

  • 라이브러리 로딩 시 JNI_OnLoad가 실행됩니다.

  • Java에서 선언된 네이티브 메서드는 네이티브 함수에 연결되어 실행을 가능하게 합니다.

  • Java 메서드를 네이티브 함수에 연결하기:

  • 동적 링크: 네이티브 라이브러리의 함수 이름이 특정 패턴과 일치하여 자동 링크가 가능합니다.

  • 정적 링크: RegisterNatives를 사용하여 링크하며, 함수 이름 및 구조에 유연성을 제공합니다.

  • 리버스 엔지니어링 도구 및 기술:

  • Ghidra 및 IDA Pro와 같은 도구가 네이티브 라이브러리 분석에 도움을 줍니다.

  • JNIEnv는 JNI 함수 및 상호작용을 이해하는 데 중요합니다.

  • 라이브러리 로딩, 메서드 링크 및 네이티브 함수 식별을 연습할 수 있는 연습문제가 제공됩니다.

자료:

HackTricks 지원하기

Last updated