본문 바로가기

보안/모바일

보안 솔루션 추출 방법 3가지 (feat. 개인적인 꿀팁)

 

루팅 우회를  하려면 보통 앱단 즉 자바단에서 루팅 탐지를 하는 경우도 있지만 

외부 솔루션을 이용하여 루팅 탐지하는 경우가 있다 

 

외부 보안 솔루션을 우회하기 위해서는 많은 방법들이 있겠지만 

보안 솔루션을 외부(컴퓨터)로 추출을 하여 분석을 하는 건 꼭 필요한 작업이다 

 

방법 1. 

해당 방법은 가장 기본적이고 매우 간편한 작업이다. 

apk 내에서 솔루션이 저장이 되어 있는 경우로 손 쉽게 추출 할 수 있다. 

 

대상 어플의 apk를 추출 후 압축 프로그램으로 연다. 

 

보통 lib 폴더 안에 arm64-v8a (진단폰에 맞는 폴더로) 안에  솔루션 so 파일을 찾을수 있었다. 

 

방법 2. 

여기서 부터는 adb를 이용하여 직접 접근을 해야 한다. 

 

안드로이드 특성상 앱 설치후 /data/app 폴더 안에는 난수 문자열로 배열된 폴더들로 이루어져서(안드로이드 10 이상부터) 이 중에 해당하는 앱을 찾아야하는데 adb shell 안에서 find 함수를 이용해서 찾는 방법도 있겠지만

개인적인 꿀팁으로는  frida로 open 함수를 이용하면 해당 앱을 금방 찾을 수 있다 

Interceptor.attach(Module.findExportByName(null, 'open'), {   
   onEnter: function(args) {
	   
	var library_path = Memory.readCString(args[0]); 
	console.log("[.] open: "+Memory.readCString(args[0])); 

	   }, 
	onLeave: function(retval){	}
  });

 

해당 코드를 실행하면 

여러줄의 결과들이 나오는 것을 확인 할 수 있다. 그 중에서 원하는 솔루션 대상을 찾으면 된다 

gotcha !

대상 앱의 해당되는 난수열 폴더 명과 솔루션 위치를 단번에 찾았다. 

 

adb shell로 접근하여 해당 폴더로 위치해 보니 솔루션을 찾을 수 있다 

 

해당 솔루션을 찾았다면 adb pull을 이용하여 쉽게 솔루션을 빼낼수 있다 

하지만 이때 가장 많이들 실수 하는것이 

솔루션을 찾았다는 감격과 흥분으로 인해서 adb shell 안에서 계속 adb pull을 하는 것이다. 

 

반드시 adb shell 에서 나와서 pull을 하도록 하자 

adb pull <솔루션 위치와 솔루션 이름> <파일 꺼낼 위치>

 

 

방법 3. 

open 함수를 이용하여 동적으로 위치를 했지만 해당 파일이 없는 경우이다 

 

해당 위치에 없는 경우가 있다

 

이런 경우에는 split apk 기술로 인하여 다른 apk 파일을 확인을 해야한다.

 

보통 APK라 하면 앱의 코드, 리소스, 라이브러리 등을 모두 포함한 패키지 이지만

Split apk는 앱의 구성 요소를 기능, 리소스, 디바이스 설정에 따라 분리하여 여러 apk로 나누는 것이다. 구글 플레이스토어는 디바이스 환경에 따라 해당 조건에 맞는 apk 조합으로 앱 다운로드 및 설치를 실시를 한다. Split apk를 사용함으로서 앱 크기 최적화, 배포 효율성, 호환성 유지 등의 장점을 이끌수 있다.

기본적으로 base.apk split apk 들로 구성되어 있다.

 

split apk들의 예시 

이름 설명
Base.apk 앱의 기본 기능
split_config.en.apk 영어 리소스 포함 기능
split_ config.xxhdpi.apk 화면 밀도(xxhdpi)에 맞는 그래픽 리소스 포함 기능
split_ config.arm64_v8a.apk ARM 64 bit CPU 아키텍쳐 지원 라이브러리 포함 기능

 

 

adb shell로 대상 앱  저장 위치로 위치한 후 ls -l 로 어떤 파일들이 저장되어 있는지 확인을 한다 

 

이떄 base.apk 와 진단 폰에 맞는 apk 파일을 adb pull 로 가져와서 

방법 1.  과 같은 방법으로 살펴 본다 

그렇다면 

 

 

반응형