본문 바로가기

Android

(3)
안드로이드 VPN Service를 이용해서 HTTPS(SSL) MITM 해보자 TL;DR : 매우 제한적이다. 앱에 따라 적용 가능 여부가 다르다. 로컬에서 작동하는 VPN Service를 통해 HTTPS Proxy로 포워딩하여 MITM! 대충 그려보자면 위 그림과 같은데 VPN으로 하려는 이유. 첫째 프록시 적용을 일부 앱에서 하고 싶다, 둘째 하지만 해당 앱이 별도의 프록시 설정을 지원하지 않아... 셋째 기존 안드로이드에서 제공하는 방식의 프록시 설정은 매우 불편하고 시스템-와이드로 적용 되기 때문에 프록시가 불필요한 대상을 포워딩하여 오버헤드가 발생한다는 점이다. 만들어보자... 우선 Vpn Service를 만들어주고, 해당 서비스에 연결되는 TUN 인터페이스를 만들고 HTTP CONNECT로 프록시 서버에 넘겨주면 된다. 말은 쉽다.. 하지만 언제나 그렇듯, 이미 다른 유..
안드로이드 MediaProjection 에 ImageReader로 버퍼 읽을시 검은 화면 우선 5.0(API 21) 이상에서는 대부분~ 잘된다. 하지만 특정 환경(대부분 예뮬레이터들)에서 MediaProjection을 ImageReader로 통해서 Surface를 읽다 보면 아무 데이터가 없거나 NULL일 수 있다. 이는 실기기 안드로이드든, 예뮬레이터 환경에서 (물론 5.0도 이상일 수 있다!) openGLES 호환(EGL_RECORDABLE_ANDROID 값이 없는 등.. )이 좋지 않아서 발생하는 문제이다. 그래서, 우리는 다른 방법으로 처리해야한다. 바로 구글의 비공식 테스트 앱 (grafika)를 살펴보고 구현하면 된다. 우선 grafika의 gles 을 모드 임포트 해준다. 그리고 VirtualDisplay가 사용할 수 있는 Surface를 만들어 준다. eglCore = EglC..
OpenCV UI 오브젝트 검출 개발 환경은 아래와 같다. OpenCV 4.2 (Built for Android with NONFREE) Android 10 내가 검출하고자 하는 데이터는 실제(Real Object)가 아니고 안드로이드의 Display에서 특정 UI 컴포넌트를 검출하는 작업이 필요했다. 먼저 시도한 방법은 OpenCV의 TemplateMatching. 하지만 여러 디바이스 환경에서의 UI 컴포넌트의 사이즈와 변형(반응형 디자인)으로 인해 TemplateMatching의 특성상 검출하려는 오브젝트의 크기가 검출 대상 소스에서의 크기는 같아야 하고 Multi-scaling의 방식이나 MatPyramid 등 다양한 scale-case 를 반영해도 변형된 데이터에서는 검출이 힘들었다. 그래서 시도해본 것은 SURF, SIFT ..