필요한 지식을 갖추고 있다면 계속 진행해주시고, 만약 부족한 부분이 있다면 배우고 오시는 것을 권장합니다.
저는 요즘 리버스 엔지니어링에 관심이 생겨서 애플리케이션 분석을 위해 여러 블로그 글을 찾아보는 중입니다. 그런데 블로그 글을 찾아보면서 어떤 기술 하나를 배우기 위해서는 그 개념의 하위 개념들을 전부 이해하고 다시 배워야 한다는 어려움이 있었습니다. 그래서 그 기술을 완전히 제 것으로 만드는 데 오랜 시간이 걸렸습니다.
따라서 제가 이 글뿐만 아니라 제 전체적인 블로그 활동을 통해 달성하고자 하는 목적은, 개발과 해킹에 대해 잘 모르는 초보자도 기초적인 환경 세팅부터 차근차근 배울 수 있게 정리하는 것입니다.
그런데 이런 방식으로 글을 쓴다면 설명하는 개념의 범위가 너무 커질 수 있기 때문에(해킹이 무엇인지부터 설명할 수는 없으니까), 제가 설명하는 개념들을 알기 위해 최소한 알고 있어야 할 지식을 설명하는 방향으로 글을 쓰겠습니다. 그래서 내용이 아무래도 조금 길어질 수도 있을 것 같습니다. 천천히 차근차근 개념에 대해 이해하시면서 읽고 직접 따라해보세요!
우선 프리다 홈페이지(링크) 에 들어가서 프리다가 무엇인지 살펴보겠습니다.
Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers.
프리다는 개발자, 리버스 엔지니어, 보안 연구원들을 위한 애플리케이션 동적 분석 도구입니다. frida 에서 동적 분석이라 함은 프로그램이 동적(↔ 정적)으로 실행중인 상태에서 그 프로그램의 프로세스에 코드를 삽입하여 프로그램에 대한 여러 분석을 진행하는 작업을 의미합니다. 분석 작업은 여러가지가 있는데, 이후에 frida 도구를 직접 사용하고 삽입할 코드를 직접 코딩해보면서 배워보도록 하겠습니다.
frida 에 대한 추가적인 정보는 홈페이지의 DOCS 탭에 들어가면 확인할 수 있습니다. 공식 문서에는 더 상세한 정보들이 있기 때문에, 영어에 자신있다면 꼭 한번 읽어보시길 바랍니다.
위에서 설명한 것처럼 우리는 실행중인 프로그램(안드로이드 앱)의 프로세스에 코드를 삽입하는 작업을 수행할 것입니다. 그래서 프로그램을 실행할 환경을 먼저 구축해보도록 하겠습니다.
일단 가장 간단한 방법은 가지고 있는 안드로이드 휴대폰에 앱을 설치해서 frida로 분석을 진행하는 것입니다. 하지만 이 방식은 휴대폰을 루팅(사용자가 루트 권한(시스템의 최고 권한)을 얻기 위해 시스템에서 탈옥하는 것)을 해야 합니다.(휴대폰에서 실행되는 프로세스에 frida가 작업을 진행하려면 일반 사용자 권한이 아닌 루트 권한이 필요하기 때문입니다.) 루팅을 하지 않는 방법으로는 frida gadget을 이용하는 방법이 있는데 우리는 우선 가장 일반적인 방법인 녹스 앱플레이어를 컴퓨터에 설치하여 그 환경에서 진행하도록 하겠습니다. 녹스 앱플레이어에서 원하는 앱을 다운로드 받아 안드로이드 스마트폰처럼 사용할 수 있으며, 루트 모드를 지원하기 때문에 루팅하지 않아도 됩니다.
녹스 앱플레이어 홈페이지(링크) 에 들어가서 다운로드 버튼을 누르면 인스톨러가 설치됩니다.
설치가 완료되었으면 시스템설정 > 일반 > ROOT켜기 체크박스를 체크하고 저장한 뒤 녹스 앱플레이어 재실행을 해주세요.
녹스 앱플레이어를 명령어로써 통제하기 위해서 nox_adb 라는것을 사용합니다. adb란 Android Debug Bridge 의 약자로, 명령어를 통해 안드로이드를 제어할 수 있게 해주는 소프트웨어 입니다.
nox_adb는 cmd에서 nox_adb.exe 파일을 실행하면 사용할 수 있는데, 매번 cmd에서 nox_adb.exe 파일이 있는 경로로 이동해서 실행할 수는 없으니 어느 경로에서든 실행할 수 있도록 nox_adb.exe 가 있는 경로를 환경 변수에 등록해 보도록 하겠습니다.
윈도우 검색창에 '시스템 환경 변수 편집' 을 검색한 뒤 들어가주세요.
그다음 시스템 변수에서 Path 부분을 더블클릭 해줍니다.
그리고 새로 만들기 버튼을 누르고 녹스 앱플레이어가 있는 폴더에서 bin 폴더의 위치를 입력하세요. 저는 C:\Program Files (x86)\Nox\bin
경로에 nox_adb.exe 파일이 있습니다.
설정이 다 완료되었다면 이제 cmd를 실행한 뒤 nox_adb version 명령어를 입력해보면 nox_adb 의 버전이 잘 출력되는것을 볼 수 있습니다.
C:\Users\dev>nox_adb version
Android Debug Bridge version 1.0.36
이제 frida를 설치해보도록 하겠습니다. frida를 설치 및 실행하기 위해서는 파이썬(링크)과 nodejs(링크)가 설치되어 있어야 합니다.
설치되어있지 않다면 링크를 통해 설치한 다음 계속 진행해주세요.
frida는 다음 두 명령어를 통해 설치할 수 있습니다. cmd를 실행시킨 뒤 명령어를 입력하면 설치가 완료됩니다.
> pip install frida
> pip install frida-tools
frida --version
명령어를 통해 frida 가 설치된 것을 확인할 수 있습니다.
C:\Users\dev>frida --version
16.0.19
이제 frida-server를 녹스 앱플레이어에 설치하여 녹스 앱플레이어와 컴퓨터가 통신할 수 있게 해야합니다. 녹스 앱플레이어를 실행하고 cmd에서 nox_adb shell
명령어를 입력합니다.
C:\Users\dev>nox_adb shell
d2q:/ #
명령어를 입력할 수 있는 쉘이 실행되었습니다. 이제 getprop ro.product.cpu.abi
명령어를 입력하면 안드로이드가 몇 비트인지 알 수 있습니다.
d2q:/ # getprop ro.product.cpu.abi
x86
저는 x86 즉, 32비트 안드로이드인 것을 알 수 있습니다.
그다음 위 링크로 접속하면 여러가지 파일들을 볼 수 있습니다.
Show all 263 assets 를 눌러 추가적인 파일들을 볼 수 있습니다. frida-server-버전-android-x86.xz
파일을 찾아 다운로드하고 압축을 풉니다.
그 다음 cmd를 실행하고 다음 명령어를 입력해 압축을 푼 파일을 녹스 앱플레이어의 /data/local/tmp/frida-server
경로로 옮깁니다.
> nox_adb push [옮길 파일의 경로] /data/local/tmp/frida-server
C:\Users\dev>nox_adb push [옮길 파일의 경로] /data/local/tmp/frida-server
[100%] /data/local/tmp/frida-server
이렇게 frida-server 설치를 완료했습니다.
지금까지 데스크탑과 녹스 앱플레이어에 frida 환경을 구축해보았습니다.
다음 글에서는 frida 실행 방법과 간단한 명령어들을 소개하겠습니다.
와 민뭉 팬이에요 싸인해주세요