
Paper : https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7965248
DroidBot : 안드로이드 앱을 자동으로 테스트하기 위해 사용되는 프로그램
(안드로이드 앱의 동작을 테스트하고, 오류를 찾고, 성능을 분석하는데 사용되고 있음)
어떤 안드로이드 앱이든 관계없이 UI-guided Test input 을 생성할 수 있음
App instrumentation이 필요 없음
Android-based 시스템, Customize sandboxes, Commodity device에 모두 적용 가능함
UI-guided Test input
사용자 인터페이스(UI)를 기반으로 Test input을 자동으로 생성하여 애플리케이션을 테스트하는 방법
- 애플리케이션의 품질 보증을 할 수 있음
- Test Coverage를 제공할 수 있음
App instrumentation
애플리케이션의 동작을 모니터링하고 분석하기 위해 애플리케이션 코드에 추가되는 코드나 도구
- 안드로이드 환경에서는 주로 테스트 자동화 및 성능 분석을 위해 사용됨
Sandboxes : 가상화 프로그램
Commodity Device : 특정 task를 수행하기 위해 만들어진 장치
DroidBot의 필요성
안드로이드 앱을 자동으로 테스트할 수 있음
어떤 안드로이드 앱이든 가능함
Test input에 대한 effectiveness를 판단할 수 있음
(암호화된 앱도 test coverage를 계산할 수 있음)
EMMA)는 암호화된 앱에 접근할 수 없었음Test Coverage
프로그램 검사할 때 사용하는 지표
- 명령을 준 횟수에 비해 얼마나 명령을 실행했는지를 판단함
Test Input
테스트를 수행하기 위해 사용되는 입력 데이터나 시나리오
- DroidBot은 여러가지 test input을 생성하여 다양한 시나리오에서 앱을 실행하고, 앱의 동작을 검사함
Call stack trace
프로그램 실행 중 호출되는 모든 함수들을 기록한 것들
- 코드가 어떤 경로를 통해 실행됐는지, 어떤 함수가 호출됐고, 어떤 함수가 반환됐는지 등을 추적해줌
- 특히 예외나 오류가 발생했을 때, 해당 오류가 발생한 위치와 그 전에 호출된 함수들의 정보를 제공해줘서 디버깅에 유용함

DroidBot이 디바이스 내에서 앱을 테스트하기 위해, ADB에 연결된 디바이스가 필요함
ADB (Android Debug Bridge)
안드로이드 디바이스와 컴퓨터를 연결해서 명령을 전달하고, 디바이스를 제어할 수 있는 도구
- 디바이스를 원격 제어함
- 디버깅할 때 꼭 필요함
어떤 종류의 Android Device든 DroidBot와 연결되도록 하는 장치
Test 환경과 Test 알고리즘을 이어줌
쉽고 간단한 API를 통해 사용자에게 알고리즘을 제공함
AUT (App Under Test)
테스트 중인 어플리케이션
- QA(품질 관리)에서 많이 사용됨
Adapter가 제공해주는 device와 app information을 받아서 test input을 생성하고 Adapter에게 다시 전달해줌
State Transition Graph를 이용해서 test input을 생성함
Node(노드) : 디바이스 상태Edge(엣지) : state transition을 통해 발생된 test inputDFS 알고리즘을 사용함
State Transition Graph
시스템의 상태(node)와 상태 간 전이(edge)를 나타내는 그래프
- 시스템의 동작을 시각화해줌
디바이스에 내장되어있는 Android Debugging/Testing Utilities를 사용해서 device/app information을 얻기 때문에 프로그램이 가벼움
[ Information from Device ]
1. GUI information
DroidBot이 UI Screenshot을 녹화함
2. Process information
DroidBot이 system-level process status와 app-level process status를 모니터링함
system-level process status : 운영체제 전체에서 실행 중인 모든 프로세스의 상태 $ ps
리눅스 시스템에서 현재 실행 중인 프로세스의 상태를 표시하는 데 사용되는 명령어
app-level process status : 특정 애플리케이션 내에서 실행되는 프로세스 및 스레드의 상태 $ adb shell dumpsys
안드로이드 디버깅 및 시스템 정보를 추출하기 위해 사용되는 명령어
3. Logs
test input으로 발생되는 trace나 앱에서 제공하는 log를 기록함
$ logcat
안드로이드 운영체제에서 로그 메시지를 출력하는 명령어
안드로이드 시스템 및 애플리케이션의 로그 메시지를 실시간으로 확인하거나 파일로 저장할 수 있게 해줌
SDK
SDK 정리글
UI Automator
안드로이드 앱과 사용자 UI를 자동으로 테스트할 수 있는 framework
- Android SDK에 있음
[ State Transition Model flow chart]
이걸 참고해서 DroidBot을 설계함

이 그림 속 State Transition Graph 와 같이 DroidBot은 runtime동안 그때 그때마다(on-the-fly) State Transition Graph 에 새로운 node와 edge를 추가하고 모니터링하면서 최적의 test input을 생성할 수 있도록 generation 알고리즘 모델을 업데이트함
Node(노드) : 디바이스의 state를 나타냄
Edge(엣지) : 두 노드 간에서 state transition이 일어날 때 생기는 test input event를 나타냄
따라서, DroidBot은
Underlying state comparison Algorithm
두 개 이상의 시스템 상태나 객체의 내부 상태를 비교하여 일치하는지, 유사한지, 또는 특정 기준에 따라 다른지를 평가하는 알고리즘
- Content-based comparison : 두 객체의 외형적 특성이나 메타데이터가 아닌, 그 내부의 실제 데이터와 구조를 비교하는 방법
(DroidBot은 이 방법을 사용해서 UI content가 다른 노드는 다른 노드 라고 판단하고 있음)
Source code와 app instrumentation 없이 Test Input의 effectiveness를 판단할 수 있음
Method tracing : Android official profiling tool을 이용해서 각 test input에 method trace를 찍어낼 수 있음
Sensitive behavior monitoring : Sensitive behavior가 얼마나 발생했느냐에 따라서 test input의 effectiveness를 판단할 수 있음
Method tracing 은 거의 모든 디바이스와 앱에서 사용 가능하지만, Sensitive behavior monitoring 은 특정 sandbox에서 작동하는 앱에만 적용 가능함
하지만! 악성 소프트웨어를 분석할 땐, Sensitive behavior monitoring 가 더 유용함
두 측정 기법을 이용해서 모든 앱에 대해 이 test input이 얼마나 effectiveness한지 정량화된 평가 지표를 제공할 수는 없지만, 같은 앱 내에서 각 test case들이 얼마나 effectiveness한 지는 판단해줄 수 있음
Black-box testing
소프트웨어 테스트 방법론 중 하나로, 테스트 대상 시스템의 내부 구조나 동작 원리를 모른 채, 외부에서 주어진 입력과 출력만을 가지고 테스트하는 기법
- 내부 구현에 대한 지식 없이 시스템이 올바르게 동작하는지 확인함
Method trace
애플리케이션의 성능을 분석하기 위해 메서드 호출의 순서, 빈도, 실행 시간을 기록하는 기법
(이 기법을 이용하면, 애플리케이션 성능의 bottleneck을 찾고 최적화할 수 있음)
- app method : 애플리케이션 코드에서 정의되고 실행되는 메서드
(개발자가 작성한 사용자 정의 메서드나 라이브러리에서 호출된 메서드 포함)- system method : 운영체제나 런타임 환경에서 제공하는 메서드
(안드로이드 OS나 자바 런타임 라이브러리의 일부로, 애플리케이션이 시스템 리소스나 서비스를 사용할 때 호출됨)- method coverage : 테스트가 소스 코드 내의 메서드들을 얼마나 커버했는지 평가하는데 사용됨
(코드 품질을 보장하고, 테스트의 철저함을 측정하는 중요한 지표)
Malware Anaylsis
악성 소프트웨어 분석
- sensitive behaviors : 시스템이나 사용자에게 잠재적으로 해를 끼칠 수 있는 악성 소프트웨어의 행동을 의미함
(시스템의 보안과 개인 정보 보호를 위협할 수 있는 것들)
DroidBot을 이용하면 개발한 앱을 단시간에 다양한 디바이스 내에서 호환 가능한지 실험해볼 수 있음
DroidBot을 이용해서 Malware Analysis(악성 소프트웨어 분석)을 할 수 있음
Code : https://github.com/honeynet/droidbot
Demo : https://www.youtube.com/watch?v=jtvXZzeTbVE
- DroidBot을 이용해 최적의 UTG를 찾을 수 있음
- DroidBot을 이용해 LAM을 학습하기 위한 UI Transition 데이터를 구축할 수 있음
- AutoDroid를 이해하기 위한 선행 논문