상세 컨텐츠

본문 제목

0x01 - Frida Hooking: 거대한 전쟁의 시작

Hooking

by 알 수 없는 사용자 2020. 6. 20. 20:03

본문

 

안녕하세요. 춘식입니다.

1일 3깡이 대세인 만큼 츄랜드에 맞추기 위해 대표 이미지도 그에 걸맞게 준비했습니다.

화려한 조명이 감싸고 있는 카페에서 마스크 쓰고 있으니 답답해 죽겠네요. 퍽더코로나

 

오늘은 제 의식의 흐름대로 진행될 예정이오니 많은 사랑과 관심 또 관심 부탁드립니다.

중간에 이해를 돕기 위한 부연 설명이 많으니 핵심만 보셔도 좋겠습니다.

 

후킹이란? 

후킹이란 갈고리? 건다? 이 단어 자체만으로 이해하려 하지 마시고, 천천히 눈을 감고 어떤 이미지인지 떠올려보겠습니다. 이제 눈뜨세요. 알파벳으로 이루어진 프로그래밍 언어로 만들어진 코드들이 컴퓨터에게 더 친숙해지기 위해 0과 1로 변환되는 해석 작업을 거치고 메모리라는 곳으로 올라가게 되는데 이렇게 애플리케이션이 실행됩니다. 이때 실행된 프로그램은 프로세스라는 이름으로 불리게 됩니다.

 

이 과정은 너무나도 복잡하기 때문에 레지스터, CPU 같은 어려운 말이 난무하는 전문 포스팅을 보고 싶으시면 구글링 하시면 됩니다.

 

우리는 이 과정을 매일 접하고 자주 보게되는데 언제일까요? 자, 여러분들은 여느때와 다름없이 롤 "프로그램"을 실행합니다. 롤 클라이언트가 실행되고 게임 한판을 무사히 마쳤습니다. 결과는 미드 양보를 해주지 않아 정글로 간 유미 유저때문에 졌지만 게임 종료와 동시에 갑자기 클라이언트가 멈추게 됩니다! 젠장! 인디게임수듄

 

 

이 때 여러분은 자연스럽게 작업관리자를 실행해서 "프로세스"를 종료하게 되죠. 후킹 얘기하다 무슨 소리냐고요?

 

 

 

우리가 알고자 하는 후킹이란 이 프로세스에 프로그래밍 언어로 만들어진 갈고리로 주고 받는 데이터를 낚아채 데이터를 확인하고 변경할 수도 있고, 이렇게 변경된 데이터에 의해 동작이 바뀌도록 하는 기술입니다.

 

이걸 프리다로 한다니??

 

프리다란? 

프리다는 It’s Greasemonkey for native apps, or, put in more technical terms, it’s a dynamic code instrumentation toolkit. It lets you inject snippets of JavaScript or your own library into native apps on Windows, macOS, GNU/Linux, iOS, Android, and QNX. Frida also provides you with some simple tools built on top of the Frida API. These can be used as-is, tweaked to your needs, or serve as examples of how to use the API. 입니다.

 

저는 친절하기 때문에 쉽게 다시 설명드리자면

 

프리다는 파이썬으로 만들어진 프로그램이며, iOS나 Android 애플리케이션이 동작하는 동안 자바 스크립트를 삽입해서 후킹을 할 수 있도록 여러가지 기능을 지원합니다. 그러니까 한마디로 프리다는 후킹 기능을 할 수 있도록 여러가지 기능을 지원하는 파이썬 고오오오급 갈고리인 것 입니다!!!

 

 

이 프리다를 이용해서 우리는 어떤 함수에서 데이터를 낚아챌 지 그 데이터를 어떻게 바꿀지만 지정해주면 되는 것입니다. 이렇게 좋을 수가 있나. 이게 왜 좋은지는 써보면서 더 알 수 있는데 나중에도 모르시겠으면 직접 만들어서 쓰세요.

 

 

환경 구축 - Nox 플레이어 설치

우리는 다음 시간부터 Uncrackable 애플리케이션을 설치해서 프리다로 후킹을 해볼 것이기 때문에 이번 시간에는 애플리케이션을 실행할 수 있는 프로그램과 프리다를 설치해보도록 하겠습니다.

 

애플리케이션은 Nox라는 가상머신으로 실행할 것이기 때문에 Nox를 먼저 설치하겠습니다.

 

https://kr.bignox.com/

 

녹스 앱플레이어

모바일 게임을 키보드와 마우스로? 클릭 한 번으로 가상키보드 실행이 가능하며 PC버전의 게임도 간편하게 체험할 수 있습니다. 키보드와 마우스로 컨트롤하여 뛰는 자에서 나는 자가 되어볼 수

kr.bignox.com

 

Step 1. 사이트에 들어가시면 메인 페이지에 다운로드 버튼이 보입니다. 클릭합니다. 설치 프로그램이 다운로드되면 실행합니다. 

 

 

Step 2. 설치마법사 실행 후 바로설치를 선택합니다. 설치가 완료되면 자동으로 실행됩니다.

 

화면 크기가 너무 커서 저는 실행 > 성능설정에서 태블릿으로 되어 있던 것을 스마트폰으로 바꿨습니다. 참고(찡긋)

 

Step 3. 원활한 실습을 위해 설정 > 기본항목 > 시작항목 > ROOT 켜기를 선택해서 다시 부팅해주세요.

 

 

 

설치 끝!! Nox 설치가 끝났습니다. 이제 프리다를 설치하겠습니다.

 

 

환경 구축 - 프리다 설치

프리다는 파이썬으로 만들어졌기 때문에 먼저 파이썬이 설치되어야 합니다. 현재 제 노트북에 설치된 파이썬 버전은 2.7.15 버전이네요.

 

 

Step 1. pip install frida frida-tools 명령어로 설치합니다.

 

 

깔-끔하게 설치됐네요. 이제 여러분의 컴퓨터는 Frida라는 프로그램이 동작할 수 있습니다.

 

근데 프리다는 아까 말했듯이 애플리케이션이 실행되는 동안 데이터를 낚아채는 갈고리이기 때문에 갈고리를 거는 곳에도 설치가 되어야 합니다.

 

무슨 말이냐면 Nox라는 가상머신 안에도 설치가 되어야만 애플리케이션이 동작하는 동안 갈고리를 걸 수가 있어요. Nox 안에 설치할 프리다는 프리다 서버입니다. 이 서버는 실행되는 곳의 아키텍처에 맞게 설치해야 합니다.

 

Nox가 실행되면 이쁜 화면만 띄워주는 프로그램만 떨렁 설치되는게 아니라, 함께 사용할 수 있는 명령어도 자동으로 설치되고 환경변수 설정까지 다 됩니다. 그래서 명령 프롬프트를 실행했을 때 이 명령어만 입력해주면 Nox가 실행되는 동안 Nox에 접근할 수 있어요.

 

Nox가 실행된 상태에서 명령 프롬프트를 실행하고(윈도우 키 누르고 cmd라 검색해도 되고 명령 프롬프트라 검색해도 나옵니다)

 

Step 2. nox_adb shell getprop ro.product.cpu.abi 라는 명령어로 Nox의 아키텍처가 어떻게 구성되었는지 확인합니다.

 

 

x86 이네요. 이제 아래 링크에서 아키텍처에 맞는 프리다 서버를 설치해야 합니다.

 

https://github.com/frida/frida/releases

 

frida/frida

Clone this repo to build Frida. Contribute to frida/frida development by creating an account on GitHub.

github.com

 

아키텍처에 맞는 서버가 요기잉네. 설치합니다. 그리고 압축까지 풀어줍니다!

 

이제 압축 해제된 그 폴더에서 탐색기 주소창에 cmd 라고 입력합니다.(다른 방법도 많은데 저는 이게 편합니다.)

 

 

아! 여기서 잠깐

 

설명충 두둥등장!

 

프리다는 설치하는 파이썬 패키지와 저~기 위의 서버 버전을 맞춰줘야 합니다. 우리가 방금 설치한 서버는 12.10.1 버전이죠?

 

설치된 파이썬 패키지의 버전을 살펴볼까요?

 

이 프로그램 이름은 cmder 이라는 프로그램입니다. 윈도우와 리눅스 명령어를 혼용해서 사용할 수 있는 좋은 터미널이죠.

 

또옥같이 12.10.1 버전이네요? 패키지, 서버를 같이 설치하신다면 최신 릴리즈된 버전으로 설치되기 때문에 상관없지만

 

상황에 따라 하위 버전으로 설치하셔야 한다거나 할 때 참고하면 좋겠네요.

 

 

사랑해요침착맨

 

 Step 3. 실행된 프롬프트 창에서 nox_adb push frida-server-12.10.1-android-x86 /data/local/tmp/frida-server 명령어를 이용하여 frida-server-12.10.1-android-x86를 Nox의 /data/local/tmp 경로에 frida-server 라는 이름으로 밀어넣어 줍니다.

 

 

잘 이동이 되었네요.

 

 

 

Step 4. 이제 서버를 실행해볼건데 frida-server의 권한은 666(-rw-rw-rw-)입니다. chmod 명령어를 이용하여 실행권한을 부여합니다. 저는 그냥 777로 했습니다.

 

 

Step 5. ./frida-server & 명령어로 실행! 명령 프롬프트에서 frida-ps 명령어를 실행해봅니다.

 

 

완벽한 흑과 백의 조화.. 

 

[요약]

- 프리다는 파이썬으로 구현된 강력한 후킹 도구이다.

- 때문에 프리다를 사용하기 위해서는 파이썬을 설치한다. 가장 안정적인 버전은 2.X 버전이다.

- 프리다는 파이썬 라이브러리를 설치해야 한다.(pip install frida frida-tools)

- Nox 를 설치하면 관련 명령어도 함께 설치된다.

- nox_adb shell getprop ro.product.cpu.abi 명령어로 USB로 연결된 디바이스 혹은 로컬에서 실행 중인 가상머신의 아키텍처를 알 수 있다.

- 프리다 서버는 실행될 가상머신 혹은 디바이스의 아키텍처에 맞게 실행되어야 한다.

- 프리다 서버는 최초 권한이 666이기 때문에 실행권한을 부여해야 한다.

- 프리다 서버 실행 시 &를 추가해주지 않으면 엔터를 눌러도 다음 명령어를 실행할 수 없기 때문에 반드시 추가한다.

- 나는 친절하다.

 

 

이제 모든 준비가 끝났습니다. 다음 시간에는 OWASP 에서 만든 Uncrackable 안드로이드 애플리케이션을 이용해서  본격적으로 후킹을 해봅시다.!!

 

오늘은 여기까지. 앙~ 기분좋아!

 

오탈자 및 정보 오류 신고는 국번없이 ssw@linarena.com 으로 메일 부탁드립니다.

 

관련글 더보기