Objection Tutorial
Reading time: 7 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
소개
objection - 런타임 모바일 탐색
Objection는 Frida로 구동되는 런타임 모바일 탐색 툴킷입니다. 이는 탈옥이나 루팅된 모바일 장치 없이 모바일 애플리케이션과 그 보안 태세를 평가하는 데 도움을 주기 위해 만들어졌습니다.
참고: 이것은 어떤 형태의 탈옥/루트 우회가 아닙니다. objection
을 사용하더라도 사용자는 직면한 샌드박스에서 부과된 모든 제한에 의해 여전히 제한됩니다.
요약
objection의 목표는 사용자가 Frida가 제공하는 주요 작업을 호출할 수 있도록 하는 것입니다. 그렇지 않으면, 사용자는 테스트하려는 모든 애플리케이션에 대해 단일 스크립트를 생성해야 합니다.
튜토리얼
이 튜토리얼에서는 여기에서 다운로드할 수 있는 APK를 사용할 것입니다:
또는 원본 저장소에서 (app-release.apk 다운로드)
설치
pip3 install objection
Connection
정기 ADB 연결을 만들고 장치에서 frida 서버를 시작합니다 (그리고 클라이언트와 서버 모두에서 frida가 작동하는지 확인합니다).
루팅된 장치를 사용하는 경우, --gadget 옵션 내에서 테스트할 애플리케이션을 선택해야 합니다. 이 경우:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
기본 작업
이 튜토리얼에서는 유용하다고 생각되는 명령만 나열할 것이며, objections의 모든 가능한 명령은 나열되지 않습니다.
환경
비밀번호나 경로와 같은 흥미로운 정보는 환경 내에서 찾을 수 있습니다.
env
Frida 정보
frida
업로드/다운로드
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
frida 스크립트 가져오기
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
루트 탐지
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
Exec Command
android shell_exec whoami
스크린샷
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
정적 분석을 동적으로 만들기
실제 애플리케이션에서는 정적 분석 덕분에 objection을 사용하기 전에 이 부분에서 발견된 모든 정보를 알아야 합니다. 어쨌든, 이 방법을 통해 새로운 것을 볼 수 있을지도 모릅니다. 여기에서는 클래스, 메서드 및 내보낸 객체의 전체 목록만 볼 수 있습니다.
이것은 어떤 방법으로든 앱의 읽을 수 있는 소스 코드를 얻을 수 없는 경우에도 유용합니다.
활동, 수신기 및 서비스 목록
android hooking list activities
android hooking list services
android hooking list receivers
Frida를 찾을 수 없으면 오류가 발생합니다.
현재 활동 가져오기
android hooking get current_activity
클래스 검색
우리 애플리케이션 내에서 클래스를 찾아보겠습니다.
android hooking search classes asvid.github.io.fridaapp
클래스의 메서드 검색
이제 클래스 MainActivity: 내부의 메서드를 추출해 봅시다.
android hooking search methods asvid.github.io.fridaapp MainActivity
클래스의 선언된 메서드와 그 매개변수 목록
클래스의 메서드가 어떤 매개변수를 필요로 하는지 알아봅시다:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
클래스 목록
현재 애플리케이션에 로드된 모든 클래스를 나열할 수도 있습니다:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
이것은 클래스의 메서드를 후킹하고 클래스의 이름만 알고 싶을 때 매우 유용합니다. 이 함수를 사용하여 어떤 모듈이 클래스를 소유하는지 검색한 다음 메서드를 후킹할 수 있습니다.
후킹이 쉬움
메서드 후킹(감시)
애플리케이션의 소스 코드에서 함수 sum() 이 MainActivity 에서 매초 실행되고 있음을 알 수 있습니다. 함수를 호출할 때마다 모든 가능한 정보(인수, 반환 값 및 백트레이스)를 덤프해 보겠습니다:
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
전체 클래스 후킹(감시)
사실 MainActivity 클래스의 모든 메소드가 정말 흥미롭습니다. 모두 후킹해봅시다. 조심하세요, 이로 인해 애플리케이션이 중단될 수 있습니다.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
애플리케이션을 클래스가 후킹된 상태에서 사용하면 각 함수가 호출되는 시점, 인수 및 반환 값을 볼 수 있습니다.
함수의 불리언 반환 값 변경
소스 코드를 보면 함수 _checkPin_이 _String_을 인수로 받고 _boolean_을 반환하는 것을 알 수 있습니다. 함수를 항상 true를 반환하도록 만들어 보겠습니다:
이제 PIN 코드에 텍스트 박스에 아무것이나 입력하면 모든 것이 유효하다는 것을 알 수 있습니다:
클래스 인스턴스
특정 Java 클래스의 실시간 인스턴스를 검색하고 인쇄합니다. 이는 완전한 클래스 이름으로 지정됩니다. 발견된 objection에 대한 문자열 값을 얻으려는 시도의 결과로, 일반적으로 객체의 속성 값을 포함합니다.
android heap print_instances <class>
Keystore/Intents
키스토어와 인텐트를 사용하여 실험할 수 있습니다:
android keystore list
android intents launch_activity
android intent launch_service
메모리
덤프
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
목록
memory list modules
목록의 맨 아래에서 frida를 볼 수 있습니다:
frida가 무엇을 내보내고 있는지 확인해 봅시다:
검색/쓰기
objection을 사용하여 메모리 내에서 검색하고 쓸 수 있습니다:
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
SQLite
SQLite 데이터베이스와 상호작용하기 위해 sqlite
명령어를 사용할 수 있습니다.
Exit
exit
내가 Objection에서 놓치는 것
- 후킹 방법이 때때로 애플리케이션을 충돌시킵니다 (이것은 Frida 때문이기도 합니다).
- 클래스의 인스턴스를 사용하여 인스턴스의 함수를 호출할 수 없습니다. 그리고 클래스의 새 인스턴스를 생성하고 이를 사용하여 함수를 호출할 수 없습니다.
- 애플리케이션에서 사용되는 모든 일반적인 암호화 방법을 후킹하여 암호화된 텍스트, 평문, 키, IV 및 사용된 알고리즘을 볼 수 있는 단축키(sslpinning과 같은)가 없습니다.
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.