
문제 현상
보통 모바일 취약점 진단 시에 플레이스토어에서 앱을 설치한 후에 그 앱의 apk를 추출하여
재설치하는 경우가 불가피하게 있다.
근데 문제는 소스 코드 변조를 하지않고 정말 아무것도 건드리지않고 순수 apk를 재설치했을 때 아래 사진처럼 앱이 종료되는 현상이다.
"xxx" 이(가) 중지됨
"xxx"(가) 계속 중단됨 등의 알림과 함께 앱이 그냥 시작과 동시에 꺼져버리고 동작하지 않는다...
뭐 때문에 이런 현상이 발생하나 아무리 구글링해도 해외 자료 또한 찾을 수가 없었고, 국내 자료에도 아무런 정보를 찾지 못했다.
처음 이와 같은 문제를 만났을 때는 그냥 안되는 앱인가 싶어 진단이 불가했지만, 또 다시 한번 더 이런 현상을 겪고는 이거 해결 못하면 앞으로도 계속 이 앱 중단 현상을 만나면 진단을 못할 것같다는 생각에 원인 파악에 나섬
이는 어떠한 보안 솔루션이나 앱의 위변조때문에 발생하는 현상은 아니고 몇몇 라이브러리를 이용하는 앱에서 재설치 시 라이브러리를 제대로 읽어오지 못해서 발생하는 것으로 파악하여 해결함.
Nox (x86) 해결 과정
일단 Nox가 가장 간단하니 먼저 쓴다.
플레이스토어에서 앱을 정상적으로 설치했을 때 그 앱의 패키지 파일을 보게되면
lib 디렉터리와 oat 디렉터리 split.apk 등등이 있는 것을 볼 수 있다.
여기서 중요한건 위에서 말했듯이 라이브러리 파일이 담긴 lib 디렉터리 이다.
해당 디렉터리에 들어가보면 앱 아키텍처가 x86인것을 알 수 있는데,
Nox에서는 앱을 설치하면 대부분이 x86 아키텍처로 설치가 된다.
그리고 그 x86 디렉터리 안에는 x86으로 컴파일된 라이브러리 파일 libnative-lib.so 파일이 존재한다.
하지만 apk를 추출하여 재설치 후 다시 디렉터리에 접근 해보면
패키지 디렉터리 내 파일구성이 좀 달라진 것을 볼 수 있다.
split.apk 들도 없고 lib 디렉터리에는 x86이나 arm64같은 아키텍처를 정의하는 디렉터리도 존재하지 않고
라이브러리 파일도 없다.
그래서 실제로 이 중단현상이 발생하는 앱의 로그를 살펴보게되면 그 에러 로그는
couldn't find "libnative-lib.so" 라며 어떤 경로에서 라이브러리파일을 찾았는지 로그가 찍힌다.
Nox의 해결방법은 플레이스토에서 정상적으로 설치가 되어 라이브러리 파일이 있는 패키지 디렉터리를 복사한 후
다시 apk를 재설치 해주고 그 디렉터리를 단말기 안에 옮긴다.
그리고 기존에 아무것도 없던 lib 디렉터리 삭제 후 라이브러리 파일이 담긴 디렉터리를 그대로 가져온다.
이렇게만 해서 앱이 정상적으로 라이브러리를 읽을 수 있도록 하면 재설치한 앱이 정상적으로 실행된다.
단말기 (Arm64) 해결 과정
정확한 이유는 모르겠지만 Nox는 정말 간단한 이유가 앱을 설치했을 때 라이브러리 파일이 존재해서지만
단말기는 좀 현상이 달랐다.
일단 정상적인 설치 방법으로 설치된 앱을 생성 시각으로 앱 패키지에 접근해서 패키지 디렉터리를 살펴보게 되면
Nox와 같이 lib , oat 디렉터리와 split.apk가 있는 것을 볼 수 있다.
하지만 lib 디렉터리 내 arm64 디렉터리에는 아무런 라이브러리 파일이 없다.
하지만 로그를 살펴보게되면 결국 라이브러리 파일을 찾을 수 없어서 에러가 나는 것을 확인할 수 있는데,
이 라이브러리 파일은 Nox에서 받아와서 그대로 넣게되면 아키텍처가 맞지않아 x86 : arm64 제대로 못읽어들인다.
안드로이드 아키텍처 정리
플랫폼 32비트 64비트 ARM armeabi-v7a arm64-v8a x86 x86 x86_64
그래서 ARM64 아키텍처로 컴파일된 libnative 라이브러리 파일을 구해야한다.
아래 사이트 참조
testdata/SimpleperfExampleWithNative/app/build/intermediates/cmake/profiling/obj/arm64-v8a/libnative-lib.so - platform/prebuilts
android.googlesource.com
특정 단말기는 앱 재설치 시 lib 디렉터리가 아예 없을 수도 있다.
그럴 때는 그냥 mkdir로 만들어주면 된다.
그리고 라이브러리파일을 넣어준 후 권한 부여
이 후에 곧 바로 앱을 1번~3번정도 실행 시도를 해주게되면 재설치한 앱이 정상적으로 실행된다.
해당 현상이 코틀린 버그라는 말도있고 솔루션 문제로 알고있는 모의해커들도 많다. 하지만
이번에 확인한건 앱 아키텍처 문제 또는 그 아키텍처로 컴파일된 라이브러리 파일의 문제로 보여진다.
녹스에서는 안드로이드 버전이 구버전이기 때문에 라이브러리가 보존되어있어 비트를 변경하고싶다면 64비트 Nox도 설치해두고 사용하면 좋을것 같다.
'모바일 > Android' 카테고리의 다른 글
[Android] 안드로이드 에뮬레이터(Nox/BlueStack/MeMu) Proxy 설정법 (3) | 2023.05.18 |
---|---|
[Android] 안드로이드 쉘에서 alias 영구적으로 설정하기 (0) | 2022.10.20 |
[Android] openssl을 통한 BurpSuite 및 Fiddler 인증서 설치 (6) | 2022.05.13 |
[Android] 안드로이드 Frida Hooking을 통한 루팅탐지우회 2(분석글) (6) | 2022.05.11 |