5주차부터는
[프리다(Frida)를 이용한 안드로이드 앱 모의해킹]
강의를 수강한다.
5주차 활동으로는 섹션1부터 섹션4까지 수강하는 것을 목표로 하였다.
프리다(Frida) 이해
프리다(Frida) 란?
>> 소개
- Ole가 개발한 DBI 프레임 워크
- DBI란? Dynamic Binary Intrumentation의 약자
- Instrumentation 이란? 앱이 실행중인 상태에서 코드 명령어를 삽입해 프로세스를 추적, 분석, 디버깅 하는 도구
- 다양한 플랫폼에서 프로세스에 대한 인젝션이 가능해 큰 확장성을 가진다.
- 윈도우, 맥OS, GNX/Linux, iOS, Android 및 QNX에서 자바스크립트를 네이티브 앱에 삽입 가능
>> 주요기능
- AppMon과 Needle 등의 도구에서 프리다를 기반으로 사용
- 함수 후킹( 특정 함수에 연결하여 반환 값 변경, 함수 재작성 등)
- 애플리케이션 디버깅 가능
- 힙 메모리 내 객체 인스턴스 검색 및 사용
- 실시간 트래픽 스니핑 또는 암호 해동
- 탈옥 또는 루팅되지 않은 단말기에서도 사용 가능
>> 통신 방식
프리다 기능 살펴보기
Frida CLI
>> REPL 인터페이스로, 신속한 프로토타이핑과 손쉬운 디버깅을 목표로 한다.
옵션 | 설명 |
--version | 프리다 프로그램 버전 출력 |
-h, --help | 도움말 메시지 출력 |
-D ID, --device=ID | 주어진 ID로 장치에 연결 |
--U, --usb | USB 장치에 연결 |
-R, --remote | 원격 프리다 서버에 연결 |
-H HOST, --host=HOST | HOST의 원격 프리다 서버에 연결 |
-a, --applications | 에플리케이션 리스트만 출력 |
-i, --installed | 설치된 모든 애플리케이션 포함 출력 |
-I SCRIPT, --load=SCRIPT | SCRIPT를 로드 |
-f FILE, --file=FILE | spawn(스폰) FILE |
--no-pause | 시작할 때 자동으로 메인 쓰레드를 시작 |
frida-ps
>> 연결된 프로세스 목록을 출력하기 위한 도구
- frida-ps -U : 연결된 디바이스에서 실행중인 모든 프로세스 목록 출력
- frida-ps -Ua, frida-ps -Uai: USB로 연결된 디바이스에서 실행 중인 앱 목록
frida-ls-devices
>> 연결된 디바이스를 출력하는 도구
frida-trace
>> 크롬 프로세스에서 "open" APIs 함수 호출 추적
- frida-trace -i "검색하고 싶은 API" -U [앱 패키지 이름]
ex) frida-trace -i "open" -U com.android.chrome : Chrome 에서 발생하는 Function에 대해 기록하고 출력
frida-kill
>> 프로세스를 종료하는 명령 줄 도구
- frida-ps 명령어로 종료할 프로세스 확인
- frida-kill-U [process number]
프리다 기본 문법
>> 기본 뼈대 구조
* Java.perform(fn)
- 현재 스레드가 가상머신에 연결되어 있는지 확인하고 fn을 호출
* Jave.use(classname)
- 변수와 메소드에 엑세스 할 수 있는 클래스 객체를 변환
- 메소드 구현을 변경하려면 새로운 메소드로 덮어 써야 함
- 인스턴스를 반환하는 것이 아닌 클래스 객체를 반환함
- 앱에서 사용하는 클래스와 연동되는 myClass를 정의
- .implementation: 앱에서 정의된 메소드의 구현 내용을 재작성
* Java.choose(className, callbacks)
- 힙에서 인스턴스화 된 객체 찾기 가능
- callbacks: onMatch, onComplete
- onMatch: 실시간으로 인스턴스에 대해 호출
- onComplete: function()의 모든 인스턴스가 열거될 때 호출
* Java.enumeratelLoadedClasses(callbacks)
- 로드된 모든 클래스를 열거하고 모든 일치 항목을 출력
- onMatch: 일치하는 것을 찾으면 호출
- onComplete : 가능한 일치(match)를 모두 마치면 사용됨
*setlmmediate(fn)
- Process terminated 오류 해결하기
>> 메소드 구현을 재작성 할 때 '다형성' 유의!
다음 세 가지의 경우엔... -> overload() 제공
- 입력 받는 인수가 없는 메소드
- 두 개의 바이트 배열을 인수로 입력 받는 메소드
- 앱의 context와 boolean 형태의 인수로 입력받는 메소드
프리다 CLI 활용
>> 프로세스에 스크립트를 인젝션하기 위한 사전 작업
- 애플리케이션 프로세스 실행 후 자바 스크립트 삽입
- 애플리케이션 프로세스 시작되기 전 자바스크립트 삽입
- 애플리케이션 시작
- 프리다가 스크립트를 인젝션하려면 앱이 실행되어야 함
- frida -U com.android.chrome
- Spawn
- -f 옵션을 사용하여 프로세스를 Spawn 해야 함
- frida -U -f com.android.chrome
- Spawn 문제 해결
- 프로세스를 Spawn하면 일정 시간이 지나 메인 스레드가 시작되지 않고 죽는 경우 발생
- frida -U -f [Process name] 이후 %resume
- frida -U -f --no-pause [Process name]
>> 명령어 입력 쉘 획득
자바 스크립트 API를 사용하여 프리다에 명령어 사용 가능
- TAP: 사용 가능 명령어 확인
- 안드로이드: https://www.frida.re/docs/javascripts-api/#java
'4-2. 2024-1 심화 스터디 > 안드로이드 모의해킹' 카테고리의 다른 글
[7주차] 블레이드러너 - 안드로이드 모의해킹 (0) | 2024.06.01 |
---|---|
[6주차] 블레이드러너 - 안드로이드 모의해킹 (0) | 2024.05.16 |
[3주차] 블레이드러너- 안드로이드 모의해킹 (0) | 2024.04.04 |
[2주차] 블레이드러너 - 안드로이드 모의해킹 (1) | 2024.03.24 |
[1주차] 블레이드러너 - 안드로이드 모의해킹 (0) | 2024.03.22 |