본문으로 바로가기
728x90
반응형

목차

    개요

    크롤링이라는 단어를 별로 좋아하진 않습니다만. 크롤링이 이제 단순히 웹의 정보를 긁어오는 분야만은 아닌 듯합니다. 조금 더 거시적인 관점에서 크롤링은 “정보 수집 기술” 정도로 불러도 되지 않을까 싶네요.

    Modern 한 웹 사이트는 동적으로 페이지가 변경될 뿐만 아니라 어떤 사이트는 Network 탭을 통해 볼 수 있는 API 정보도 나타나지 않는 경우가 있습니다. 그래서 단순한 예제만을 가지고 크롤링을 하기에는 점점 난이도가 올라가고 있지 않나란 생각이 듭니다.

    이 글은 Android에서 발생하는 HTTP Request을 로컬 PC에서 관찰하는 방법을 소개하는 글입니다. 로컬 PC에서 Http Request을 관찰하는 방법이 있다는 건 그걸 코드 상으로 다룰 수 있다는 의미를 내포하기도 합니다(모든 경우가 그렇진 않지만..)


    Man in the Middle Proxy

    Man in the Middle은 MITM 이라고도 읽고(알파벳 그대로) 중간자 공격이라고도 불립니다.

    네트워크 통신을 조작하여 통신 내용을 도청하거나 조작하는 공격 기법인데 이 글은 MITM을 지원하는 도구를 이용해 안드로이드 앱과 PC 간 MITM을 걸어 안드로이드 앱에서 발생하는 HTTP 패킷을 PC에서 어떻게 관찰할 수 있는지를 설명합니다.

    즉. 이 기술을 이용해 통신을 조작하여 도청하거나 조작하는 등의 행위는 삼가시길 바랍니다.
    과정은 다음 단계로 진행됩니다.

    1. Man in the Middle Proxy Tool Installation
    2. Android App에서 Proxy 설정하기
    3. local pc와 android에서. cert 파일 설치하기



    Man in the Middle Proxy Tool Installation

    Man in the Middle Proxy를 이용하려면 필요한 도구가 있습니다. “mitmproxy”라고 불리는 것인데 mac에서는 다음과 같이 설치합니다.

    ╰─$ brew install mitmproxy
    Running `brew update --auto-update`...
    ==> Auto-updated Homebrew!
    Updated 2 taps (homebrew/core and homebrew/cask).
    ==> New Formulae
    bzip3                                                                                      kwctl                                                                                      openvino
    ==> New Casks
    forkgram-telegram                                                                          ideamaker                                                                                  superlist
    
    You have 19 outdated formulae and 1 outdated cask installed.
    You can upgrade them with brew upgrade
    or list them with brew outdated.
    
    Warning: mitmproxy 9.0.1 is already installed and up-to-date.
    To reinstall 9.0.1, run:
      brew reinstall mitmproxy
    

    이를 이용해 MitmProxy 서버를 띄우는 건 다음과 같은 명령어를 이용합니다.

    mitmweb --listen-port 9901
    

    mitmproxy 설치했으면 프락시 설정을 잡아줘야 합니다. mac에서는 “네트워크 환경설정 > Wi-Fi > 고급 > 프락시 > 보안 웹 프락시(HTTPS)” 를 통해 접근하여 아래 이미지처럼 설정합시다.

     

    Android App과 M1 Mac에서 Proxy 설정하기

    이후 Android 핸드폰에서 proxy 주소로 접근할 수 있게 세팅이 필요합니다.

    본인이 사용하는 핸드폰에서 위와 같이 Proxy 설정 단계까지 진입한 후 호스트 이름과 포트를 mitmproxy가 설치된 PC로 변경하면 됩니다.

     

    Man in the Middle Certification Registration

    위 단계까지 진행했으면 신경 써줘야 하는 부분이 있습니다. HTTPS에 관한 처리입니다. 많은 웹 사이트는 HTTP 보다는 HTTPS로 접근하게 됩니다. HTTPS를 이용하여 접근한 경우 보안에 관련된 요소가 적용되니 mitmproxy를 설치하고 난 후 다음과 같이 인증서를 PC에 등록해줘야 합니다.

    sudo security add-trusted-cert -d -p ssl -p basic -k /Library/Keychains/System.keychain ~/.mitmproxy/mitmproxy-ca-cert.pem

    mitmproxy-ca-cert.pem 파일은 mitmproxy를 설치하면서 자동으로 생성됩니다. 그러니 위 명령어를 실행시키면 되고 이는 mitmproxy 문서에도 나와있습니다.
    pc에 인증서를 설치했으면 본인이 사용하는 핸드폰에서 cert을 설치해야 되니 proxy가 연결이 완료된 상태에서 핸드폰 주소 창에 mtim.it을 입력해 환경에 맞는 인증서 파일을 다운로드해 실행해서 설치합시다.


    표현해 보자면…

    1,2,3 단계를 진행하면 위와 같은 형태의 구성이 나옵니다.

     

    아직 문제가 남았습니다..

    위 과정까지 진행했으면 이제 핸드폰과 PC를 usb로 연결하여 핸드폰으로 브라우저나 앱을 이용하게 되면 패킷이 발생하는 걸 확인할 수 있습니다.
    그런데 삽질 중에 다음과 같은 사실들이 존재했습니다.

    1. mitmproxy를 차단하는 android app들이 있네?
    2. 구글링을 해보니 SSL Pinning을 이용하면 된다고만..
    3. adb로 핸드폰에 몇 가지 설정이 필요하네… 어? 루팅이 필요네
    4. 내가 쓰는 핸드폰인데 루팅 하기 좀 걱정스러운데
    5. 그럼 Nox를 이용하자
    6. M1 Mac에서는 Nox가 안되네..
    7. 윈도에 있는 Nox 쓰지 뭐..
    8. 어 윈도에서 실행되는 Nox를 m1 mac에서 어떻게 연결하지?

    아직 이 포스팅 쓰는 시점으로 위 1~8단계 항목은 해결한 상황입니다. 글이 너무 길어지는 걸 싫어하니 이번 포스팅은 이쯤에서 마무리하고 다음 포스팅에 위 내용을 다룰 예정입니다.

    728x90
    반응형