HTTPS 검사를 위해 Android APK 파일을 자동으로 준비하는 CLI 애플리케이션
프록시를 사용하여 모바일 앱의 HTTPS 트래픽을 검사하는 것은 아마도 작동 방식을 파악하는 가장 쉬운 방법일 것입니다. 그러나 Android 7에 도입된 네트워크 보안 구성과 인증서 고정을 사용하여 MITM 공격을 방지하려는 앱 개발자로 인해 앱이 HTTPS 프록시와 작동하도록 하는 것이 상당히 지루해졌습니다.
apk-mitm
전체 프로세스를 자동화합니다. 여러분이 해야 할 일은 APK 파일을 제공하는 것뿐입니다. 그러면 apk-mitm
다음을 수행합니다.
또한 apk-mitm
사용하여 Android App Bundle을 사용하여 앱을 패치할 수 있으며 휴대전화를 루팅할 필요가 없습니다 .
인증서 고정과 같은 보안 기능을 해결하기 위해 앱의 일반적인 동작을 수정하려면 앱을 실행하기 전에 앱의 소스 코드를 수정하거나 앱이 실행되는 동안 함수 호출을 가로채기 위해 앱을 "후킹"해야 합니다.
apk-mitm
현재 Apktool을 사용하여 먼저 앱을 "분해"하고 여러 파일을 변경한 다음 다시 Apktool을 사용하여 다시 어셈블하여 앱 코드를 수정하는 전자 접근 방식을 취하고 있습니다.
이 접근 방식은 루팅된 장치가 필요하지 않다는 장점이 있지만 몇 가지 단점도 있습니다. 가장 큰 문제는 앱이 실제로 분해되도록 설계되지 않았다는 것입니다. Apktool은 어쨌든 이를 달성하려고 시도하지만 특히 크고 복잡한 앱의 경우 종종 문제에 직면합니다.
이 접근 방식의 또 다른 문제는 기본 바이너리 내에서 수행되는 검사(Flutter와 같은 프레임워크의 경우)와 같은 일부 인증서 고정 방법을 우회하기가 매우 어렵거나 불가능하다는 것입니다. 이러한 이유로 더 까다로운 앱에 대해서는 다른 접근 방식을 시도하는 것이 도움이 될 수 있습니다.
특히 mitmproxy의 android-unpinner
프로젝트와 HTTP Toolkit의 기본 frida-interception-and-unpinning
스크립트를 강조하고 싶습니다. 그들의 접근 방식은 Frida를 사용하여 런타임에 패치를 적용하는데, 이는 훨씬 더 강력하지만 루팅된 장치 없이는 사용할 수 없거나 사용하기가 더 어렵다는 의미이기도 합니다.
최신 버전의 Node.js(14+) 및 Java(8+)가 있는 경우 다음을 실행하여 apk-mitm
설치할 수 있습니다.
npm install -g apk-mitm
설치한 후에는 다음 명령을 실행하여 앱을 패치할 수 있습니다.
apk-mitm < path-to-apk >
example.apk
라는 APK 파일을 패치하는 방법은 다음과 같습니다.
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
이제 Android 기기에 example-patched.apk
파일을 설치하고 Charles 또는 mitmproxy와 같은 프록시를 사용하여 앱의 트래픽을 확인할 수 있습니다.
*.xapk
파일(예: APKPure에서) 또는 *.apks
파일(SAI를 사용하여 직접 내보낼 수 있음)을 제공하여 apk-mitm
과 함께 Android App Bundle을 사용하는 앱을 패치할 수도 있습니다. Linux에서 이 작업을 수행하는 경우 zip
과 unzip
모두 설치되어 있는지 확인하세요.
때로는 앱이 작동하도록 하기 위해 앱을 수동으로 변경해야 할 수도 있습니다. 이러한 경우에는 --wait
옵션이 필요합니다. 이를 활성화하면 앱을 다시 인코딩하기 전에 apk-mitm
대기하게 되어 임시 디렉터리의 파일을 변경할 수 있습니다.
APK에 대한 다양한 변경 사항을 실험하려는 경우 --wait
사용하면 사용할 때마다 처음부터 시작해야 하므로 아마도 가장 편리한 옵션은 아닐 것입니다. 이 경우 APKLab을 살펴보는 것이 좋습니다. 이는 apk-mitm
지원과 함께 제공되며 훨씬 더 빠르게 반복할 수 있게 해주는 VS Code를 기반으로 구축된 Android 리버스 엔지니어링 워크벤치입니다.
일부 장치(예: Android TV)에서는 시스템의 루트 인증서에 새 인증서를 추가하지 못할 수도 있습니다. 이러한 경우에도 프록시 인증서를 앱의 네트워크 보안 구성에 직접 추가할 수 있습니다. 이는 모든 기기에서 작동하기 때문입니다. 프록시에서 사용하는 인증서( .pem
또는 .der
파일)의 경로로 설정된 --certificate
플래그를 사용하여 apk-mitm
실행하면 이를 수행할 수 있습니다.
앱이 Google 지도를 사용하고 패치 후 지도가 손상된 경우 앱의 API 키가 개발자 인증서로 제한될 수 있습니다. 제한 없이 자체 API 키를 생성하고 --wait
옵션과 함께 apk-mitm
실행해야 앱의 AndroidManifest.xml
파일에서 com.google.android.geo.API_KEY
값을 바꿀 수 있습니다.
디코딩 또는 인코딩 중에 apk-mitm
충돌하는 경우 문제는 Apktool과 관련이 있을 수 있습니다. 가능한 해결 방법을 찾으려면 GitHub에서 문제를 확인하세요. 문제의 영향을 받지 않는 Apktool 버전을 발견한 경우 --apktool
옵션을 통해 해당 JAR 파일의 경로를 지정하여 apk-mitm
에 이를 사용하도록 지시할 수 있습니다.
MIT © 니클라스 히기(Niklas Higi)