Objection Tutorial
Bug bounty tip: sign up for Intigriti, a premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!
Introduction
objection - Runtime Mobile Exploration
Objection는 Frida로 구동되는 런타임 모바일 탐색 툴킷입니다. 이는 탈옥되거나 루팅된 모바일 장치 없이 모바일 애플리케이션과 그 보안 상태를 평가하는 데 도움을 주기 위해 만들어졌습니다.
Note: 이것은 어떤 형태의 탈옥 / 루트 우회가 아닙니다. objection
을 사용함으로써, 사용자는 직면한 샌드박스에 의해 부과된 모든 제한에 여전히 제한됩니다.
Resume
objection의 목표는 사용자가 Frida가 제공하는 주요 작업을 호출할 수 있도록 하는 것입니다. 그렇지 않으면, 사용자는 테스트하려는 모든 애플리케이션에 대해 단일 스크립트를 생성해야 합니다.
Tutorial
이 튜토리얼에서는 여기에서 다운로드할 수 있는 APK를 사용할 것입니다:
또는 원본 저장소에서 (app-release.apk 다운로드)
Installation
Connection
정상 ADB 연결을 만들고 장치에서 frida 서버를 시작합니다 (그리고 클라이언트와 서버 모두에서 frida가 작동하는지 확인합니다).
루팅된 장치를 사용하는 경우, --gadget 옵션 내에서 테스트할 애플리케이션을 선택해야 합니다. 이 경우:
Basic Actions
이 튜토리얼에서는 유용하다고 생각되는 명령어만 나열할 것이며, objections의 모든 가능한 명령어는 나열되지 않습니다.
Environment
환경 내에서 흥미로운 정보(예: 비밀번호 또는 경로)를 찾을 수 있습니다.
프리다 정보
업로드/다운로드
frida 스크립트 가져오기
SSLPinning
루트 탐지
Exec Command
스크린샷
정적 분석을 동적으로 만들기
실제 애플리케이션에서는 정적 분석 덕분에 objection을 사용하기 전에 이 부분에서 발견된 모든 정보를 알아야 합니다. 어쨌든, 이 방법을 통해 새로운 것을 볼 수 있을지도 모릅니다. 여기에서는 클래스, 메서드 및 내보낸 객체의 전체 목록만 볼 수 있습니다.
이것은 어떤 방법으로든 애플리케이션의 읽을 수 있는 소스 코드를 얻을 수 없는 경우에도 유용합니다.
활동, 수신기 및 서비스 목록
Frida를 찾을 수 없으면 오류가 발생합니다.
현재 활동 가져오기
클래스 검색
애플리케이션 내에서 클래스를 찾아보겠습니다.
클래스의 메서드 검색
이제 MainActivity: 클래스 내부의 메서드를 추출해 보겠습니다.
클래스의 선언된 메소드와 그 매개변수 목록
클래스의 메소드가 어떤 매개변수를 필요로 하는지 알아봅시다:
클래스 목록
현재 애플리케이션 내에서 로드된 모든 클래스를 나열할 수도 있습니다:
이것은 클래스의 메서드를 후킹하고 클래스의 이름만 알고 있을 때 매우 유용합니다. 이 함수를 사용하여 클래스를 소유한 모듈을 검색한 다음 메서드를 후킹할 수 있습니다.
후킹이 쉬움
메서드 후킹(감시)
애플리케이션의 소스 코드에서 MainActivity의 함수 sum() 이 매초 실행된다는 것을 알 수 있습니다. 함수가 호출될 때마다 모든 가능한 정보(인수, 반환 값 및 백트레이스)를 덤프해 보겠습니다:
전체 클래스 후킹(감시)
사실 MainActivity 클래스의 모든 메소드가 정말 흥미롭습니다. 모두 후킹해봅시다. 조심하세요, 이로 인해 애플리케이션이 충돌할 수 있습니다.
If you play with the application while the class is hooked you will see when 각 함수가 호출되는지, its 인수 and the 반환 value.
함수의 불리언 반환 값 변경
From the source code you can see that the function checkPin gets a String as argument and returns a boolean. Lets make the function 항상 true를 반환하게:
Now, If you write anything in the text box for the PIN code you will see tat anything is valid:
클래스 인스턴스
Search for and print 특정 Java 클래스의 실시간 인스턴스, specified by a fully qualified class name. Out is the result of an attempt at getting a string value for a discovered objection which would typically 객체의 속성 값을 포함할.
Keystore/Intents
키스토어와 인텐트를 사용하여 실험할 수 있습니다:
메모리
덤프
목록
목록의 맨 아래에서 frida를 볼 수 있습니다:
frida가 무엇을 내보내는지 확인해 봅시다:
검색/쓰기
objection을 사용하여 메모리 내에서 검색하고 쓸 수도 있습니다:
SQLite
sqlite
명령어를 사용하여 sqlite 데이터베이스와 상호작용할 수 있습니다.
Exit
Objection에서 내가 놓치는 것
후킹 메서드가 가끔 애플리케이션을 충돌시킵니다 (이는 Frida 때문이기도 합니다).
클래스의 인스턴스를 사용하여 인스턴스의 함수를 호출할 수 없습니다. 그리고 클래스의 새 인스턴스를 생성하고 이를 사용하여 함수를 호출할 수 없습니다.
애플리케이션에서 사용되는 일반적인 암호화 메서드를 후킹하여 암호화된 텍스트, 평문, 키, IV 및 사용된 알고리즘을 볼 수 있는 단축키(sslpinning과 같은)가 없습니다.
버그 바운티 팁: 해커를 위해 해커가 만든 프리미엄 버그 바운티 플랫폼인 Intigriti에 가입하세요! 오늘 https://go.intigriti.com/hacktricks에서 저희와 함께하고 최대 $100,000의 보상을 받기 시작하세요!
Last updated