
모바일 애플리케이션을 런타임에 재작성하여 모든 HTTPS 트래픽을 직접 MitM하는 Frida 스크립트
HTTP Toolkit의 일부: HTTP(S)를 구축, 테스트 및 디버깅하기 위한 강력한 도구
이 저장소에는 모바일 기기에서 완전 자동화된 HTTPS MitM 가로채기에 필요한 모든 작업을 수행하도록 설계된 Frida 스크립트가 포함되어 있습니다.
이 스크립트 세트는 Android 및 iOS에서 HTTP(S) 트래픽의 MitM 가로채기를 위해 모두 함께 사용하여, 가로채기 처리, 인증서 신뢰 관리, 인증서 고정 및 투명성 검사 비활성화를 수행할 수 있습니다. 또는 특정 기능만 후킹하도록 개별적으로 사용하거나 수정할 수도 있습니다.
스크립트는 다음을 자동으로 처리할 수 있습니다:
-----BEGIN CERTIFICATE-----로 시작해야 합니다. 텍스트 편집기로 열어 이 내용을 확인하고 추출할 수 있습니다.config.js를 열고 다음 세부 정보를 추가하세요:
CERT_PEM: PEM 형식의 CA 인증서.PROXY_PORT: 프록시의 포트PROXY_HOST: 기기 관점에서 본 프록시 주소 (또는 adb reverse tcp:$PORT tcp:$PORT를 사용하여 ADB를 통해 포트를 전달하고 호스트로 127.0.0.1 사용)frida-server를 다운로드하고, 압축을 풀고, adb push로 기기에 넣은 후 다음 4개 명령으로 실행하세요: adb shell, su, chmod +x /.../frida-server, /.../frida-server.adb devices 사용) 확인하세요. Frida는 루팅된 기기에서 위 예의 su가 제공하는 것처럼 기기에서 root로만 실행됩니다. su 또는 유사한 명령 실행 후 root인지 확인하려면 셸에서 whoami를 실행했을 때 root가 출력되는지 확인하세요.tech.httptoolkit.pinning_demo입니다)config.js부터 시작)를 주입한 상태로 관심 있는 앱을 실행하세요. 사용할 스크립트는 자유지만, Android에서는 다음 명령이 좋은 출발점입니다:
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
-----BEGIN CERTIFICATE-----로 시작해야 합니다. 텍스트 편집기로 열어 이 내용을 확인하고 추출할 수 있습니다.config.js를 열고 다음 세부 정보를 추가하세요:
CERT_PEM: PEM 형식의 CA 인증서.PROXY_PORT: 프록시의 포트PROXY_HOST: 기기 관점에서 본 프록시 주소https://build.frida.re를 패키지 소스로 사용하여 설치할 수 있습니다.frida-ps -Uai를 실행하여 제대로 작동하는지 확인하세요.frida-ps -Uai를 통해 관심 있는 앱의 ID를 찾으세요 (빠른 테스트를 위해 github.com/httptoolkit/ios-ssl-pinning-demo를 사용해 보세요 - ID는 com.httptoolkit.ios-pinning-demo입니다)config.js부터 시작)를 주입한 상태로 관심 있는 앱을 실행하세요. 사용할 스크립트는 자유지만, iOS에서는 다음 명령이 좋은 출발점입니다:
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
위 명령은 관련 스크립트를 모두 사용하지만, 일반적으로 원하는 하위 집합을 사용할 수 있습니다. 다만 거의 모든 경우 첫 번째 스크립트로 config.js를 포함해야 합니다 (이 스크립트는 다른 스크립트에서 사용하는 일부 변수를 정의합니다).
예를 들어 Android에서 프록시 및 인증서 구성을 다른 곳에서 처리하고 난독화 폴백 없이 인증서 고정 해제만 수행하려면 다음을 실행할 수 있습니다:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
각 스크립트는 상단의 큰 주석 섹션에서 수행하는 작업과 작동 방식을 자세히 설명합니다. 스크립트는 다음과 같습니다:
config.js
이 스크립트는 다른 스크립트에서 사용하는 변수를 정의합니다: