본문 바로가기

Android/Tech

안드로이드 안티디버깅 앱 우회 실습 - IDA 동적 분석 방법

실습 앱 다운로드

anti_debug_ptrace1.apk
1.73MB

환경 설정

- IDA

- anti_debug_ptrace1.apk

- LD 에뮬레이터

- 린엔진 or Frida (둘을 비교해볼 것)

IDA 동적 디버깅

 

- 가장 먼저 IDA 폴더 -> dbgsrv 폴더로 들어간 뒤 android_x86_server 파일을 /data/local/tmp 폴더로 이동시켜 준다.

- 윈도우에서 구동하는 에뮬레이터이기 때문에 x86 아키텍처의 IDA 서버를 설치하는 것이다. 안드로이드 루팅 단말기에 넣을경우에는 ARM 아키텍처의 android_server 를 넣어주면 된다. 단말기가 64bit도 지원하며 앱이 ARM64(64bit) 라이브러리가 포함되어 있을 경우에는 android_server64 파일을 넣어주면 된다.

adb push "C:\Program Files\IDA\dbgsrv\android_x86_server" /data/local/tmp

- 명령어는 위와 같이 입력한다.

 

adb forward tcp:23946 tcp:23946

- IDA의 기본 서버 포트는 23946이다. (-p 옵션으로 설정도 가능하다.)

- adb를 통해 윈도우 IDA와 통신하기 위해서 위와 같이 포트 포워딩을 설정한다.

 

- adb shell로 에뮬레이터의 쉘을 실행시킨다.

- /data/local/tmp 폴더로 이동한다. 

- chmod 명령어를 통해 실행 권한을 변경시킨다.

adb shell
cd /data/local/tmp
chmod 755 android_x86_server

 

./android_x86_server &

- IDA 서버를 백그라운드로 실행시킨다.

 

- 다시 윈도우로 넘어가서 IDA를 실행시킨다.

- IDA -> Debugger -> Attach -> Remote Linux debugger 버튼을 클릭한다.

- 에뮬레이터이기 때문에 "Remote Linux debugger"로 연결시키는 것이며, 휴대용 단말기라면 "Remote ARMLinux/Android Debugger" 로 연결시키면 된다.

 

- OK를 클릭한다.

 

- ps 명령어를 통해 부모 프로세스의 pid를 확인하자

- 부모프로세스의 pid를 선택하고 OK를 누르면 어태치가 된다.

 

- ptrace 선점 안티디버깅이 적용되어 있다면 다음과 같이 어태치를 할 수 없다고 메시지박스가 출력된다. TracerPid값을 확인해보면 특정 프로레스가 어태치중인 상태일것이다.

 

안티디버깅 우회 실습

- 목표 : IDA로 부모프로세스를 어태치한다.

 

0. 린엔진 호출 지점 찾기

1. 코드 패치

2. 린엔진으로 ptrace 후킹

- nop 우회 시도

- suspend 우회 시도

 

3. Frida로 우회 시도

- 스크립트 직접 짜보기