이번 주에 한 일
- 분석 관련 툴 설치, 환경 구축
- ubuntu
- JADX-GUI
- Bytecode Viewer
- MobSF
- Genymotion
- ADB
- Frida
- Android Studio
- ubuntu
- 함께 분석할 악성코드 조사
- syssecApp.apk
- Dexter
- Anubis
우분투 환경 구축 / 툴 설치
virtualbox로 진행하기로 했고, 이미 그 안에 우분투는 깔려있어서 분석 환경 설정만 변경해주면 됐다.
어댑터 1은 툴 설치를 위한 인터넷 연결을 위해 NAT 모드로 설정하고, 악성코드가 실제 인터넷으로 나가서 공격자의 서버와 통신하는 것을 막기 위해 어댑터 2를 호스트 전용 어댑터로 설정해주었다. 그리고 혹시 분석할 때 사용할 수도 있지않을까 싶어 Promiscuous Mode도 모두 허용으로 바꾸어 주었다.

메모리 8192MB , CPU 4개 이상, 디스크 크기 80GB, 비디오 메모리 128MB, 그래픽 컨트롤러 VMSVGA, 3D 가속 활성화 로 설정을 해 주었다.
마지막으로 VT-x/AMD-V를 켜주어 CPU가 가상화를 직접 지원해 성능이 더 빨라지도록 해 주었다. 참고로 내 컴퓨터에서는 처음에는 바로 켤 수 없도록 제한이 되어있었는데 호스트 운영체제 윈도우 나와 cmd창에서 버추얼박스 설치 폴더로 이동해 VBoxManage modifyvm "가상머신이름" --nested-hw-virt on을 입력해주니 버튼이 활성화되었다.

다음으로는 우분투 환경으로 들어와 설치를 해주었다.
설치를 하기 전, 각 툴이 하는 역할은 다음과 같다.
- JADX-GUI: APK 파일의 압축을 풀어 그 안의 .dex파일을 찾아 Java 소스 코드로 디컴파일해
- Bytecode Viewer: Java 소스뿐만 아니라 바이트코드(Smali), 헥사(Hex) 데이터를 동시에 보여줌. JADX가 복구하지 못하는 깨진 코드나 세부 명령어를 교차 검증
- MobSF: APK를 업로드하면 내부 파일 구조, 권한, API 사용처, 보안 취약점을 자동으로 전수 조사해 웹 리포트로 출력해주는 자동화 스캐너
- Genymotion: 버추얼박스 기반의 안드로이드 에뮬레이터
- ADB: PC(여기서는 우분투 환경)와 안드로이드 기기(Genymotion 등) 사이의 통신 통로
- Frida: 실행 중인 프로세스에 스크립트를 주입(함수 실행 가로채기, 리턴값 변조, 메모리 데이터 실시간으로 추출 등의 역할)
1. JADX-GUI
설치하기 위해서는 jdk가 먼저 설치되어있어야 한다. 설치가 되어있지 않았기 때문에 오라클 사이트에서 .deb 설치파일을 다운로드 해 주었다.

그 후, 터미널에 들어가 설치된 파일명을 확인 후 sudo dpkg -i 파일명을 입력해주면 아래 사진과 같이 설치가 시작된다.

설치 이후 터미널에 아래와 같이 입력해 버전이 나오면 성공적으로 설치가 되었다는 의미이다.

다음으로는 jadx-gui를 설치하기 위해서 https://github.com/skylot/jadx/releases 다음 링크에 들어가 .zip 파일을 설치해주었다. 설치 후 아래와 같이 명령어를 입력해 실행할 수 있다. 특히 마지막에 ./jadx-gui를 입력하면 바로 jadx 화면이 나온다.


매번 다운로드 디렉터리에 들어와서 명령어를 입력해주는게 번거로워서 그냥 터미널에 jadx만 입력하면 실행이 되도록 바꾸었다. 터미널창에 nano ~/.bashrc를 입력한 후, nano로 연 설정파일 가장 아래에 alias jadx='jadx-gui파일 경로' 를 추가해준다. 그 다음 다시 터미널 창으로 나와 바뀐 설정을 바로 적용하기 위해서 source ~/.bashrc를 입력해주면 어떤 터미널에서 jadx만 입력해주어도 jadx-gui가 바로 실행이 된다.

2. Bytecode Viewer
먼저, 터미널에서 분석 도구들을 한곳에 모아두기 위해 mkdir -p ~/tools/bytecode-viewer를 이용해 디렉터리를 만들었다. 그 다음 깃허브 리포지토리에서 직접 실행파일을 가져와서 저장한다.

이거도 아까와 같이 어느 터미널에서 bcv 라고만 입력하면 바로 실행되도록 하기 위해서 nano로 실행파일을 열어 alias bcv='java -jar 설치경로'를 추가해준다. (Bytecode Viewer는 자바로 만들어진 프로그램이라 java 명령어로 실행해야함) 그러면 아래 사진과 같이 bcv만 입력해주어도 Bytecode Viewer 화면이 바로 나온다.

3. MobSF
터미널 창으로 들어와 아래와 같이 입력해준다.
sudo apt update
sudo apt install python3-venv python3-pip git build-essential libssl-dev libffi-dev python3-dev libxml2-dev libxslt1-dev zlib1g-dev -y
cd ~/tools # 위에서 만든 tools 디렉터리
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
cd Mobile-Security-Framework-MobSF
./setup.sh
특히 git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git 의 복제시간이 꽤나 오래걸린다.
나는 마지막 ./setup.sh를 입력할 때 파이썬이 pip install로 마음대로 패키지를 설치 못하게 막아두어서 에러가 발생하였다. 그래서 어차피 가상환경이니 시스템 보호를 무시하고 강제로 설치하도록 python3 -m pip install poetry --break-system-packages를 입력해주었다. 그 이후 실행을 하려니까 다시 오류가 나서 보니 이번에는 서버 엔진인 gunicorn이 없다는 의미였다. 이건 Poetry가 가상 환경을 새로 만들면서 그 안에 필요한 도구들을 아직 다 채워넣지 못했다는 의미이기에 poetry install를 입력해주어 gunicorn을 포함한 모든 분석 도구를 가상 환경 안에 깔아주도록 했다.
모두 설치한 후, ./run.sh 127.0.0.1:8000를 입력해주면 아래와 같이 실행이 된다.

그 후, firefox 주소창에 http://127.0.0.1:8000를 입력하면 다음과 같이 Mobsf가 실행된다.

하지만 입력 화면을 넘어가면 500에러가 발생했다. 그래서 터미널 화면을 확인해보니, 데이터를 담을 공간을 만들지 않아 생긴 에러였다. 그래서 터미널 창에 poetry run python3 manage.py migrate를 입력해 DB를 만들었다. 아래 사진과 같이 OK가 쭉 뜨면 잘 생성이 된 것이다.
그 다음, 로그인 창에서 막힐 가능성을 없애기 위해 수동으로 관리자 계정을 만들었다. 터미널에 poetry run python3 manage.py createsuperuser 다음 명령어를 입력하면 아이디, 이메일, 비밀번호를 입력하라고 나오고, 이 때 원하는 아이디, 비번을 입력하면 된다.

그 이후 아까와 같이 터미널 창에 ./run.sh 127.0.0.1:8000를 입력해주고 다시 firefox로 들어가서 아까 생성한 아이디와 패스워드를 입력하면 아래 사진과 같이 잘 실행이 되는 것을 알 수 있다.

그 다음 터미널 화면에 mobsf만 입력하면 바로 실행이 될 수 있도록 아까와 같이 실행파일에 alias mobsf='cd MobSF경로 && ./run.sh 127.0.0.1:8000'를 추가해주었다.
4. Genymotion
일단 로컬에서 genymotion 사이트에 들어가 회원가입을 해 준다. 그 다음 다시 우분투 환경으로 들어와 genymotion 사이트에서 로그인을 한 후, 아래의 파일을 다운받는다.

다운받은 이후, chmod +x 'genymotion-3.9.0-linux_x64.run' 을 이용해 실행 권한을 주고 sudo ./'genymotion-3.9.0-linux_x64.run' 을 입력해 설치를 진행한다. 아래와 같이 설치가 끝났으면

/opt/genymobile/genymotion/genymotion를 입력해 실행한다. 실행 후, 계정을 생성해 들어가게 되면 아래와 같이 가상 기기를 만들 수 있는 화면이 나온다.


아까와 같이 genymotion만 입력하면 화면이 나오게 하기 위해 같은 방법으로 alias geny='/opt/genymobile/genymotion/genymotion' 를 실행파일 마지막에 추가했다.
5. ADB
아래와 같은 명령어를 차례로 입력해주면 된다.
sudo apt update # 패키지 목록 업데이트
sudo apt install android-tools-adb android-tools-fastboot -y # ADB 설치
adb version # 설치 확인
adb version을 입력했을 때 아래와 같이 버전이 잘 나오면 설치 성공이다.

6. Frida
아까와 같이 pip3로 설치를 시도하면 시스템이 사용하는 기본 파이썬 라이브러리와 버전 충돌이 발생하여 OS 전체가 불안정해질 수 있기 때문에 에러가 발생한다. MobSF를 설치할 때처럼 무시하고 강제로 설치할 수도 있지만 여기서는 다른 방법으로 해보겠다.
pipx는 파이썬 기반의 CLI 도구들을 설치할 때, 각 도구마다 독립된 가상 환경을 자동으로 생성해 준다. 이는 시스템 파이썬 라이브러리를 전혀 건드리지 않으며, 도구의 실행 파일만 사용자의 전역 경로(PATH)에 연결해 주기 때문에 안정적이면서 어느 경로에서나 사용할 수 있다. 아래의 코드는 pipx를 설치하는 코드이다.
sudo apt update
sudo apt install pipx -y # 파이썬 앱 격리 설치 도구(pipx) 설치
pipx ensurepath # pipx로 설치한 도구를 어디서든 실행 가능하게 경로 등록
pipx를 설치한 이후, 아래와 같이 pipx를 이용해 frida를 설치해준다. 설치 후, 사진에서처럼 frida --version을 입력했을 때, 버전이 나오면 성공이다.

다음으로는 호스트 OS에 나와서 설치를 진행한다.
1. Android Studio
역할: 가상 안드로이드 환경(에뮬레이터)을 제공하는 것이다. Genymotion과 유사한 기능을 수행하지만, Genymotion이 가상 머신(Ubuntu) 내부에서 동작하는 것과 다르게, 안드로이드 스튜디오는 호스트 OS에 직접 설치되어 독립적인 가상 장치를 생성하고 관리한다.
설치
공식 사이트(https://developer.android.com/studio?hl=ko) 에서 컴퓨터의 운영체제에 맞는 설치 파일을 다운로드 받는다. 아래 사진에서 보이는 Android 스튜디오 Panda 2 다운로드 버튼을 누르면 된다.

다운로드 하는데 시간이 꽤나 걸린다. 그 다음, 다운로드 한 .exe 파일을 실행해 설치를 진행한다. 설치 중에 추가 구성 요소를 설치하는 화면이 뜨는데 sdk와 에뮬레이터 등 실행에 필요한 구성요소들을 다운로드 하도록 Accept 해준다.
모두 다운로드 하면 아래 사진과 같은 시작화면이 보이게 된다.

악성코드 조사
1. syssecApp.apk
https://www.exploit-db.com/docs/english/33093-introduction-to-android-malware-analysis.pdf
위 실험에서 분석에 사용된 학습용 악성코드이다. 학습용이기 때문에 공격자 서버와 연결되어 있지 않아 탈취한 데이터가 실제로 휴대폰 밖으로 유출되지는 않는다.
기능: 이 앱은 겉으로는 평범한 미로 찾기 게임처럼 보이지만, 백그라운드에서는 악성 행위를 수행한다.
게임임에도 불구하고 SMS 읽기/받기, 연락처 읽기, 브라우저 방문 기록 및 북마크 읽기, GPS 위치 정보 접근, 캘린더 읽기 등의 민감한 정보 접근 권한을 요구한다.
이 앱의 주요 악성 동작은 다음과 같다.
- 기기에 SMS가 오면 내용을 확인해 bank라는 단어로 시작되는 문자면 가로채서 숨김 -> 사용자는 문자가 온지도 알 수 없음
- 사용자가 게임 화면을 닫거나 화면을 꺼두어도 15초마다 시스템을 깨워 백그라운드에서 실시간으로 민감한 정보를 탈취
- 수집된 정보는 XML 형태로 만들어 서버로 보냄 (학습용이기 때문에 루프백 주소 127.0.0.1로 전송)
2. Dexter
판매 시스템을 대상으로 신용카드 정보를 탈취하는 악성코드이다.
수많은 결제 단말기를 감염시켜 카드 정보를 유출시켰다.
윈도우 운영체제를 사용하는 시스템을 타켓으로 설계되었다.
기능: Dexter가 감염되면 윈도우에서 아용하는 브라우저를 실행하는 실행파일에 자신을 주입한다. 그리고 윈도우 레지스트리 항목을 변경하여 자신이 컴퓨터 시작 시 실행되도록 한다.
일반적인 악성코드와는 달리 메모리 스크래핑 방식을 사용한다. 결제 단말기에서 신용카드 정보를 처리할 때, 데이터가 암호화되어 전송되기 직전 RAM에 평문 상태로 노출되는 아주 짧은 순간을 노려 데이터를 탈취하는 기법이다.
탈취 후 데이터는 HTTP POST 요청을 통해 공격자의 서버로 전송된다.
Dexter는 오래된 악성코드라 Malpedia와 같은 보안 연구용 데이터베이스에서 비교적 쉽게 찾을 수 있다.
3. Anubis
안드로이드 전용 뱅킹 트로이목마이다.
2017년 처음 등장한 이후 소스코드가 유출되면서 수많은 변종이 만들어졌고, 현재까지도 전 세계 금융 앱을 위협하고 있다.
단순히 정보를 훔치는 것을 넘어, 사용자의 기기를 완전히 제어할 수 있는 기능을 가진다.
기능
- 사용자가 접근성 권한을 허용하게 만들면, 악성코드는 화면에 무엇이 떠 있는지 읽을 수 있고, 사용자르 ㄹ대신해 버튼을 클릭할 수 있게 된다.
- 사용자가 은행 앱을 시행하는 순간을 탐지해 실행하는 순간, 진짜 앱 위에 가짜 로그인 화면을 띄워 사용자가 입력한 로그인 정보가 공격자의 서버로 전송되도록 한다.
- 공격자가 탈취한 정보로 은행 결제 시 사용자에게 전송되는 OTP 문자를 가로챈다. 사용자가 문자를 확인하기도 전에 가로채서 서버로 보내고, 기기에서는 해당 문자를 삭제해버린다.
MalwareBazaar와 같은 무료 악성코드 데이터베이스에서 Anubis 샘플을 찾을 수 있다.
2주차 블로그는 여기까지입니다~ㅎㅎ 끝까지 봐준 사람이 있을지는 모르겠지만... 봐주셔서 감사합니다. 다음 주도 행복한 한 주 되길 바라겠습니다!!!
'악성코드' 카테고리의 다른 글
| 6주차_Jadx(1) (0) | 2026.05.18 |
|---|---|
| 5주차_Frida(1) (0) | 2026.05.11 |
| 4주차_학습용 악성코드 동적분석 (0) | 2026.04.02 |
| 3주차_학습용 악성코드 정적분석 (0) | 2026.03.29 |
| 1주차_capa 규칙 (0) | 2026.03.16 |