좋아요, 다시 오세요
설치 과정의 마지막 비디오입니다
얼마나 말하느냐에 따라 달라요 두 부분으로 나눠야 할지도 모르니까요
하지만 이 영상이 끝나면 첫 반려동물을 받게 됩니다
환자들을 생각해 보면 당신은 자격이 있어요
네 이 비디오에선 마지막으로 Android 디버그 브리지에 관해 얘기하겠습니다 이 과정에서
우리가 직면하는 가장 중요한 명령줄 인터페이스니까요
좋아요
어떻게 작동하는지 뭘 할 수 있는지 보죠
좋아요, 가죠
네 좋아요 여기 스마트폰과 노트북이 있고요 안드로이드 디버그 브리지는 세 가지 구성 요소로
구성돼 있어요
네 제 말은 안드로이드 패치 브리지가 어떻게 작동하는지 아는 건 상관없지만 도구를 사용한다면
적어도 기본적으론 무슨 일이 벌어지는지 알고 싶어요
네
네 그래서 지금부터 제 내면의 일을 아주 짧게 소개해 드리려고 해요
첫 번째 구성 요소는 ADB 서버예요 이건 Ubuntu VM에서 실행 중이죠 로컬 호스트
5037 SD4에 있어요
이건 이미 설치됐죠 Android 스튜디오 설치 과정과 SDK 설정
동안에요
서버가 실행되고 있지 않으면 트리거와 커맨드를 할 때 자동으로 시작됩니다
예를 들어 adb셸 커맨드요
좋아요
네
ADB 디먼이 있고요 장치에서 실행되는 서비스죠
다시 말하지만 우린 아무것도 설치할 필요가 없어요
제조업체와 운영체제가 하는 작업입니다
네 디먼은 디폴트로 여러분의 장치에서 실행되고 ADB 서비스는 장치 연결이나
에뮬레이터, 가상 컴퓨터에 연결을 처리합니다
다른 장치와의 하나의 연결일 수도 있고 여러 개의 연결일 수도 있어요
예를 들어 에뮬레이터를 활성화하거나 실행한 경우 가상 컴퓨터에서요 마지막 구성 요소는 adb
바이너리입니다
SDK 디렉터리 안에 있는 바이너리입니다
네 이제 ADB 바이너리에서 시작한다면 커맨드를 호출합니다 예를 들어 ADB Shell이요
이게 ADB 서버에 연결하고 커맨드를 ADB 서버에 전달합니다
프로토콜이요 맞아요 adb 프로토콜은 텍스트 기반 프로토콜이에요 그러니
나중에 이걸 할 거예요
네, 이걸 잠깐 살펴볼게요
보기 좋긴 하지만 값어치는 별로 못 받아요
네
좋아요
다시 이겁니다
ADB 클라이언트가 서버에 이 커맨드를 보냈습니다
ADB 서버는 장치로의 연결을 처리합니다 예를 들어 이 장치요
그래서 거기로 보내죠
이 명령어를 실행하면 서버에 회신하고 서버는 클라이언트에게 다시 보여줍니다 그리고 서버는
클라이언트에게 다시 보여줍니다
우리 경우엔 그 후에 ADB셸이 실행되고 있어요
이건 안드로이드 디버그 브리지고 부품과 내부 작업이에요
간단히 말해서 지금 우리가 알아야 할 건 이게 다예요
다시 말씀드리지만 뭔가를 설치하거나 셋업하는 걸 걱정할 필요가 없습니다
이미 설치됐어요
좋아요
네 다음 그런 장치들에 대한 연결에 대해 말씀드리고 싶습니다 왜냐하면 이건 가끔 좀 까다로울
수 있거든요
연결을 하는 가장 쉬운 방법은 장치를 이용해 USB로 꽂은 다음 ADB셸을 실행하는 겁니다
그 후에 프롬프트를 받으면 준비 완료입니다
완벽해요
에뮬레이터에 대해서도 작동합니다 에뮬레이트된 use V 인터페이스를 이용한다고 해두죠
문제가 되는 건 여러 개의 장치를 쓸 때예요
에뮬레이터가 있고 디바이스가 같은 시스템에 연결되어 있다면 예를 들어 ADB Shell
같은 명령을 실행할 경우 명령이나 ADB 서버는 우리가 목표로 하는 디바이스를 모릅니다
저도 어떤 장치를 겨냥할지 모르겠어요
ADB에 말해야 하는데 일련번호로 쉽게 할 수 있어요 ADB 장치를 실행하면
일련번호를 알 수 있죠
일련번호를 불러올 거예요 그럼 일련번호를 이용해 장치에 연결할 수 있죠
네 여러 개의 장치가 연결돼 있다면 ADB를 일련번호로 호출해야 합니다 그런 다음
실행하려는 명령을요 순서가 잘못됐다면 예를 들어 ADB 셸과 일련번호
여기에 오류가 있네요 순서를 신경 써야 해요
마지막으로, 가능한 연결 유형이 하나 있는데 TCP IP입니다
예를 들어 wifi를 통한 장치에서나 가상 컴퓨터를 사용하는 경우 에뮬레이터가 아니라요
Android x86 가상 컴퓨터를 사용한다면 TCP IP 연결을 사용해야 합니다
이것도 별로 어렵지 않아요
네 필요한 건 장치의 IP 주소예요 ADB Connect를 써서 IP 주소를
입력합니다
TCP IP 기반 ADB 연결을 만듭니다
네
그리고 이것들은 지금 당장 필요한 유스 케이스라고 주장하고 싶네요
지금으로서는 성공한 것 같아요
IP가 어떻게 작동하는지 장치에 어떻게 연결할지 알죠
하지만∙∙∙
앱
Android 패키지는 그 이상이 가능하고 정말 멋진 주제도 포함하고 싶어요
포트 포워딩이죠
이 주제도 지금 다뤄보죠
포트 포워딩은 아주 편리합니다 이 장치의 특정 포트에 엑세스하고 싶다면요
장치가 있고 그 장치에서 모바일 응용 프로그램이 실행되고 있다고 가정하죠
모바일 앱이 항구에서 열립니다
예를 들어, 이건 31,515예요
450
이쪽이에요
제가 숫자를 잘 못 세거든요
그래서
31,515
네, 이쪽이에요
네
이 포트에 연결하고 싶다면 불가능합니다 이 포트는 이 장치의 로컬 인터페이스에서만
사용 가능하거든요
네 Ubuntu VM에서 이 포트에 연결하려 하면 거부되고 있어요 이 포트는 사용이
불가능합니다
ADB 포워딩이 정말 유용한 게 바로 이겁니다
다음의 사용 사례를 갖고 있다고 해보죠
이 장치에 분석을 하는 응용 프로그램이 있죠
예를 들어 행에 그림을 그리는 거죠 그런 식으로요 모바일 앱과 브라우저 분석을 돕는 프레임워크는
두 구성 요소로 구성됩니다 장치에서 실행되는 앱과 Ubuntu VM에서 실행되는 클라이언트
인터페이스에서요
지금 당장
네 그런 정보를 교환할 수 없어요 그래서 브라우저는
이 응용 프로그램이나 특정 포트에 연결할 수
없죠 지금 ?
ADB 포워드 명령을 이용할 수도 있습니다
ADB를 입력하면 뭐가 나오죠?
TCP 1337 TCP 31,415
기존 ADB 연결을 이 장치에 사용해 이 포트에 접근 가능하게 합니다
명령은 다음과 같습니다
ubuntu VM을 활성화하고 포트를 합니다
네 로컬 호스트 포트 1 3 3 7 이 포트를 통해 보내는 모든 패키지는
장치의 포트 31,515로 전송됩니다 ?
네 이런 설정을 통해 외부 세계와 소통할 수 있게 됐어요 , 일반적으로는 열리지 않았지만요
네 Ubuntu VM에 로컬 프록시를 사용할 겁니다 이 포트와 통신하는 기능이죠
이런 식으로 갖기 때문에 장치 상 서비스 내에서 온전하게 할 수 있어요 일반적으로
노출되지 않는 거죠
정말 멋져요
이 과정 동안 이것도 요구했어요 역할에 관해 얘기할 때요 예를 들어 일반적으로
장치가 로컬 컴퓨터로 포트에 액세스하길 원할 때요
네 ADB의 사용 사례입니다 첫 번째 부분은 전체 시스템의 포트죠
프로토콜 TCP가 있고 1, 3, 3, 7이 있습니다
로컬 인터페이스에서 열릴 거예요
두 번째는 장치의 포트입니다 트래픽을 전달하는 곳이죠
이 경우에는 31,450개네요
네
이번엔 제대로 셌어요
좋아요
ADB를 거꾸로 할 수도 있어요
그리고 약간 혼란스러울 수 있습니다 이미 혼란스러운 게 아니라면요 하지만 예제를
살펴보면 나중에 더 명확해질 겁니다
후진도 해 보죠
역전된다는 건 반대로 진행된다는 뜻이죠
네, 이름에서 알 수 있듯이
이게 무슨 뜻이죠?
어떻게 하는 거죠?
이번엔 장치의 포트에 액세스하지 않겠습니다
이번엔 로컬 시스템 상의 Ubuntu VM 포트에 액세스하고 싶어요
포트 8080의 로컬 인터페이스에서 웹 서버를 실행한다고 해보죠
이 웹 서버는 외부 세계와 연결되지 않습니다 로컬 호스트에 묶여 있기
때문이죠
ADB 역 접속을 통해 스마트폰이 접속할 수 있게 됐습니다
네 솔직히 말해서 자주 사용하진 않을 거예요 제 경력
동안 서너 번 사용했어요
네 지난 8년간 Android 앱 해킹을 해왔으니 이미 이게 뭔가 싶으실
거예요 자주 할 필요는 없지만 그래도 이걸 좀 살펴보죠
이 포트를 스마트폰으로 사용할 수 있게 만들고 싶어요
네 다시 한 번 기존 ADB 연결을 이 장치에 사용해 이 포트를 이용합니다 ,
하지만 이번엔 역연결이에요
이걸 한번 보죠
네
ADB 역 TCP 80, TCP 88을 실행하면 다음과 같습니다
이번엔 반대 방향이에요 스마트폰 포트 80의 로컬 인터페이스에
접속하면 웹 서버가 여기 나타납니다
ADB 역방향으로 우리 로컬 시스템이나 스마트폰에 ubuntu VM에서 실행 중인 서비스를
활성화할 겁니다
이게 그겁니다
이걸 역으로 하면 네 사용할 수 있는 서비스가 됩니다
후자든 후자든 포워딩은 스마트폰으로 로컬 호스트에 서비스를 가능하게 하는
겁니다
네, 혼란스러운 적이 없다면 지금 혼란스러울지도 몰라요
하지만 이 사례를 예로 들면 그 반대라고 할 수 있죠 원리가 명확해질
겁니다
좋아요
네
그래서 제안하고 싶은 건 이 전체 주제에 대해 실용적인 관점에서 살펴보는 겁니다
이론은 괜찮지만 좀 지루하거든요
그러니 우리 관점에서 이걸 갖고 놀아보죠
준비 됐어요?
그럼 다시 바꿔요