SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
ADB Backup 관련 연구
2014. 11. 15. 3분기 NewHeart 내부 세미나
speaker. roland
“때론 진지하게..”
목차
• ADB 란?
• ADB Backup 명령과 옵션
• 프로젝트 진행 동기
• 프로젝트 목표 설정과 접근 방법
• ADB Backup 의 대략적인 매커니즘
• 주요 소스코드 설명
• Android Framework 보안 기제 : @hide annotation
• 향후 연구 발전 방향
ADB 란?
• Android Debug Bridge : 안드로이드 플랫폼이 설치된
기기(target)과 PC(host)가 target의 디버깅을 위해 PC
와 연결되도록 지원되는 연결 방법.
• target이 “USB Debugging”이 활성화 되어있어야 함
• host에서 ADB 실행파일을 실행하여 target 에 연결할 수
있음
ADB Backup 명령과 옵션
• ADB Backup : ADB의 명령 중에 하나. 설치된 각 앱의
내부 저장소 데이터를 백업 가능
• 앱 패키지 파일(.apk)과 /data/data/<package name>/
{files, databases, shared_prefs 등}/* 을 백업 가능
• 기본적으로 backup.ab 라는 파일로 출력됨
프로젝트 진행 동기
• “adb shell id” => shell
• “adb shell ps | grep /sbin/adbd” => USER : shell
• shell 권한으로 다른 앱들의 내부 저장소 데이터를 읽을 수
있다?
• (참조) 원래는 어떤 앱이 다른 앱의 내부 저장소에 접근하
는 것은 불가능하며, 이는 앱마다 고유한 권한이 있기때문
• android 는 오픈 소스이기 때문에 화이트박스 분석 가능
프로젝트 목표 설정과 접근 방법
• 프로젝트 목표 1
• 내부 저장소 데이터들을 압축해서 해커 측으로 주기적
으로 전송
• 프로젝트 목표 2
• allowBackup 속성을 우회하여, backup 을 차단한 앱
들에 대한 내부 저장소 데이터들도 강제로 백업
프로젝트 목표 설정과 접근 방법
• 접근 방법론
• host의 adb 실행파일을 분석하여 명령 전달 체계 파악
• target의 /sbin/adbd 를 분석하여 명령 처리 체계 파악
• allowBackup 을 비교하는 루틴 <= break point 1
• allowBackup 비교 이후에 프로그래밍 가능한 부분?
ADB Backup 의 대략적인 매커니즘
• target의 “USB Debugging” 활성화
• /sbin/adbd 대몬 시작
• host의 adb 실행파일을 이용한 target과의 연결
• USB or TCP/IP Socket을 사용하여, 명령 프로토콜에
맞춰 응답 요청. 이에 따른 응답을 host로 반환.
주요 소스코드 설명
platform/system/core/adb/Android.mk
주요 소스코드 설명
platform/system/core/adb/commandline.c
주요 소스코드 설명
platform/system/core/adb/services.c
주요 소스코드 설명(부연)
1. 위 코드는 sockets.c 에서 아래와 같이 호출됨.
asocket *create_local_service_socket(const char *name)
1 fd = service_to_fd(name);
2 if(fd < 0) return 0;
3
4 s = create_local_socket(fd);
5 D("LS(%d): bound to '%s' via %dn", s->id, name, fd);
2. 위 코드는 adbd 내 패킷 핸들러(handle_packet)의 아래 코드로 호출됨.
void handle_packet(apacket *p, atransport *t)
1 case A_OPEN: /* OPEN(local-id, 0, "destination") */
2 if (t->online && p->msg.arg0 != 0 && p->msg.arg1 == 0) {
3 char *name = (char*) p->data;
4 name[p->msg.data_length > 0 ? p->msg.data_length - 1 : 0] = 0;
5 s = create_local_service_socket(name);
6 if(s == 0) {
7 send_close(0, p->msg.arg0, t);
8 } else {
9 s->peer = create_remote_socket(p->msg.arg0, t);
10 s->peer->peer = s;
11 send_ready(s->id, s->peer->id, t);
12 s->ready(s);
13 }
14 }
15 break;
16
3. 쭉 타고 올라가면 결국, main에서 adb_main에 init_transport_registration 함수가 호출되면서 일부로 패킷핸들러로 등록됨.
주요 소스코드 설명
• com.android.commands.bu.Backup 가 main class
• Abstract class, Interface 를 통한 구현이 많아서
GrepCode 사이트를 적극적으로 활용함.
주요 소스코드 설명
• Transaction?
A Component
mB.transact(TRANS_ACT);
B Component
onTransact( handle{…} )
주요 소스코드 설명
• allowBackup 속성을 비교하는 부분 발견
• 이 후에 진행될 코드에 대해 재구성을 하여, 어플리케이
션화 하면 됨
@hide annotation
@hide 는 매우 중요한 의미를 갖고있다.
이것은 SDK안에서 public API들이 외부로 공개되지 않
게끔 표시하는데 쓰인다.
이것은 안드로이드 개발팀에게 패키지 내에서는 사용가
능하게 하고 어플리케이션에는 사용할 수 없게하는 장
치이다.@hide로 표시된 API들은 우리에게는 private
으로 여겨진다.
@hide annotation
향후 연구 발전 방향
• allowBackup 속성 비교 후 로직을 재구성하려고 하는데,
구현해야할 양이 불가능할 정도로 많아 보임
• JNI는 모든 어플리케이션이 가져다 쓸 수 있다는 점을
이용. (*.so 공유 라이브러리이기 때문)
• 구현의 안정성과 보안성을 모두 배제하고 재구성하면
구현해야 할 양도 많이 줄 것이라 판단됨
Thank You!
(Q&A)

Weitere ähnliche Inhalte

Was ist angesagt?

Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3성일 한
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Circulus
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1성일 한
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Circulus
 
아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장Woo Yeong Choi
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2성일 한
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 

Was ist angesagt? (16)

Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
 
Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초Startup JavaScript 7 - Node.JS 기초
Startup JavaScript 7 - Node.JS 기초
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Restful API guide
Restful API guideRestful API guide
Restful API guide
 
Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1Laravel 로 배우는 서버사이드 #1
Laravel 로 배우는 서버사이드 #1
 
Ninja
NinjaNinja
Ninja
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신Startup JavaScript 9 - Socket.IO 실시간 통신
Startup JavaScript 9 - Socket.IO 실시간 통신
 
Node.js intro
Node.js introNode.js intro
Node.js intro
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 

Andere mochten auch

Defining Data Protection in the Cloud 디지탈링스
Defining Data Protection in the Cloud 디지탈링스Defining Data Protection in the Cloud 디지탈링스
Defining Data Protection in the Cloud 디지탈링스FaclconStorKR
 
Enterprise Data Privacy Quiz
Enterprise Data Privacy QuizEnterprise Data Privacy Quiz
Enterprise Data Privacy QuizDruva
 
Speed matters, So why is your site so slow?
Speed matters, So why is your site so slow?Speed matters, So why is your site so slow?
Speed matters, So why is your site so slow?Andy Davies
 
린스타트업 이해와 Case study(Lean Startup and Case Study)
린스타트업 이해와 Case study(Lean Startup and Case Study)린스타트업 이해와 Case study(Lean Startup and Case Study)
린스타트업 이해와 Case study(Lean Startup and Case Study)Matthew Lee
 
Elephant in the room: A DBA's Guide to Hadoop
Elephant in the room: A DBA's Guide to HadoopElephant in the room: A DBA's Guide to Hadoop
Elephant in the room: A DBA's Guide to HadoopStuart Ainsworth
 
2014 competition entry_presentation_template_v1
2014 competition entry_presentation_template_v12014 competition entry_presentation_template_v1
2014 competition entry_presentation_template_v1c_liberty
 
Squadre beach volley
Squadre beach volleySquadre beach volley
Squadre beach volleyPaolo Monti
 
The Role of Health Research Wales in supporting Industry Research in Betsi Ca...
The Role of Health Research Wales in supporting Industry Research in Betsi Ca...The Role of Health Research Wales in supporting Industry Research in Betsi Ca...
The Role of Health Research Wales in supporting Industry Research in Betsi Ca...Health and Care Research Wales
 
I os 6 iphone game
I os 6 iphone   gameI os 6 iphone   game
I os 6 iphone gamec_liberty
 
Functional programming
Functional programmingFunctional programming
Functional programmingNewHeart
 
"Handbook of Independent Journalism" Summary
"Handbook of Independent Journalism" Summary"Handbook of Independent Journalism" Summary
"Handbook of Independent Journalism" SummaryHuyHuang
 
Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)yeisonarley17
 

Andere mochten auch (16)

Defining Data Protection in the Cloud 디지탈링스
Defining Data Protection in the Cloud 디지탈링스Defining Data Protection in the Cloud 디지탈링스
Defining Data Protection in the Cloud 디지탈링스
 
랜섬웨어
랜섬웨어랜섬웨어
랜섬웨어
 
Enterprise Data Privacy Quiz
Enterprise Data Privacy QuizEnterprise Data Privacy Quiz
Enterprise Data Privacy Quiz
 
Speed matters, So why is your site so slow?
Speed matters, So why is your site so slow?Speed matters, So why is your site so slow?
Speed matters, So why is your site so slow?
 
린스타트업 이해와 Case study(Lean Startup and Case Study)
린스타트업 이해와 Case study(Lean Startup and Case Study)린스타트업 이해와 Case study(Lean Startup and Case Study)
린스타트업 이해와 Case study(Lean Startup and Case Study)
 
Elephant in the room: A DBA's Guide to Hadoop
Elephant in the room: A DBA's Guide to HadoopElephant in the room: A DBA's Guide to Hadoop
Elephant in the room: A DBA's Guide to Hadoop
 
2014 competition entry_presentation_template_v1
2014 competition entry_presentation_template_v12014 competition entry_presentation_template_v1
2014 competition entry_presentation_template_v1
 
Bulungi Creative
Bulungi CreativeBulungi Creative
Bulungi Creative
 
Squadre beach volley
Squadre beach volleySquadre beach volley
Squadre beach volley
 
The Role of Health Research Wales in supporting Industry Research in Betsi Ca...
The Role of Health Research Wales in supporting Industry Research in Betsi Ca...The Role of Health Research Wales in supporting Industry Research in Betsi Ca...
The Role of Health Research Wales in supporting Industry Research in Betsi Ca...
 
I os 6 iphone game
I os 6 iphone   gameI os 6 iphone   game
I os 6 iphone game
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
Bulungi Creative
Bulungi CreativeBulungi Creative
Bulungi Creative
 
"Handbook of Independent Journalism" Summary
"Handbook of Independent Journalism" Summary"Handbook of Independent Journalism" Summary
"Handbook of Independent Journalism" Summary
 
Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)Taller+de+conversiones+bd+db (1)
Taller+de+conversiones+bd+db (1)
 
bulungi creative
bulungi creativebulungi creative
bulungi creative
 

Ähnlich wie ADB Backup 관련 연구

효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축guest0ad316e
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101INSIGHT FORENSIC
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Samsung Electronics
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012Chanho Song
 
Tools in android sdk
Tools in android sdkTools in android sdk
Tools in android sdkMinchul Jung
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014Gruter
 
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템GangSeok Lee
 
Mago3 d 워크샵
Mago3 d 워크샵Mago3 d 워크샵
Mago3 d 워크샵정대 천
 
mago3D 기술 워크샵 자료(한국어)
mago3D  기술 워크샵 자료(한국어)mago3D  기술 워크샵 자료(한국어)
mago3D 기술 워크샵 자료(한국어)SANGHEE SHIN
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리민기 박
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cliChoonghyun Yang
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처Sunggon Song
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기hanbeom Park
 

Ähnlich wie ADB Backup 관련 연구 (20)

효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
 
Tools in android sdk
Tools in android sdkTools in android sdk
Tools in android sdk
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014
 
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
 
Mago3 d 워크샵
Mago3 d 워크샵Mago3 d 워크샵
Mago3 d 워크샵
 
mago3D 기술 워크샵 자료(한국어)
mago3D  기술 워크샵 자료(한국어)mago3D  기술 워크샵 자료(한국어)
mago3D 기술 워크샵 자료(한국어)
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 
Ffmpeg for android
Ffmpeg for androidFfmpeg for android
Ffmpeg for android
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리Pyspark Demo1,Demo2 정리
Pyspark Demo1,Demo2 정리
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
Spring boot 5장 cli
Spring boot 5장 cliSpring boot 5장 cli
Spring boot 5장 cli
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
7가지 동시성 모델 람다아키텍처
7가지 동시성 모델  람다아키텍처7가지 동시성 모델  람다아키텍처
7가지 동시성 모델 람다아키텍처
 
Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기Android Native Module 안정적으로 개발하기
Android Native Module 안정적으로 개발하기
 

ADB Backup 관련 연구

  • 1. ADB Backup 관련 연구 2014. 11. 15. 3분기 NewHeart 내부 세미나 speaker. roland “때론 진지하게..”
  • 2. 목차 • ADB 란? • ADB Backup 명령과 옵션 • 프로젝트 진행 동기 • 프로젝트 목표 설정과 접근 방법 • ADB Backup 의 대략적인 매커니즘 • 주요 소스코드 설명 • Android Framework 보안 기제 : @hide annotation • 향후 연구 발전 방향
  • 3. ADB 란? • Android Debug Bridge : 안드로이드 플랫폼이 설치된 기기(target)과 PC(host)가 target의 디버깅을 위해 PC 와 연결되도록 지원되는 연결 방법. • target이 “USB Debugging”이 활성화 되어있어야 함 • host에서 ADB 실행파일을 실행하여 target 에 연결할 수 있음
  • 4. ADB Backup 명령과 옵션 • ADB Backup : ADB의 명령 중에 하나. 설치된 각 앱의 내부 저장소 데이터를 백업 가능 • 앱 패키지 파일(.apk)과 /data/data/<package name>/ {files, databases, shared_prefs 등}/* 을 백업 가능 • 기본적으로 backup.ab 라는 파일로 출력됨
  • 5. 프로젝트 진행 동기 • “adb shell id” => shell • “adb shell ps | grep /sbin/adbd” => USER : shell • shell 권한으로 다른 앱들의 내부 저장소 데이터를 읽을 수 있다? • (참조) 원래는 어떤 앱이 다른 앱의 내부 저장소에 접근하 는 것은 불가능하며, 이는 앱마다 고유한 권한이 있기때문 • android 는 오픈 소스이기 때문에 화이트박스 분석 가능
  • 6. 프로젝트 목표 설정과 접근 방법 • 프로젝트 목표 1 • 내부 저장소 데이터들을 압축해서 해커 측으로 주기적 으로 전송 • 프로젝트 목표 2 • allowBackup 속성을 우회하여, backup 을 차단한 앱 들에 대한 내부 저장소 데이터들도 강제로 백업
  • 7. 프로젝트 목표 설정과 접근 방법 • 접근 방법론 • host의 adb 실행파일을 분석하여 명령 전달 체계 파악 • target의 /sbin/adbd 를 분석하여 명령 처리 체계 파악 • allowBackup 을 비교하는 루틴 <= break point 1 • allowBackup 비교 이후에 프로그래밍 가능한 부분?
  • 8. ADB Backup 의 대략적인 매커니즘 • target의 “USB Debugging” 활성화 • /sbin/adbd 대몬 시작 • host의 adb 실행파일을 이용한 target과의 연결 • USB or TCP/IP Socket을 사용하여, 명령 프로토콜에 맞춰 응답 요청. 이에 따른 응답을 host로 반환.
  • 12. 주요 소스코드 설명(부연) 1. 위 코드는 sockets.c 에서 아래와 같이 호출됨. asocket *create_local_service_socket(const char *name) 1 fd = service_to_fd(name); 2 if(fd < 0) return 0; 3 4 s = create_local_socket(fd); 5 D("LS(%d): bound to '%s' via %dn", s->id, name, fd); 2. 위 코드는 adbd 내 패킷 핸들러(handle_packet)의 아래 코드로 호출됨. void handle_packet(apacket *p, atransport *t) 1 case A_OPEN: /* OPEN(local-id, 0, "destination") */ 2 if (t->online && p->msg.arg0 != 0 && p->msg.arg1 == 0) { 3 char *name = (char*) p->data; 4 name[p->msg.data_length > 0 ? p->msg.data_length - 1 : 0] = 0; 5 s = create_local_service_socket(name); 6 if(s == 0) { 7 send_close(0, p->msg.arg0, t); 8 } else { 9 s->peer = create_remote_socket(p->msg.arg0, t); 10 s->peer->peer = s; 11 send_ready(s->id, s->peer->id, t); 12 s->ready(s); 13 } 14 } 15 break; 16 3. 쭉 타고 올라가면 결국, main에서 adb_main에 init_transport_registration 함수가 호출되면서 일부로 패킷핸들러로 등록됨.
  • 13. 주요 소스코드 설명 • com.android.commands.bu.Backup 가 main class • Abstract class, Interface 를 통한 구현이 많아서 GrepCode 사이트를 적극적으로 활용함.
  • 14. 주요 소스코드 설명 • Transaction? A Component mB.transact(TRANS_ACT); B Component onTransact( handle{…} )
  • 15. 주요 소스코드 설명 • allowBackup 속성을 비교하는 부분 발견 • 이 후에 진행될 코드에 대해 재구성을 하여, 어플리케이 션화 하면 됨
  • 16. @hide annotation @hide 는 매우 중요한 의미를 갖고있다. 이것은 SDK안에서 public API들이 외부로 공개되지 않 게끔 표시하는데 쓰인다. 이것은 안드로이드 개발팀에게 패키지 내에서는 사용가 능하게 하고 어플리케이션에는 사용할 수 없게하는 장 치이다.@hide로 표시된 API들은 우리에게는 private 으로 여겨진다.
  • 18. 향후 연구 발전 방향 • allowBackup 속성 비교 후 로직을 재구성하려고 하는데, 구현해야할 양이 불가능할 정도로 많아 보임 • JNI는 모든 어플리케이션이 가져다 쓸 수 있다는 점을 이용. (*.so 공유 라이브러리이기 때문) • 구현의 안정성과 보안성을 모두 배제하고 재구성하면 구현해야 할 양도 많이 줄 것이라 판단됨