반응형

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
반응형

갑자기 분석하고 싶은 앱이 있어 앱을 분석하고 리패키징을 하였다.

 

근데 아래와 같은 에러가 났다.

 

.....
생략
.....

[0m java.lang.RuntimeException: Unable to start activity ComponentInfo{../..}: android.content.res.Resources$NotFoundException: Resource ID .... ]


.....
생략
.....

[0m java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "../base.apk"],nativeLibraryDirectories=[/data/app/com./.../lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find "something.so"

 

처음보는 에러였다.

 

그래서 열심히 구글링을 해본결과 앱스토어에서 xapk 형식으로 다운을받았는데

 

이걸 그대로 apktool을 이용해서 pull로 가져오니 위의 에러가 난것이다. 

 

xapk 형식이 아닌 apk로 가져오니 해당 에러가 해결되었다.

 

xapk 형식은 알고는 있었지만 이번 기회에 공부를 해봐야겟다.

반응형

+ Recent posts