
Android 애플리케이션에서 정적 및 동적 특징을 자동으로 추출하기 위한 프레임워크
Android APK에서 정적 및 동적 특징을 추출하기 위한 도구입니다. DroidBox, FlowDroid, Strace, AndroGuard 또는 VirusTotal 분석과 같은 잘 알려진 Android 앱 분석 도구들을 결합합니다. APK 파일이 포함된 소스 디렉토리를 제공하면 AndroPyTool이 이러한 모든 도구를 적용하여 사전 정적, 정적 및 동적 분석을 수행하고 JSON 및 CSV 형식의 특징 파일을 생성하며 모든 데이터를 MongoDB 데이터베이스에 저장할 수 있습니다.
자세한 정보를 얻으려면 다음 두 논문을 참조하십시오:
Martín, A., Lara-Cabrera, R., & Camacho, D. (2018). 하이브리드 특징 융합 및 앙상블 분류기를 통한 Android 악성코드 탐지: AndroPyTool 프레임워크와 OmniDroid 데이터셋. Information Fusion. DOI: 10.1016/j.inffus.2018.12.006
Martín, A., Lara-Cabrera, R., & Camacho, D. (2018). 정적 및 동적 Android 악성코드 분석을 위한 새로운 도구. Data Science and Knowledge Engineering for Sensing Decision Support (pp. 509-516). World Scientific.
이 도구를 사용하시는 경우, 위 연구를 논문에 인용해 주시기 바랍니다.

AndroPyTool을 설치하고 사용하는 방법은 두 가지입니다.
MODE A - DOCKER: 필요한 모든 파일이 포함된 Docker 컨테이너를 다운로드합니다. 이 방법을 권장합니다. 단 두 단계만으로 AndroPyTool을 실행할 수 있습니다.
MODE B - SOURCE CODE: 필요한 모든 라이브러리를 설치 및 구성하고 Python 소스 코드를 실행합니다.
빠르고 안정적인 AndroPyTool 버전을 제공하기 위해 Docker 컨테이너가 구축되었습니다. Docker를 사용하여 AndroPyTool을 사용하려면 다음 단계를 따르십시오:
Docker를 설치합니다 (아직 설치하지 않은 경우). 여기의 지침을 따르십시오. Ubuntu를 사용하지 않는 경우 올바른 운영 체제에 맞게 변경하십시오.
Docker Hub에서 컨테이너를 가져옵니다:
$ docker pull alexmyg/andropytool
컨테이너를 실행하여 AndroPyTool을 실행합니다:
$ docker run --volume=</PATH/TO/FOLDER/WITH/APKS/>:/apks alexmyg/andropytool -s /apks/ <ARGUMENTS>
*</PATH/TO/FOLDER/WITH/APKS/>*를 분석할 APK가 포함된 호스트의 경로로 바꾸십시오. 위 명령줄과 같이 "-s" 인수는 반드시 /apks/를 가리켜야 합니다.
참고 2: AndroPyTool은 APK 파일을 정리된 작업 디렉토리를 생성하기 위해 다른 하위 폴더로 이동합니다. 폴더 구조 체계를 참조하십시오.
AndroPyTool에 제공할 수 있는 다양한 인수는 다음과 같습니다:
-h: 도움말 메시지를 표시하고 종료합니다.-all, --allsteps: AndroPyTool의 모든 단계를 실행합니다 (권장). VirusTotal 보고서를 얻으려면 -vt 인수 뒤에 VirusTotal API 키를 추가로 제공해야 합니다. -all 옵션이 제공되지 않으면 제공된 인수와 함께 마지막 단계만 실행됩니다.-s SOURCE_FOLDER, --source SOURCE_FOLDER: 분석할 APK가 포함된 폴더입니다. 모든 샘플은 .apk 확장자를 포함해야 합니다. 이전 AndroPyTool 실행이 중단된 경우 이전 작업 디렉토리를 제공해야 합니다.-S, --single: 각 분석을 별도로 저장합니다. 기본값: False.-f, --filter: 유효한 APK와 유효하지 않은 APK를 필터링합니다 (권장).-vt VIRUSTOTAL_API_KEY, --virustotal VIRUSTOTAL_API_KEY: VirusTotal 서비스로 애플리케이션을 분석합니다. 뒤에 VirusTotal API 키를 입력해야 합니다.-cl, --classify: VirusTotal 보고서를 기반으로 앱을 악성코드 또는 정상 앱으로 분류합니다. --virustotal 인수가 설정되어 있어야 합니다.참고: 이 절차는 Ubuntu에서만 테스트되었습니다.
0. 요구 사항
$ sudo apt-get update
$ sudo apt-get install -y --no-install-recommends software-properties-common wget git lib32gcc1 lib32ncurses5 lib32stdc++6 lib32z1 libc6-i386 libgl1-mesa-dev python-pip python-dev gcc python-tk curl
$ sudo add-apt-repository ppa:webupd8team/java -y
$ sudo apt-get update
$ sudo echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
$ sudo apt-get install -y oracle-java8-installer
$ sudo apt-get install -y python-setuptools
$ sudo apt-get clean
1. Android SDK를 설치해야 합니다 (이미 설치한 경우 다음 단계로 이동) 다음 단계는 GUI 없이 Android SDK를 설치하는 방법입니다:
Android SDK를 다운로드하고 압축을 풉니다:
$ cd
$ wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
$ tar -xvf android-sdk_r24.2-linux.tgz
Android SDK를 PATH에 추가합니다 (Bash를 사용하지 않고 예를 들어 Zsh를 선호하는 경우 올바른 파일을 수정해야 합니다). 이를 위해 ~/.bashrc 파일에 다음 두 줄을 추가합니다:
export ANDROID_HOME=$HOME/android-sdk-linux/
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
다음 명령으로 현재 세션에 라이브러리를 로드합니다:
$ source ~/.bashrc
2. Android 16 패키지를 설치해야 합니다
DroidBox가 지원하는 버전인 Android 16(플랫폼 및 시스템 이미지)을 설치합니다:
$ echo y | android update sdk --filter platform-tools --no-ui --force -a
$ echo y | android update sdk --filter tools --no-ui --force -a
$ echo y | android update sdk --filter android-16 --no-ui --force -a
$ echo y | android update sdk --filter sys-img-armeabi-v7a-android-16 --no-ui -a
3. 저장소를 다운로드합니다
$ git clone --recursive https://github.com/alexMyG/AndroPyTool.git
$ wget https://github.com/alexMyG/AndroPyTool/releases/download/droidbox_images_patched/images_droidbox.zip
$ unzip -o images_droidbox.zip -d AndroPyTool/DroidBox_AndroPyTool/images
$ touch AndroPyTool/avclass/__init__.py
3. DroidBox를 준비합니다
$ chmod 744 AndroPyTool/DroidBox_AndroPyTool/*.sh
$ echo "no" | AndroPyTool/DroidBox_AndroPyTool/createDroidBoxDevice.sh
4. 필요한 Python 라이브러리를 설치합니다
virtualenv를 설치합니다:
$ sudo pip install virtualenv
$ virtualenv droidbox_env
$ source droidbox_env/bin/activate
$ pip install -r AndroPyTool/requirements.txt
5. 이제 AndroPyTool을 실행할 수 있습니다
$ cd AndroPyTool/
$ python androPyTool.py -s </PATH/TO/FOLDER/WITH/APKS/>
입력: ".apk" 확장자를 가진 파일이 포함된 폴더. 출력: 다음 체계를 따르는 폴더 구조:
/ --> 루트 폴더
/samples/ --> 원래 루트 폴더에 있던 샘플들
/samples/BW/ --> 정상 앱 샘플
/samples/MW/ --> 악성코드 샘플
/invalid_apks/ --> 발견된 유효하지 않은 APK
/VT_analysis/ --> VirusTotal 분석 보고서
/FlowDroid_outputs/ --> FlowDroid 결과
/FlowDroid_processed/ --> 처리된 FlowDroid 결과
/DroidBox_outputs/ --> DroidBox 원시 출력
/Dynamic/Droidbox/ --> JSON 형식의 DroidBox 분석
/Dynamic/Strace/ --> CSV 형식의 Strace 분석
/Features_files/ --> AndroPyTool로 생성된 특징 파일
-fw, --flowdroid: FlowDroid를 실행합니다.-dr, --droidbox: DroidBox를 실행합니다.-c, --cleanup: 임시 작업 파일을 삭제하여 정리합니다. 기본값: True-P PACKAGEINDEX, --packgeIndex PACKAGEINDEX: 모든 Android API 패키지가 포함된 TXT 파일입니다. 기본값: info/package_index.txt-C CLASSINDEX, --classIndex CLASSINDEX: 모든 Android API 클래스가 포함된 TXT 파일입니다. 기본값: info/class_index.txt-C CLASSINDEX, --classIndex CLASSINDEX: 모든 Android API 클래스가 포함된 TXT 파일입니다. 기본값: info/class_index.txt-SC SYSTEMCOMMANDSINDEX, --systemCommandsIndex SYSTEMCOMMANDSINDEX: 모든 시스템 명령이 포함된 TXT 파일입니다. 기본값: info/system_commands.txt-C CLASSINDEX, --classIndex CLASSINDEX: 모든 Android API 클래스가 포함된 TXT 파일입니다. 기본값: info/class_index.txt-mg MONGODBURI, --mongodbURI MONGODBURI: 생성된 보고서를 MongoDB 데이터베이스로 내보냅니다. localhost:27017 형식의 연결 주소가 필요합니다.-csv EXPORTCSV, --cexportCSV EXPORTCSV: 생성된 보고서를 CSV 파일로 내보냅니다. 정적 특징만 포함됩니다.--color: 메시지 출력 시 색상을 허용합니다.--no-color: 메시지 출력 시 색상을 사용하지 않습니다.