[AOS] 2 Ways to Debug Android Apps with FRIDA & JADX

koo00·2022년 12월 27일
0

I. Intro

내가 안드로이드 앱을 동적 디버깅하는 두 가지 방법에 대해 포스팅하려 한다.
FridaJadx 를 활용해서 IDA 로 라이브러리에 attach 하는 과정을 간단하게 소개한다.
테스트에 사용한 툴 버전은 다음과 같다.

IDA Pro 7.7.220118 + android_server64
Frida 15.1.16
jadx-gui-1.4.5

그럼 빠르게 가보자~


II. FRIDA & IDA

먼저 Frida 를 활용한 방법은 매우 간단하다. 라이브러리가 로드될 때 Thread.sleep 을 주고 쓰레드가 멈춘 동안 해당 앱의 PID에 Attach 하면 된다.

Interceptor.attach(Module.findExportByName(null, 'android_dlopen_ext'), {
	onEnter: function(args) {
		this.path = args[0].readUtf8String();
		if(this.path.indexOf('libnative-lib.so') != -1) {
			Thread.sleep(10);
		}
	},
	onLeave: function(retval) {
		if(this.path.indexOf('libnative-lib.so') != -1) {
			// hook function
		}
	}
});


III. JADX & IDA

Jadx 로 라이브러리에 attach 하기 위해선 먼저 apk 파일을 열어야 한다.

디버깅할 프로세스 선택 > 앱 실행 > 실행된 앱 PID 더블 클릭 하여 attah 대기 상태로 만든다.

이 과정으로 진행할 경우 개발자 옵션 > 디버깅할 앱 선택 을 따로 하지 않아도 아래와 같은 상태가 된다.

여기서 그냥 실행을 누를 경우 APK 파일을 디버깅하게 된다.

라이브러리를 디버깅하기 위해 IDA 에서 해당 앱의 PID에 Attach 한 상태에서 IDAJadx 에서 서로 실행할 경우 APK 파일과 라이브러리를 왔다 갔다 하면서 디버깅할 수 있다.


IV. JADX & FRIDA & IDA

JadxFrida 를 모두 활용해서 디버깅하는 방법도 있다.

IDA 에서 해당 앱의 PID에 Attach 하기 전 Frida 로 먼저 Attach 할 경우 프리다 스크립트가 적용된 상태에서 디버깅을 진행할 수 있다.

Jadx attach > Frida attach > IDA attach > IDA debug start > Jadx debug start
이 과정에서 IDA atach / IDA debug start 를 생략할 수도 있어서 다양하게 응용하면 된다.


V. Conclusion

Frida 로 붙을 경우 간편하지만 디버깅하다 프리다 관련 쓰레드의 로직으로 step into 될 수 있어서 분석할 때 불편할 수 있고, 프리다 탐지 로직이 존재한다면 앱이 꺼질 수도 있다.

Jadx 로 붙을 경우 자바와 네이티브를 왔다 갔다 하면서 분석하기 때문에 좀 더 정확하게 분석할 수 있지만 자바에서 동적으로 호출되는 클래스가 있으면 로직을 파악하기 어렵고 자바와 네이티브 함수의 호출 순서가 꼬이면 앱이 꺼질 수도 있다.

각각의 장단점을 활용해서 분석 시 적절하게 활용하면 좋을 것 같다.

profile
JFDI !

0개의 댓글