Frida/Android

[Android] Frida (프리다) - 설치 및 환경 설정

서쪽곰 2023. 6. 21. 23:26

목 차

     

    1. Frida (프리다)

    Frida는 오픈 소스 DBI(Dynamic Binary Instrumentation) 도구입니다. 모바일 및 데스크톱 플랫폼 모두에서 실행 중인 프로세스에 JavaScript 또는 기타 스크립팅 언어를 삽입하여 다양한 런타임 분석, 조작 및 리버스 엔지니어링 작업을 수행할 수 있습니다.

    Frida는 일반적으로 모바일 애플리케이션 보안 평가, 디버깅 및 애플리케이션의 내부 작동 탐색에 사용됩니다. 대상 프로세스와 상호 작용하고, 메모리에 액세스 및 수정하고, 함수 호출을 가로채고, 기타 다양한 런타임 조작을 수행할 수 있는 강력한 API를 제공합니다. 따라서 Frida는 보안 조치 우회, 네트워크 트래픽 분석, 애플리케이션 동작 수정 등과 같은 작업을 위한 다목적 도구입니다.

    Frida는 Android, iOS, Windows, macOS 및 Linux를 포함한 여러 플랫폼을 지원합니다. Python, JavaScript, Swift 및 C#을 포함한 다양한 프로그래밍 언어에 대한 바인딩을 제공합니다. 이렇게 하면 원하는 언어로 스크립트를 작성하여 대상 프로세스와 상호 작용할 수 있습니다.

    전반적으로 Frida는 소프트웨어 애플리케이션의 동적 분석 및 조작을 위한 유용한 도구로, 연구원, 개발자 및 보안 전문가에게 실행 중인 프로세스의 동작을 이해하고 수정할 수 있는 강력한 기능을 제공합니다.

     

    https://frida.re/

     

    Frida • A world-class dynamic instrumentation toolkit

    Observe and reprogram running programs on Windows, macOS, GNU/Linux, iOS, watchOS, tvOS, Android, FreeBSD, and QNX

    frida.re

     

    2. 다운로드 및 사전준비

    1) 안드로이드 루팅 (필수)

    Frida 기능을 모두 사용하기 위해서는 루팅이 필요합니다.

    2023.05.31 - [취약점 점검/모바일 취약점 점검] - [Android] 안드로이드 루팅 & 순정 펌웨어 복구

     

    [Android] 안드로이드 루팅 & 순정 펌웨어 복구

    1. 안드로이드 루팅하기 루팅은 Android 운영 체제에 대한 관리 액세스 권한을 얻는 프로세스로, 이를 통해 사용자는 제조업체에서 일반적으로 허용하는 것 이상으로 장치의 소프트웨어를 수정할

    seo-security.tistory.com

     

    2) Python3 설치 (필수)

    Frida 설치를 위해 파이썬 설치가 필요합니다.

    Anaconda 설치 시 파이썬이 포함되어 있어 Anaconda를 사용할 예정이면 불필요합니다.

    https://www.python.org/downloads/

     

    Download Python

    The official home of the Python Programming Language

    www.python.org

     

    3) 안드로이드 스튜디오 설치 (권고)

    안드로이드 스튜디오의 유틸리티를 편하게 사용하기 위해 설치를 권고합니다.

    https://developer.android.com/studio

     

    Download Android Studio & App Tools - Android Developers

    Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today.

    developer.android.com

     

    4) Anaconda 설치 (권고)

    가상환경을 위해 설치하는 것으로 여러 파이썬 버전이나 운영환경을 다르게 가져가기 위해 설치합니다.

    아나콘다 설치 시 파이썬 설치가 필요 없습니다.

    https://www.anaconda.com/download

     

    Free Download | Anaconda

    Anaconda's open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.

    www.anaconda.com

    2023.06.18 - [취약점 점검/점검 도구] - 아나콘다(Anaconda) 설치 및 사용법

     

    Anaconda(아나콘다) 설치 및 사용법

    1. Anaconda(아나콘다) Anaconda는 과학 컴퓨팅, 데이터 과학 및 기계 학습을 위한 Python 및 R 프로그래밍 언어의 오픈 소스 배포판입니다. 이러한 도메인에 대한 소프트웨어 환경을 설정하고 관리하는

    seo-security.tistory.com

     

    5) Nox 설치 (권고)

    모바일 디바이스 없이 간단하게 앱플레이어를 통해 사용이 가능합니다.

    https://kr.bignox.com/

     

    녹스 앱플레이어 - 윈도우 컴퓨터,맥북과 호환성이 뛰어난 가장 빠르고 안정적인 무료 안드로이

    녹스 앱 덕분에 핸드폰 발열도 줄고, 즐거운 자투리 시간 활용이 가능해요. 호환성도 좋고 부가기능들도 좋아서 몇 년째 사용하고 있네요.

    kr.bignox.com

     

    3. Frida 클라이언트 & 서버 설치

    1) Frida 클라이언트 설치

    conda activate py3
    pip install --upgrade pip
    pip install frida-tools
    frida --version

    conda activate py3로 py3 가상환경 접속합니다. (anaconda 미설치 시 생략)

    pip install frdia-tools로 frida 설치합니다. (frida-tools 설치 시 frida도 설치됨)

     

    현재 설치 버전: frida-16.0.19, frida-tools-12.1.2

     

    아래 툴은 cmd를 편리하게 사용하는 툴로 frida 사용 시 창을 여러 개 사용기에 사용 중입니다.

    https://conemu.github.io/en/Downloads.html

     

    ConEmu | Downloads

    ConEmu Download Mirrors

    conemu.github.io

    Frida 클라이언트 설치

     

    2) Frida 서버 설치

    (1) 녹스 설정

    설정 > 태블릿 정보 > 빌드 번호 연타 시 개발자 옵션이 활성화됩니다.

     

    개발자 옵션 활성화

     

    설정 > 개발자 옵션 > USB 디버깅 옵션을 활성화합니다.

    녹스가 아닌 일단 안드로이드 핸드폰에서는 USB 디버깅 옵션까지만 활성화하면 됩니다.

     

    USB 디버깅 활성화

     

    녹스 앱플레이어의 시스템 설정 > 일반 > 시작항목에서 ROOT 켜기를 선택합니다.

     

    ROOT 모드 활성화

     

    (2) 환경변수 설정

    adb 환경변수 설정

    안드로이드 스튜디오 설치 시 adb 기본 경로는 C:\Users\<username>\AppData\Local\Android\Sdk\platform-tools 이 기본 경로입니다.

     

    제어판 > 시스템 > 관련 설정 > 고급 시스템 설정 > 환경 변수를 선택합니다.

    환경 변수 > 시스템 변수 > path 라인 선택 > 편집 선택

    환경 변수 편집 > 새로 만들기 >  C:\Users\<username>\AppData\Local\Android\Sdk\platform-tools 추가

     

    환경변수 설정

     

    nox_adb 환경변수 설정

    녹스 사용 시 nox_adb를 사용하면 좀 더 간편합니다.

    adb로 사용이 가능하지만 adb로 사용하기 위해서는 adb를 연결하는 과정이 필요합니다.

     

    adb 녹스 연결

    위의 사진처럼 adb shell 입력 시 nox 앱플레이어를 찾지 못해 adb connect 127.0.0.1:62001을 입력해줘야 하는데 귀찮은 작업이므로 간단하게 사용하려면 nox_adb를 사용합니다.

     

    환경변수는 adb와 동일하며 대신 <녹스 설치 경로>/bin의 경로를 환경변수에 등록합니다.

     

     

    (3) Frida 서버 다운로드

    먼저 Frida 서버를 다운로드하기 위해 앱플레이어의 CPU 아키텍처를 확인합니다.

    $ nox_adb shell getprop | find "[ro.product.cpu.abi]"
    [ro.product.cpu.abi]: [x86_64]

    adb 명령어를 통해 확인 결과 저는 64bit를 사용 중입니다.

    그리고 아래 주소에서 클라이언트의 Frida 버전 (16.0.19)에 해당하는 서버를 다운로드합니다.

    frida-server-16.0.19-android-x86_64.xz

     

    https://github.com/frida/frida/releases

     

    Releases · frida/frida

    Clone this repo to build Frida. Contribute to frida/frida development by creating an account on GitHub.

    github.com

    frida-server 다운로드

     

     

    (4) Frida 서버 설치 및 실행

    다운로드한 파일의 압축을 풀고 adb push 명령어를 통해 안드로이드의 임시 저장 위치인 /data/local/tmp 디렉토리에 파일을 저장합니다.

    $ nox_adb push E:\frida-server-16.0.19-android-x86_64\frida-server-16.0.19-android-x86_64 /data/local/tmp
    [100%] /data/local/tmp/frida-server-16.0.19-android-x86_64

     

    adb shell을 통해 앱플레이어에 접속하고 /data/local/tmp 경로로 이동합니다.

    바로 실행하려고 하면 퍼미션 권한으로 실행이 안되기 때문에 권한을 변경합니다.

    chmod 777 frida-server-16.0.19-android-x86_64

     

    권한 변경 후 파일을 실행합니다.

    명령어 끝에  &는 백그라운드에서 실행하라는 명령어입니다.

    ./frida-server-16.0.19-android-x86_64 &

     

    아래는 해당 과정으로 adb_shell로 접속 후 tmp 디렉토리로 이동합니다.

    서버 실행 시 'permission denied' 오류를 확인하고 파일 퍼미션을 744로 변경합니다.

    그 후 백그라운드에서 서버를 실행시킵니다.

     

    Frida 서버 실행

     

     

    4. Frida 명령어 테스트

    모든 설치가 끝나고 서버까지 실행했으므로 Frida 명령어를 테스트해 보겠습니다.

    설치된 애플리케이션 리스트를 볼 수 있는 frida-ps 명령어를 통해 정상적으로 구동되는지 확인합니다.

     

    frida-ps -Uai

    frida-ps -Uia

     

    5. 안드로이드 ADB 명령어 정리

    1) Android Debug Bridge (ADB)

    ADB는 Android Debug Bridge의 약어로, 안드로이드 디바이스와 컴퓨터 간의 통신과 디버깅을 위한 도구입니다. ADB를 사용하면 안드로이드 디바이스와 컴퓨터 간에 명령어를 전송하고, 파일을 복사하고, 디바이스의 로그를 확인하는 등의 작업을 할 수 있습니다.

    ADB를 사용하려면 안드로이드 SDK(소프트웨어 개발 키트)를 설치해야 합니다. SDK를 설치하면 ADB 도구를 포함한 다양한 개발 도구를 사용할 수 있습니다. 일반적으로 개발자들은 ADB를 사용하여 안드로이드 앱을 디버깅하고, 테스트하며, 디바이스의 상태를 확인하는 데 사용합니다.

    ADB를 사용하면 명령 프롬프트나 터미널 창에서 다양한 ADB 명령어를 실행할 수 있습니다. 

     

    명령어 명령어 설명
    adb devices 연결된 Android 장치 또는 에뮬레이터를 나열합니다. 장치가 제대로 연결되고 ADB에서 인식하는지 확인하는 데 자주 사용됩니다.
    adb shell 연결된 Android 장치 또는 에뮬레이터에서 대화형 셸을 엽니다. 터미널을 사용하는 것과 유사하게 장치에서 직접 명령을 실행할 수 있습니다.
    adb install <path_to_apk> 연결된 장치 또는 에뮬레이터에 Android 애플리케이션(APK 파일)을 설치합니다. 설치하려는 APK 파일의 경로를 제공해야 합니다.
    adb uninstall <package_name> 연결된 장치 또는 에뮬레이터에서 설치된 Android 애플리케이션을 제거합니다. 제거할 애플리케이션의 패키지 이름을 지정해야 합니다.
    adb push <local_path> <device_path> 컴퓨터에서 연결된 Android 장치의 지정된 위치로 파일 또는 디렉토리를 복사합니다. 푸시하려는 파일/디렉토리의 로컬 경로와 장치의 대상 경로를 제공해야 합니다.
    adb pull <device_path> <local_path> 연결된 Android 장치에서 컴퓨터로 파일 또는 디렉토리를 복사합니다. 장치의 파일/디렉토리 경로와 컴퓨터의 대상 경로를 제공해야 합니다.
    adb logcat Android 장치 또는 에뮬레이터의 로그 메시지를 표시합니다. 애플리케이션의 런타임 동작 및 오류 메시지를 디버깅하고 모니터링하는 데 유용합니다.
    adb reboot 연결된 Android 장치 또는 에뮬레이터를 재부팅합니다.
    adb connect <device_ip_address>[:<port>] 네트워크를 통해 Android 기기 또는 에뮬레이터에 연결하는 데 사용됩니다.

     

    2) Package Manager (PM)

    Package Manager(pm)는 안드로이드 디바이스에서 패키지와 관련된 작업을 수행하는 ADB의 하위 도구입니다.

     

    adb shell 접속 후 pm 명령어를 입력하거나, adb shell pm 명령어를 통해 다양한 작업을 수행할 수 있습니다. 일반적으로 사용되는 명령어는 다음과 같습니다.

     

    명령어 명령어 설명
    pm install <path_to_apk> APK 파일을 설치할 수 있습니다.
    pm uninstall <package_name> 패키지를 제거할 수 있습니다.
    pm list packages [-f] 디바이스에 설치된 패키지의 목록을 확인할 수 있습니다.
    -f 옵션 사용 시 apk 파일의 경로를 출력합니다.
    pm dump <package_name> 특정 패키지의 자세한 정보를 확인할 수 있습니다.

     

    3) Activity Manager (AM)

    Activity Manager(AM)는 Android Device에서 작업(Activity)과 관련된 작업을 수행하는 ADB의 하위 도구입니다. 

     

    adb shell 접속 후 am 명령어를 입력하거나, adb shell am 사용을 통해 관리 작업을 할 수 있습니다.

     

    명령어 명령어 설명
    am start [options] <intent> intent에서 지정된 Activity를 시작합니다
    am startservice [options] <intent> intent에서 지정된 Service를 시작합니다.
    am force-stop <package> package와 연결된 모든 항목을 강제 종료합니다.
    am kill [options] <package> package와 연결된 모든 프로세스를 종료합니다. 이 명령어는 안전하게 종료할 수 있는 프로세스만을 종료하며, 사용자 환경에는 영향을 미치지 않습니다.
    am kill-all 모든 백그라운드 프로세스를 종료합니다.
    <intent> 설명 및 사용방법
    -a action 인텐트 작업을 지정합니다. 이것은 한 번만 선언할 수 있습니다.

    (예: android.intent.action.VIEW)
    -d data_uri 인텐트 데이터 URI를 지정합니다. 이것은 한 번만 선언할 수 있습니다.

    (예: content://contacts/people/1)
    -t mime_type 인텐트 MIME 유형을 지정합니다. 이것은 한 번만 선언할 수 있습니다.

    (예: image/png)
    -c category 인텐트 카테고리를 지정합니다.

    (예: android.intent.category.APP_CONTACTS)
    -n component 패키지 이름 접두사로 구성요소 이름을 지정하여 명시적 인텐트를 만듭니다.

    (예: com.example.app/.ExampleActivity)

    참고: https://developer.android.com/tools/adb?hl=ko#pm

     

     

    2023.06.21 - [취약점 점검/Frida] - [iOS] Frida (프리다) 설치 및 환경설정

     

    [iOS] Frida (프리다) 설치 및 환경설정

    1. Frida (프리다) Frida는 오픈 소스 DBI(Dynamic Binary Instrumentation) 도구입니다. 모바일 및 데스크톱 플랫폼 모두에서 실행 중인 프로세스에 JavaScript 또는 기타 스크립팅 언어를 삽입하여 다양한 런타

    seo-security.tistory.com

     

    반응형