mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
45 lines
3.3 KiB
Markdown
45 lines
3.3 KiB
Markdown
# 네이티브 라이브러리 리버싱
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
**자세한 정보는 다음을 확인하세요:** [**https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html)
|
|
|
|
안드로이드 앱은 성능이 중요한 작업을 위해 일반적으로 C 또는 C++로 작성된 네이티브 라이브러리를 사용할 수 있습니다. 악성코드 제작자들도 이러한 라이브러리를 사용하며, 이는 DEX 바이트코드보다 리버스 엔지니어링이 더 어렵습니다. 이 섹션은 어셈블리 언어를 가르치는 대신 안드로이드에 맞춘 리버스 엔지니어링 기술을 강조합니다. 호환성을 위해 ARM 및 x86 버전의 라이브러리가 제공됩니다.
|
|
|
|
### 주요 사항:
|
|
|
|
- **안드로이드 앱의 네이티브 라이브러리:**
|
|
- 성능 집약적인 작업에 사용됩니다.
|
|
- C 또는 C++로 작성되어 리버스 엔지니어링이 어렵습니다.
|
|
- 리눅스 바이너리와 유사한 `.so` (공유 객체) 형식으로 발견됩니다.
|
|
- 악성코드 제작자는 분석을 어렵게 만들기 위해 네이티브 코드를 선호합니다.
|
|
- **자바 네이티브 인터페이스 (JNI) 및 안드로이드 NDK:**
|
|
- JNI는 자바 메서드를 네이티브 코드로 구현할 수 있게 합니다.
|
|
- NDK는 네이티브 코드를 작성하기 위한 안드로이드 전용 도구 세트입니다.
|
|
- JNI와 NDK는 자바(또는 코틀린) 코드와 네이티브 라이브러리를 연결합니다.
|
|
- **라이브러리 로딩 및 실행:**
|
|
- 라이브러리는 `System.loadLibrary` 또는 `System.load`를 사용하여 메모리에 로드됩니다.
|
|
- 라이브러리 로딩 시 JNI_OnLoad가 실행됩니다.
|
|
- 자바에서 선언된 네이티브 메서드는 네이티브 함수에 연결되어 실행을 가능하게 합니다.
|
|
- **자바 메서드를 네이티브 함수에 연결하기:**
|
|
- **동적 링크:** 네이티브 라이브러리의 함수 이름이 특정 패턴과 일치하여 자동 링크를 허용합니다.
|
|
- **정적 링크:** `RegisterNatives`를 사용하여 링크하며, 함수 이름 및 구조에 유연성을 제공합니다.
|
|
- **리버스 엔지니어링 도구 및 기술:**
|
|
- Ghidra 및 IDA Pro와 같은 도구는 네이티브 라이브러리를 분석하는 데 도움을 줍니다.
|
|
- `JNIEnv`는 JNI 함수 및 상호작용을 이해하는 데 중요합니다.
|
|
- 라이브러리 로딩, 메서드 링크 및 네이티브 함수 식별을 연습할 수 있는 연습문제가 제공됩니다.
|
|
|
|
### 리소스:
|
|
|
|
- **ARM 어셈블리 학습:**
|
|
- 기본 아키텍처에 대한 깊은 이해를 위해 권장됩니다.
|
|
- Azeria Labs의 [ARM Assembly Basics](https://azeria-labs.com/writing-arm-assembly-part-1/)를 추천합니다.
|
|
- **JNI 및 NDK 문서:**
|
|
- [Oracle의 JNI 사양](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html)
|
|
- [안드로이드의 JNI 팁](https://developer.android.com/training/articles/perf-jni)
|
|
- [NDK 시작하기](https://developer.android.com/ndk/guides/)
|
|
- **네이티브 라이브러리 디버깅:**
|
|
- [JEB 디컴파일러를 사용하여 안드로이드 네이티브 라이브러리 디버깅하기](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|