• Save

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Like this? Share it with your network

Share

Android Introduzione All Architettura Programmazione Sicurezza Serate A Tema @ serate a tema

  • 3,053 views
Uploaded on

 

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,053
On Slideshare
2,998
From Embeds
55
Number of Embeds
3

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 55

http://www.tanasi.it 50
http://www.slideshare.net 4
https://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.it Android Introduzione all’architettura, alla programmazione e alla sicurezza
  • 2. Fun & profit
    • Fun
      • Sviluppo applicazioni
      • 3. Invenzione di “nuove” applicazioni per soddisfare vecchie e nuove esigenze
      • 4. Poter soddisfare le proprie esigenze, personalizzazione
      • 5. Attività di ricerca
    • Profit
      • Vendita delle applicazioni
      • 6. Sviluppo applicazioni su commissione
      • 7. Vendita o abuso dei risultati di ricerca
  • 8. Devices
  • 9. Architettura
  • 10. Android
    • Software stack per device mobili
      • Sistema operativo
      • 11. Linux con kernel 2.6
      • 12. Driver per l'hardware (GPS, accelerometri, ..)
    • Middleware
      • Librerie
      • 13. Android runtime
      • 14. Application framework
    • Applicazioni
      • Native: telefono, contatti, browser, …
      • 15. Di terze parti
  • 16. Kernel
    • Linux kernel e driver che fanno da hardware abstraction layer
    • 17. Core system services per security, memory management, process management, network stack
  • 18. Librerie e runtime
    • Librerie (per la gran parte in linguaggio nativo) esposte attraverso l'application framework
    • 19. Android runtime: Dalvik Virtual Machine e sue librerie core
  • 20. Application framework
    • API ad alto livello
    • 21. Le applicazioni native Android e quelle di terze parti usano le stesse API
  • 22. Sequenza di avvio
    • Il bootloader carica il kernel
    • 23. Demoni per la gestione low level dell'hardware
    • 24. Zygote e Dalvik VM
    • 25. Il service manager viene avviato (binders e comunicazioni IPC)
    • 26. Altri manager
    • 27. App rimanenti
  • 28. ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 252 164 c0082240 0000ab0c S /init root 2 0 0 0 c0048eac 00000000 S kthreadd root 3 2 0 0 c003acf0 00000000 S ksoftirqd/0 root 4 2 0 0 c0045e5c 00000000 S events/0 root 5 2 0 0 c0045e5c 00000000 S khelper root 8 2 0 0 c0045e5c 00000000 S suspend/0 root 33 2 0 0 c0045e5c 00000000 S kblockd/0 root 36 2 0 0 c0045e5c 00000000 S cqueue/0 root 38 2 0 0 c0150c44 00000000 S kseriod root 75 2 0 0 c005bed0 00000000 S pdflush root 76 2 0 0 c005bed0 00000000 S pdflush root 77 2 0 0 c005f880 00000000 S kswapd0 root 78 2 0 0 c0045e5c 00000000 S aio/0 root 201 2 0 0 c014e2f4 00000000 S mtdblockd root 217 2 0 0 c0045e5c 00000000 S kmmcd root 231 2 0 0 c0045e5c 00000000 S rpciod/0 root 450 1 728 300 c00386a4 afe092ac S /system/bin/sh root 451 1 1256 96 ffffffff 0000ceb4 S /sbin/adbd root 452 1 2816 284 ffffffff afe08b9c S /system/bin/usbd root 453 1 636 216 c017c114 afe08e9c S /system/bin/debuggerd root 454 1 12576 584 ffffffff afe08b9c S /system/bin/rild root 455 1 56572 14616 c01dc388 afe083dc S zygote root 456 1 18528 2072 ffffffff afe0861c S /system/bin/runtime bluetooth 458 1 1200 760 c0082240 afe0947c S /system/bin/dbus-daemon root 467 455 95616 18728 ffffffff afe0861c S system_server app_4 503 455 74148 15340 ffffffff afe09604 S com.google.android.home phone 506 455 96528 19244 ffffffff afe09604 S com.google.android.phone app_2 522 455 73372 14704 ffffffff afe09604 S com.google.process.content app_1 805 455 91460 14296 ffffffff afe09604 S com.google.android.contacts root 1178 450 932 312 00000000 afe083dc R ps
  • 29. Dalvik Virtual Machine
    • Bytecode interpreter (no JIT)
      • Lente CPU (250-500 MHz), poca RAM (64MB)
      • 30. Senza swap
    • Register based
      • Alta densità semantica
      • 31. Istruzioni speciali
    • Ottimizzata per istanze multiple
    • 32. Ottimizzata per avere un memory footprint minimale
    • 33. Esegue file .dex su OS POSIX compliant
    • 34. Si appoggia al kernel per threading e memory management di basso livello
  • 35. Dalvik Executable Format
    • Riduzione delle dimensioni
    • 36. Sostanziale differenza semantica con il bytecode Java
    • 37. Nessuna compressione
      • Comunque minori di un JAR nel caso medio
      • 38. Vengono gestiti in modo efficace da mmap()
    • Dexdump, undx
    http://www.dalvikvm.com/ http://sites.google.com/site/io/dalvik-vm-internals
  • 39. Compilazione e building
    • Compilazione con il compilatore standard Java
    • 40. Conversion in .dex con l'utility dx
    • 41. Nel caso si usino IPC, processing AIDL
    • 42. Le risorse sono incluse nel package apk
  • 43. Sviluppo
  • 44. Android SDK
    • Android API
    • 45. Development tools
    • 46. Emulatore Android
    • 47. Dalvik Debug Monitoring Service (DDMS)
    • 48. Documentazione ed esempi
    http://developer.android.com/sdk/1.6_r1/index.html
  • 49. Native Development Kit (NDK)
    • Permettono l'utilizzo di componenti in codice nativo ( C o C++)
    • 50. Cross-toolchains (compilatori, linkers, etc..) per generare binari ARM
    • 51. Libc, libm, OpenGL ES 1.1, JNI interface, libz
    • 52. Non permette di creare applicazione native-only
    • 53. Il runtime applicativo rimane la Dalvik VM
    http://developer.android.com/sdk/ndk/1.6_r1/index.html
  • 54. Android Scripting Environment
    • Programmare in Python, Perlm, Jruby, BeanShell, Lua..
    • 55. Per casi particolare in cui bisogna adottare paradigmi di programmazione diversi da quelli imposti dall'SDK
    • 56. Accesso semplificato e non completo alle API
    • 57. Es: web server in 4 righe di python
    http://code.google.com/p/android-scripting/
  • 58. Development Tools
    • Eclipse Plugin: Andreoid Dev Tools
      • Compila e crea il pacchetto automaticamente
      • 59. Lancia l'emulatore in debugging mode
    • CLI: activityCreator.py
      • Genere la struttura del progetto
      • 60. Ant build.xml file
      • 61. IntelliJ project files
    • DroidDraw, SensorSimulator
  • 62. Esempio
  • 63. Anatomia di un'app
  • 64. Lego per costruzioni
    • Activity : Componente UI (tipicamente una schermata, presentation layer)
    • 65. Service : Task in background
    • 66. Content Provider : Gestisce e condivide dati tra applicazioni
    • 67. Intent : Messaggistica asincrona
    • 68. Intent filter : Dichiarazione XML dei messaggi che possono essere gestiti
    • 69. Broadcast Receiver : attende intents broadcast che corrispondono a certi criteri (Intent filter)
    • 70. Manifest : Proprietà dell'applicazione
  • 71. User interface
    • Composta da oggetti View e ViewGroup (vari tipi)
    • 72. Layout definito in file XML
    • 73. Stringhe memorizzate separatamente
    • 74. Sottoscrizione agli eventi dell'UI tramite listener o overriding callback
    • 75. Definizione dei menu e loro creazione automatica
    • 76. Notifiche
    • 77. Adapter per le viste dinamicamente
    • 78. Stili e temi
  • 79. Esempio <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:layout_width=&quot;fill_parent&quot; android:layout_height=&quot;fill_parent&quot; android:orientation=&quot;vertical&quot; > <TextView android:id=&quot;@+id/text&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:text=&quot;Hello, I am a TextView&quot; /> <Button android:id=&quot;@+id/button&quot; android:layout_width=&quot;wrap_content&quot; android:layout_height=&quot;wrap_content&quot; android:text=&quot;Hello, I am a Button&quot; /> </LinearLayout>
  • 80. Resource e asset
    • Generalmente sono elementi esterni referenziati dall'applicazione
    • 81. Immagini, audio, video, stringhe di testo, layout, temi
    • 82. Directory per resource (res/) e directory per asset (assets/)
    • 83. La differenza è nel metodo di accesso
    • 84. I18n
  • 85. Data Storage
    • Tecniche differenti per memorizzare dati
    • 86. Shared preferences : meccanismo per memorizzare strutture chiavi-valore
    • 87. SQLite : “DBMS relazionale” per memorizzare dati articolati
    • 88. Files : RW di file sulla memoria locale ed SD card
    • 89. Network : Utilizzando java.net.* e android.net.*
  • 90. Multimedia
    • Grafica 2D e grafica 3D con OpenGL ES API
    • 91. Offre funzioni built-in di encoding/decoding per alcuni media types
    • 92. MediaPlayer e MediaRecorder
    • 93. android.location e Google Maps library
    • 94. Accelerometro, bussola
  • 95. AndroidManifest.xml
    • Ogni applicazione deve avere un AndroidManifest.xml file
    • 96. Descrive l'applicazione:
      • Nome del package Java
      • 97. Descrive i suoi componenti
      • 98. Permessi richiesti dall'applicazione
      • 99. Permessi richiesti per interagire con i suoi componenti
      • 100. Opzionali informazioni per testing (profiling)
      • 101. Dipendenza dalla versione delle android API
      • 102. Librerie utilizzate
  • 103. Esempio di manifest <manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; package=&quot;org.sipdroid.sipua&quot; android:versionName=&quot;1.1.3 beta&quot; android:versionCode=&quot;32&quot;> <uses-sdk android:minSdkVersion=&quot;3&quot; /> <application android:icon=&quot;@drawable/icon64&quot; android:label=&quot;@string/app_name&quot;> <activity android:name=&quot;.ui.Sipdroid&quot; android:label=&quot;@string/app_name&quot; android:launchMode=&quot;singleInstance&quot; android:configChanges=&quot;orientation|keyboardHidden&quot;> <intent-filter> <action android:name=&quot;android.intent.action.MAIN&quot; /> <category android:name=&quot;android.intent.category.LAUNCHER&quot; /> </intent-filter> </activity> <receiver android:name=&quot;.ui.Caller&quot;/> <receiver android:name=&quot;.ui.Receiver&quot; android:enabled=&quot;true&quot;> <intent-filter> <action android:name=&quot;android.intent.action.BOOT_COMPLETED&quot; /> </intent-filter> </receiver> </application> <uses-permission android:name=&quot;android.permission.INTERNET&quot;></uses-permission>
  • 104. Life Cycle
    • Le applicazioni running sono gestite in una gerarchia:
      • foreground process (priorità critica)
      • 105. visible process (alta priorità)
      • 106. service process (bassa priorità)
      • 107. background process
      • 108. empty process
    • Le Activity sono mantenute in un activity stack (LIFO)
    • 109. Un activity ha tre stati: running o active, paused, stopped
  • 110. Life cycle in dettaglio http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle
  • 111. Pubblicare un'applicazione
    • Iscriversi al market come sviluppatore (25 € )
    • 112. Dare un numero di versione
    • 113. Firmare il pacchetto
    • 114. Pubblicare l'applicazione
    • 115. Google trattiene il 30% degli incassi
  • 116. Sicurezza
  • 117. Android Security Model
    • Ogni processo viene eseguito in una DVM separata
    • 118. File non condivisi tra applicazioni
    • 119. Linux + Android permission model
    • 120. UID e GID distinti assegnati all'installazione
    • 121. Stack address randomization
  • 122. Android Permissions
    • Limite alle funzionalità di un software: android.permission
    • 123. Granularità sulle azioni e sull'accesso ai dati
    • 124. Specificate nel file manifest
    <uses-permission android:name=&quot;android.permission.READ_CONTACTS&quot;> </uses-permission> <uses-permission android:name=&quot;android.permission.WRITE_CONTACTS&quot;> </uses-permission>
  • 125. Ma ...
    • Bypass memory protections
    • 126. Vunerabilità riscontrate
    • 127. La sandbox è abbastanza granulare per far girare applicazioni non trusted?
    • 128. Marketing profiling, E.T. chiama sempre casa
    • 129. Non conoscenza del funzionamento interno di un'applicazione (client HTTP o HTTPS?)
    • 130. Rootkit, managed code rootkit
    ??
  • 131. Conclusioni
  • 132. Conclusioni
    • L'architettura è disegnata pensando anche allo sviluppatore
    • 133. Lo sviluppo è semplice e veloce
    • 134. Sistemi di security granulari allo scopo di isolare le applicazioni in una sandbox
    • 135. Lo sviluppo può essere divertente e redditizio
    • 136. C'è ampio spazio per la ricerca
  • 137. Approfondimenti http://code.google.com/android/ http://developer.android.com/index.html http://source.android.com/ http://www.blackhat.com/presentations/bh-usa-09/BURNS/BHUSA09-Burns-AndroidSurgery-PAPER.pdf http://jon.oberheide.org/files/cansecwest09-android.pdf http://groups.google.com/group/android-internals
  • 138. Domande