실습 앱 다운로드
환경 설정
- 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로 우회 시도
- 스크립트 직접 짜보기
'Android > Tech' 카테고리의 다른 글
Android OKHTTP SSL Pinning 적용하기 (certificate pinning) (1) | 2020.05.01 |
---|---|
안드로이드 OLLVM 빌드 방법 (0) | 2019.12.17 |
안드로이드 안티디버깅 기술과 우회 기법 (1) | 2019.12.08 |
[안드로이드] ARM 후킹 기법 (1) | 2019.09.09 |
[안드로이드] 유니티 게임 메모리 덤프 방법 (0) | 2019.09.09 |