Objection Tutorial

Reading time: 7 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

소개

objection - 런타임 모바일 탐색

ObjectionFrida로 구동되는 런타임 모바일 탐색 툴킷입니다. 이는 탈옥이나 루팅된 모바일 장치 없이 모바일 애플리케이션과 그 보안 태세를 평가하는 데 도움을 주기 위해 만들어졌습니다.

참고: 이것은 어떤 형태의 탈옥/루트 우회가 아닙니다. objection을 사용하더라도 사용자는 직면한 샌드박스에서 부과된 모든 제한에 의해 여전히 제한됩니다.

요약

objection목표는 사용자가 Frida가 제공하는 주요 작업을 호출할 수 있도록 하는 것입니다. 그렇지 않으면, 사용자는 테스트하려는 모든 애플리케이션에 대해 단일 스크립트를 생성해야 합니다.

튜토리얼

이 튜토리얼에서는 여기에서 다운로드할 수 있는 APK를 사용할 것입니다:

또는 원본 저장소에서 (app-release.apk 다운로드)

설치

bash
pip3 install objection

Connection

정기 ADB 연결을 만들고 장치에서 frida 서버를 시작합니다 (그리고 클라이언트와 서버 모두에서 frida가 작동하는지 확인합니다).

루팅된 장치를 사용하는 경우, --gadget 옵션 내에서 테스트할 애플리케이션을 선택해야 합니다. 이 경우:

bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

기본 작업

이 튜토리얼에서는 유용하다고 생각되는 명령만 나열할 것이며, objections의 모든 가능한 명령은 나열되지 않습니다.

환경

비밀번호나 경로와 같은 흥미로운 정보는 환경 내에서 찾을 수 있습니다.

bash
env

Frida 정보

bash
frida

업로드/다운로드

bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]

frida 스크립트 가져오기

bash
import <local path frida-script>

SSLPinning

bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

루트 탐지

bash
android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Exec Command

bash
android shell_exec whoami

스크린샷

bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

정적 분석을 동적으로 만들기

실제 애플리케이션에서는 정적 분석 덕분에 objection을 사용하기 전에 이 부분에서 발견된 모든 정보를 알아야 합니다. 어쨌든, 이 방법을 통해 새로운 것을 볼 수 있을지도 모릅니다. 여기에서는 클래스, 메서드 및 내보낸 객체의 전체 목록만 볼 수 있습니다.

이것은 어떤 방법으로든 앱의 읽을 수 있는 소스 코드를 얻을 수 없는 경우에도 유용합니다.

활동, 수신기 및 서비스 목록

bash
android hooking list activities

bash
android hooking list services
android hooking list receivers

Frida를 찾을 수 없으면 오류가 발생합니다.

현재 활동 가져오기

bash
android hooking get current_activity

클래스 검색

우리 애플리케이션 내에서 클래스를 찾아보겠습니다.

bash
android hooking search classes asvid.github.io.fridaapp

클래스의 메서드 검색

이제 클래스 MainActivity: 내부의 메서드를 추출해 봅시다.

bash
android hooking search methods asvid.github.io.fridaapp MainActivity

클래스의 선언된 메서드와 그 매개변수 목록

클래스의 메서드가 어떤 매개변수를 필요로 하는지 알아봅시다:

bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity

클래스 목록

현재 애플리케이션에 로드된 모든 클래스를 나열할 수도 있습니다:

bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

이것은 클래스의 메서드를 후킹하고 클래스의 이름만 알고 싶을 때 매우 유용합니다. 이 함수를 사용하여 어떤 모듈이 클래스를 소유하는지 검색한 다음 메서드를 후킹할 수 있습니다.

후킹이 쉬움

메서드 후킹(감시)

애플리케이션의 소스 코드에서 함수 sum() MainActivity 에서 매초 실행되고 있음을 알 수 있습니다. 함수를 호출할 때마다 모든 가능한 정보(인수, 반환 값 및 백트레이스)를 덤프해 보겠습니다:

bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

전체 클래스 후킹(감시)

사실 MainActivity 클래스의 모든 메소드가 정말 흥미롭습니다. 모두 후킹해봅시다. 조심하세요, 이로 인해 애플리케이션이 중단될 수 있습니다.

bash
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

키스토어와 인텐트를 사용하여 실험할 수 있습니다:

bash
android keystore list
android intents launch_activity
android intent launch_service

메모리

덤프

bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

목록

bash
memory list modules

목록의 맨 아래에서 frida를 볼 수 있습니다:

frida가 무엇을 내보내고 있는지 확인해 봅시다:

검색/쓰기

objection을 사용하여 메모리 내에서 검색하고 쓸 수 있습니다:

bash
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

bash
exit

내가 Objection에서 놓치는 것

  • 후킹 방법이 때때로 애플리케이션을 충돌시킵니다 (이것은 Frida 때문이기도 합니다).
  • 클래스의 인스턴스를 사용하여 인스턴스의 함수를 호출할 수 없습니다. 그리고 클래스의 새 인스턴스를 생성하고 이를 사용하여 함수를 호출할 수 없습니다.
  • 애플리케이션에서 사용되는 모든 일반적인 암호화 방법을 후킹하여 암호화된 텍스트, 평문, 키, IV 및 사용된 알고리즘을 볼 수 있는 단축키(sslpinning과 같은)가 없습니다.

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기