네이티브 라이브러리 리버싱
Reading time: 3 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
자세한 정보는 다음을 확인하세요: 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를 추천합니다.
- JNI 및 NDK 문서:
- Oracle의 JNI 사양
- 안드로이드의 JNI 팁
- NDK 시작하기
- 네이티브 라이브러리 디버깅:
- JEB 디컴파일러를 사용하여 안드로이드 네이티브 라이브러리 디버깅하기
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.