본문 바로가기
SW 개발/Android

Python으로 개발된 Android Apk Decompile Tool: androguard

by Kibua20 2021. 1. 27.

Android apk 분석 tool로 python으로 개발된 androguard를 설명합니다. Android apk 분석 tool은 ① SDK에 포함된 apkanalyzer, aapt가 있고, ② Java로 개발된 apktool을 사용할 수 있으나, 이는 실행 파일과 Jar형태로 배포되어 Python으로 개발된 프로그램에서 import 할 수 없고, system command로 Integration해야 합니다. 

 

[모바일 SW 개발/Android] - Android apk Decompile 과 분석 tool: apktool 사용법

[모바일 SW 개발/Android] - Command line 기반 Android Apk 분석 툴: apkanalyzer

 

Androguard의 fork로써 apk_parse가 있습니다. 이는 필요한 py 모듈만 정리하여 사용하기는 쉬우나 Python 2.x 버전에서만 지원하고 있기 때문에 Python 3.x 버전을 사용하는 경우에 꼭 androguard를 사용해야 합니다.  

 

Androguard 설치 

Androguard는 우분투에서는 $ apt install androguard 명령어로 설치할 수도 있고, Python PIP를 사용해서 설치할 수 있습니다.  Python PIP로 설치 시 3.3.5 버전이 설치되고, 이는 2019년 초에 배포된 것입니다.

 

Android OS가 매년 업데이트됨에 따라서 apk 분석 tool도 같이 업데이트해야하기 때문에 가급적이면 가장 최신의 Androguard 버전을 설치하는 것을 추천드립니다.  최신 버전의 Androguard는 Git Hub를 통해서 설치할 수 있고, 설치 위치는 링크를 참조하세요.

 

# 리눅스인 경우 apt로 설치 (v3.3.5버전)

$ sudo apt install androguard

 

# Python PIP로 설치 (v3.3.5버전)

$ pip3 install androguard 

 

# Git hub 설치 (v3.4.0 alpha1버전)

$  git clone  https://github.com/androguard/androguard.git

$  python3 setup.py build

$ sudo python3 setup.py install

  androguard Git Hub 사이트 ( https://github.com/androguard/androguard )

 

최신 androguard git 소스를 로컬 PC로 다운로드합니다.

$  git clone  https://github.com/androguard/androguard.git

최신 androguard git 소스를 로컬 PC로 다운로드

 

androguard에서 requrement.txt에 정의된 종속 모듈을 설치하고 python lib 폴더에 copy 합니다.

$ sudo python3 setup.py build 

$ sudo python3 setup.py install

androguard 설치; python3 setup.py install

 

만일 sudo 권한이 없는 경우 Install dir 위치를  ~/.local/lib/python3.8/site-packages/ 로 지정합니다. Python lib path는 기본적으로 system lib path local user lib path → 사용자 지정 폴더 위치로 찾습니다. 아래 경로는 리눅스에 설치된 경우이고 윈도우에서  sys.path를 폴더 위치를 확인하고 설치 위치를 지정할 수 있습니다.  

 

#Root 권한이 없는 경우 로컬 계정의 lib 폴더에 추가

$ python3 setup.py install  --install-dir  ~/.local/lib/python3.8/site-packages/

 

Androguard Python sample code

Androguard에서 APK 분석 함수는  APK class에 정의되어 있습니다. Apk class는 androguard/core/bytecodes/apk 하위에 구현되어 있습니다. Python 3.8 기준에서는 다른 수정 사항 없이 APK 모듈을 import 합니다.  

 

# APK 모듈 import

from androguard.core.bytecodes.apk import APK

 

# apk 파일 지정

apkf = APK(filename)

 

# apk 정보를 모두 보여준다.

apkf.show()

 

# package name 출력 

print (apkf.get_package())

#permission 출력

print (apkf.get_permissions())

#version code와 name 출력

print (apkf.get_androidversion_code())

print (apkf.get_androidversion_name())

#main activity출력

print (apkf.get_main_activity())

# 모든 activity 출력

print (apkf.get_activities())

# serivces list 출력

print (apkf.get_services())

# Intent receiver 출력

print (apkf.get_receivers())

# provider list 출력

print (apkf.get_providers())

 

Androguard Command line 명령어

Help 명령어를 통해서 명령어 옵션을 확인하면 다음과 같습니다.  Command line 명령어로 apk의 package name, version 정보, AndroidManifest.xml 정보, decomile와 함께 caller graph (예제)까지 분석할 수 있습니다. 

 

$ androguard  --help

Usage: androguard [OPTIONS] COMMAND [ARGS]...

  Androguard is a full Python tool to play with Android files.

 

Options:

  --version           Show the version and exit.

  --verbose, --debug  Print more

  --quiet             Print less (only warnings and above)

  --silent            Print no log messages

  --help              Show this message and exit.

 

Commands:

  analyze      Open a IPython Shell and start reverse engineering.

  apkid        Return the packageName/versionCode/versionName per APK as...

  arsc         Decode resources.arsc either directly from a given file or...

  axml         Parse the AndroidManifest.xml.

  cg           Create a call graph and export it into a graph format.

  decompile    Decompile an APK and create Control Flow Graphs.

  disassemble  Disassemble Dalvik Code with size SIZE starting from an...

  gui          Androguard GUI

  sign         Return the fingerprint(s) of all certificates inside an APK.

 

 

명령어 사용 예제입니다. 

$ androguard  apkid com.facebook.katana_v301.0.0.37.477.apk 

$ androguard  arsc com.facebook.katana_v301.0.0.37.477.apk 

$ androguard  axml com.facebook.katana_v301.0.0.37.477.apk 

 androguard  apkid 
 androguard  axml

 

$ androguard  decompile    com.skt.tmap.ku_v8.3.3.291042.apk

$ androguard  cs com.skt.tmap.ku_v8.3.3.291042.apk

androguard  decompile 

 

 

관련 글:

[모바일 SW 개발/Android] - Android 스마폰을 PC 화면으로 미러링: Mirroid

[모바일 SW 개발/Android] - 안드로이드 adb 설치 및 설정 방법

[모바일 SW 개발/Android] - Android apk Decompile 과 분석 tool: apktool 사용법

[개발환경/Tips] - 네이버 동영상 다운로드 방법 (동영상과 설명 포함)

[모바일 SW 개발/Android] - 안드로이드 스마트 폰 화면 미러링 방법: scrcpy 사용법

[개발환경/Tips] - Spotify 한국에서 사용하는 방법

[개발환경/Tips] - 광고 없는 Android 토렌트 앱: LibreTorrent

[개발환경/Google Cloud Platform] - 회사에서 방화벽으로 막혀 있는 사이트 우회 방법: SSH tunneling 과 Socks5 활용

[모바일 SW 개발/Android] - Android에서 Python 실행 (SL4A와 Termux 활용)

[모바일 SW 개발/Android] - Android 에서 리눅스 App 실행: Linux Terminal Emulator (Termux) 활용

[개발환경/Web Server] - 우분투 20.04에서 Flask를 서비스 등록: 부팅 시 자동 실행

[모바일 SW 개발/Android] - Android apkanalyzer 에러: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema

[모바일 SW 개발/Android] - Command line 기반 Android Apk 분석 툴: apkanalyzer

[모바일 SW 개발/REST API] - JWT(JSON Web Token) Encoding 방법 (Python sample code)

[모바일 SW 개발/Android] - Android 11 (R-OS) Emulator에 설치하기

[모바일 SW 개발/Android] - Android 11 기능 소개

[모바일 SW 개발/Android] - Android 소스 최적화 (100GB에서 65GB로 줄이기)

[모바일 SW 개발/Android] - Ubuntu에서 Android 10 빌드하기




댓글