이 글에서는 M1 프로세서를 사용하는 맥북을 활용해 안드로이드 앱(APK)를 분석하기 위한 환경 설정을 하는 방법을 포스팅합니다. APK 디컴파일러 JD-GUI 설치부터 apktool 설치까지 맥북으로 안드로이드 앱 분석을 할 사람은 꼭 보시길 바랍니다.

맥북 M1 안드로이드 앱 분석 환경 세팅방법(JD-GUI, apktool)

나는 원래 회사에서 악성코드 분석 업무를 맡아서 PE(.exe)파일을 분석하고 있었다. PE 파일 분석에는 IDA, ollyDBG와 같은 프로그램을 사용한다는 것은 모든 악성코드 분석가들은 잘 알고 있을것이다.

최근 팀이 옮겨져 모바일, 보이스피싱과 관련된 업무를 하게 되면서 안드로이드 앱인 .apk 파일로 배포되는 악성코드를 분석해야 할 필요가 생겼다. 그래서 본 글을 통해 어떻게 안드로이드 분석 환경을 세팅할 수 있는지 그 방법을 알려드리고자 한다.

 

APK 파일 분석을 위해서는 우선 'apktool'이라는 프로그램으로 apk 파일을 디컴파일(실행 파일을 소스코드로 변경) 한 후,

'dex2jar'라는 프로그램으로 디컴파일 된 .dex 파일을 .jar로 변경하여 이 .jar파일을 'JD-GUI'로 불러와 분석하게 된다.

그럼 필요한 프로그램을 설치해보자.


반응형

Homebrew와 Git 설치하기

 

프로그램을 설치하기 전 필요한 환경 설정을 위해서 몇 가지를 설치해주어야 한다.

먼저 리눅스의 apt-get과 같은 패키지 관리 소프트웨어인 Homebrew를 설치해주고, GitHub 이용을 위해서 Git을 설치해주어야 한다.

 

Homebrew 설치하기

Homebrew는 아래 사이트를 접속하여 설치를 위한 명령어를 복사할 수 있다.

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh

홈페이지에 접속하면 아래와 같은 화면이 나오고, Install Homebrew 부분 밑에 복사할 수 있는 명령어가 나온다.

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew 홈페이지

해당 내용을 복사한 후, 맥북의 터미널을 열어 붙여넣은 뒤 엔터를 쳐주면 간단하게 Homebrew가 설치된다.

Homebrew Install

Git 설치하기

Homebrew를 설치한 후, 아래 명령어를 입력하여 Git을 설치해준다.

$ brew install git

Git install


반응형

JD-GUI 설치

JD-GUI는 아래 GitHub 사이트를 통해 소스코드를 확인할 수 있으며, 패키지를 다운받은 후 빌드하여 사용할 수 있다.

 

GitHub - java-decompiler/jd-gui: A standalone Java Decompiler GUI

A standalone Java Decompiler GUI. Contribute to java-decompiler/jd-gui development by creating an account on GitHub.

github.com

JD-GUI를 설치하는 방법은 아래 명령어만 따라 쳐주면 된다.

Git 프로젝트를 다운받은 후, 생성된 폴더로 이동해서 build(빌드) 해주면, 소스코드를 실행파일로 바꿔준다.

$ git clone https://github.com/java-decompiler/jd-gui.git
$ cd jd-gui
$ ./gradlew build

명령어를 쳐서 다운로드 해준다. 그러면 해당 경로에 jd-gui라는 폴더가 생성된다.

JD-GUI 다운로드

그리고 다음 jd-gui 폴더로 이동해서, ./gradlew build 명령어로 빌드를 하면 빌드가 되지 않는다.

'Unable to locate a Java Runtime.' 에러 내용은 자바 런타임 위치를 찾지 못하는 것이다. 자바가 설치되어 있지 않거나 자바가 설치되어있지만 환경변수 등록이 되어있지 않은 경우이다.

JD-GUI 빌드

반응형

자바를 설치해보자

JAVA 설치하기 (에러 발생)

자바를 설치하기 위해 아래 자바 공식 사이트에 접속해 다운로드를 수행하여 설치하면 될 것 같지만 안된다!

 

Java | Oracle

데스크톱 애플리케이션용 Java 얻기

www.java.com

이와 같이 홈페이지에서 다운로드를 할 수 있는데, 이렇게 설치하게 된 자바의 버전을 확인해보면 1.8.0_361 버전으로 Java SE Runtime Environment(JRE)가 잘 설치된 것 같아 보인다.

JAVA 다운로드JAVA 버전

하지만, 다시 JD-GUI 빌드를 수행해보면 아래와 같이 에러가 발생한다. 에러 내용을 자세히 보면 JDK라는 단어가 보인다.

에러메세지

아마 아는 사람도 있을테지만, JAVA에는 두 가지 다운로드 타입이 존재한다.

JRE(Java Runtime Environment), JDK(Java Development Kit)! JRE는 쉽게 말해 자바 실행 환경이고, JDK는 JRE를 포함한 컴파일러(javac), javadoc, jar 등 개발에 유용한 도구들을 포함한 도구 모음이다. 따라서 JRE를 설치하면 자바로 만들어진 파일을 실행하는 것(읽는 것)만 가능하고, 자바 코드를 빌드하는 것(쓰는 것)은 안된다는 의미이다.

반응형
JAVA 설치하기 (JDK로 설치하기)

따라서 JDK로 설치 후 환경변수까지 잡아주어야 한다. JDK를 받는 것은 아래 사이트로 접속하면 된다.

 

Azul Downloads

According to the Gartner report, “by 2025, more than 70% of Java applications will be deployed on third-party Java runtimes, up from 30% in 2019.”

www.azul.com

페이지 접속 후, 페이지를 아래로 내려서 Java Version을 Java 8(LTS), OS를 macOS, Architecture를 ARM 64-bit로 선택하면 Java 8버전의 JDK를 받을 수 있다. 다운받은 파일을 더블클릭하여 설치한다.

JDK 다운로드JDK 설치

그리고 JDK가 설치된 경로를 확인하여 환경변수(~/.bash_profile 또는 ~/.zshrc) 파일에 등록해준다. M1 맥북의 경우 ~/.zshrc 파일을 사용한다. 파일을 열어서 아래 내용을 끝부분에 추가해주면 된다.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

환경변수 등록

환경변수를 등록하고 반드시 터미널을 다시 껐다가 재실행해준다.

환경변수까지 잡아주면 아래와 같이 자바 버전에서 OpenJDK 버전이 1.8.0_362로 표기되는 것을 확인할 수 있다.

Java 버전

그리고 다시 빌드를 수행(./gradlew build)하면 정상 빌드가 되는 것을 확인할 수 있다.

빌드 성공

반응형

빌드 된 후, 같은 경로에서 build/launch4j/lib로 들어가면 jd-gui-1.6.6.jar이라는 파일이 생성된 것을 확인할 수 있다.

사실 아래 사이트에 접속해서 JD-GUI 릴리즈 버전(jd-gui-1.6.6.jar) 파일을 바로 다운받아 편하게 사용할 수도 있다.

 

Java Decompiler

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reco

java-decompiler.github.io

JD-GUI 다운로드

하지만 개발을 하려면 Git도 필요하고 패키지 설치를 위해서 Homebrew도 필요할 것이기 때문에, 또 build 작업도 한 번 경험해봐야 어떻게 프로그램이 만들어지는지 알 수 있기 때문에 번거롭지만 수동으로 jd-gui-1.6.6.jar 파일을 생성해보았다.

 

JD-GUI 실행하기

java를 활용해 해당 .jar 파일을 아래 명령어와 같이 실행하면 JD-GUI가 실행되는 것을 확인할 수 있다.

여기서 [jd-gui 경로]의 경우 각자 jd-gui가 설치된 경로를 적어주면 된다.

$ java -jar /[jd-gui 경로]/build/launch4j/lib/jd-gui-1.6.6.jar

명령어 실행

하지만, 매번 저렇게 긴 명령어를 적어줄 수 없기 때문에 우리는 'jd-gui'만 입력해서 실행되게끔 만들어주겠다. 

아까 환경변수를 등록했던 ~/.zshrc 파일애 아래 환경변수를 등록해준다.

alias jd-gui='java -jar /[jd-gui 경로]/build/launch4j/lib/jd-gui-1.6.6.jar'

환경변수 추가

환경변수를 등록해준 후, 터미널을 재실행하고 다시 jd-gui만 입력해주면, 바로 실행되는 것을 확인할 수 있다.

JD-GUI 실행


반응형

dex2jar, apktool 설치

JD-GUI 설치를 마쳤으니, 이제는 dex2jar, apktool을 설치하면 된다.

앞선 JD-GUI에 비해 dex2jar, apktool의 설치는 매우매우 간단하다. 아래 명령어만 입력해주면 설치가 끝난다.

$ brew install dex2jar
$ brew install apktool

apktool 설치
dex2jar 설치


 

apk 파일 분석 테스트

이제 모든 설치를 마쳤으니 처음 말했던 순서대로 apk 파일을 어떻게 분석할 수 있는지 테스트해보겠다.

 

1. apktool을 사용하여 apk 파일 디컴파일 : 아래 명령어를 이용하여 apk 파일을 디컴파일 한다. 디컴파일 하면 decompile 폴더 내에 .dex 파일이 생성됨을 확인할 수 있다.

$ apktool d -s -o decompile [apk 파일 이름]

디컴파일

2. dex2jar을 사용하여 디컴파일 된 .dex 파일을 .jar로 변환 : 아래 명령어를 통해 간단하게 .dex 파일을 .jar파일로 변환할 수 있다. 변환된 파일은 기존 파일명에 -dex2jar.jar가 붙는다.

$ d2j-dex2jar [dex파일 이름]

dex2jar

3. JD-GUI로 .jar 파일 열어 소스 분석 : JD-GUI를 열어 File - Open File을 눌러 방금 생성한 .jar 파일을 불러오면 안드로이드 앱의 자바 소스코드가 보인다. 자바 소스코드를 보면서 앱이 어떤 동작을 하는지 분석하면 된다.


반응형

마무리

지금까지 안드로이드 앱 분석을 위한 환경설정 및 실제 분석 테스트를 진행해보았다. 지금까지 했던 것은 정적분석을 위한 환경설정이었다.

안드로이드 앱 분석을 할 때는, 앞서 알려드린 분석 환경을 구축해 정적으로 코드 분석 등을 진행함과 동시에,

악성 앱(APK)을 녹스 앱 플레이어와 같은 가상 에뮬레이터에 깔아서 뭔 짓을 하는 앱인지 동적 분석을 해보곤 하는데,

맥북 M1 프로세서는 ARM 프로세서 기반이어서 녹스 앱 플레이어를 미지원한다고 해서 이 부분은 좀 더 찾아봐야 할 것 같다.

 

앞으로 범죄에 사용되는 많은 앱들을 분석해보려 한다.

 

 

+ Recent posts