NDK란???
Native Development Kit의 약자로 안드로이드에서 C/C++ 코드를 사용해야 할 때가 있다.
안드로이드에서 C나 C++를 사용하기 위해서는 JNI(Jave Native Interface)로 사용 및 개발할 수 있다.
즉, NDK는 안드로이드 환경에서 JNI를 사용하기 위해 구성된 키트라고 생각하면 된다.
요즘은 C언어를 사용하여 개발하는 일이 많지는 않지만
C언어로 만들어진 프로그램과 라이브러리는 여전히 서비스를 제공하는 데 있어서
중요한 위치를 차지하고 있다.
특히 안드로이드는 리눅스 기반이며 이는 대부분 C로 제작되어있다.
C로 제작되어 있기 때문에 C로 작성된 라이브러리를 사용하는 것이 당연한 말이다.
또한 가장 큰 장점은 안드로이드의 앱을 개발할 때 Java로 만든 애플리케이션에서
일정 부분을 C/C++로 미리 작성된 라이브리를 재 사용이 가능해 개발 시간이 단축되는 장점이 있다.
주로 안드로이드에서 가장 많이 사용되는 파일이 libc.so 파일이다.
여기서 .so 파일은 shared object 또는 shared library라고 불린다.
shared object 또는 shared library는 실행 파일과는 분리되어 있지만
Linker라는 것으로 인해 실행 시 실행파일과 함께 메모리에 적재되어
프로그램이 정상적으로 실행될 수 있게 해 준다.
즉, .so 파일을 쉽게 정의하자면
이미 특정한 기능이나 함수들이 미리 정의 및 구현되어 있는 파일을 의미한다.
쉽게 설명하자면 위의 간단한 C 코드를 보자.
그냥 printf 함수로 "Hello World"를 출력하는 C 코드이다.
저기서 printf 함수는 위의 코드에서 작성한 적도 없으며 보이지도 않는다.
이는 "stdio.h" 헤더 파일에 printf가 미리 정의가 되어 stdio.h 헤더를 선언해주고 그냥 사용한 것이다.
이는 안드로이드 앱에서도 마찬가지이다.
'모바일 해킹 > AoS' 카테고리의 다른 글
[UnCrackable AoS] Level 2 (0) | 2022.03.23 |
---|---|
[UnCrackable AoS] Level 1 (0) | 2022.03.23 |
[Android] Frida 설치 (0) | 2022.01.23 |
Byte Code & Binary Code (2) | 2021.11.09 |
Android Penetration Testing - Rooting (Galaxy S6) (5) | 2021.08.27 |