효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

 

문제 현상

보통 모바일 취약점 진단 시에  플레이스토어에서 앱을 설치한 후에 그 앱의 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 라이브러리 파일을 구해야한다.

아래 사이트 참조

https://android.googlesource.com/platform/prebuilts/simpleperf/+/ndk-release-r17/testdata/SimpleperfExampleWithNative/app/build/intermediates/cmake/profiling/obj/arm64-v8a/libnative-lib.so 

 

 

testdata/SimpleperfExampleWithNative/app/build/intermediates/cmake/profiling/obj/arm64-v8a/libnative-lib.so - platform/prebuilts

 

android.googlesource.com

 

 

libnative-lib.so
2.42MB

 

특정 단말기는 앱 재설치 시 lib 디렉터리가 아예 없을 수도 있다.

그럴 때는 그냥 mkdir로 만들어주면 된다.

그리고 라이브러리파일을 넣어준 후 권한 부여

이 후에 곧 바로 앱을 1번~3번정도 실행 시도를 해주게되면 재설치한 앱이 정상적으로 실행된다.

 

해당 현상이 코틀린 버그라는 말도있고 솔루션 문제로 알고있는 모의해커들도 많다. 하지만

이번에 확인한건 앱 아키텍처 문제 또는 그 아키텍처로 컴파일된 라이브러리 파일의 문제로 보여진다.

녹스에서는 안드로이드 버전이 구버전이기 때문에 라이브러리가 보존되어있어 비트를 변경하고싶다면 64비트 Nox도 설치해두고 사용하면 좋을것 같다.

 

반응형
  • hyotwo7658@gmail.com

복사 완료 👍