SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Desarrollo seguro de aplicaciones
C/C++ en Android con NDK
IES Gran Capitán - 26 Enero 2016
Nacho Álvarez
@neonigmacdb
✉ neonigma@gmail.com
http://www.nacho-alvarez.es
Acerca de mí
● Ingeniero en Informática por la UCO
● Trayectoria profesional:
○ Soporte Servicio Informática UCO
○ Desarrollo Web
○ Desarrollo / Integración distribuciones GNU/Linux
○ Android mobile + backend developer (WUL4)
○ Actualmente: Área de Innovación (Redsys)
2/36
Acerca de mí
● Involucrado en la Innovación de soluciones
de medios de pago
3/36
Eventos
● GDG Córdoba
https://www.facebook.com/GDGCordobaESP/
● Hack&Beers Córdoba
https://twitter.com/hackandbeers
● BetaBeers Córdoba
https://twitter.com/betabeersODB
● Codemotion Madrid
https://www.facebook.com/Codemotion-Madrid-505998872792272/
● FOSDEM (Free and Open Source Software Developers’ European Meeting)
https://fosdem.org 4/36
Índice
1) Estructura de una app Android
2) Introducción al NDK
3) Nuestro primer programa con NDK
4) Seguridad en aplicaciones móviles
a) Hacking app Android
b) Hacking app nativa
5/36
Estructura de app Android
6/36
Tutoriales Android
● http://www.sgoliver.net/blog/curso-de-programacion-and
roid/indice-de-contenidos/
● https://github.com/sgolivernet/curso-android-src
● https://github.com/sgolivernet/curso-android-src-as
7/36
Introducción al NDK
● Conjunto de herramientas que permiten incorporar
código nativo (C/C++) en aplicaciones Android.
● Con NDK generas librerías binarias para cada
arquitectura de procesador (arm, armv7, x86, etc)
● Las librerías binarias se pueden invocar desde Java por
medio de JNI (Java Native Interface).
8/36
¿Por qué usar NDK?
9/36
Estructura de app NDK
10/36
Nuestra primera app NDK
public class AndroidActivity extends Activity {
static {
System.loadLibrary("mixed_sample");
}
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
String greeting = SayHello("neonigma");
Saludo saludo = new Saludo(greeting);
Saludar.enviarSaludo(context, saludo);
}
public native String SayHello(String name);
}
src/main/java/blog/neonigma/AndroidActivity.java
11/36
Nuestra primera app NDK
public class Saludo {
private String mensajeSaludo;
public Saludo(String mensajeSaludo) {
this.mensajeSaludo = mensajeSaludo;
}
public String getMensajeSaludo() {
return mensajeSaludo;
}
}
src/main/java/blog/neonigma/Saludo.java
12/36
Nuestra primera app NDK
public class Saludar {
public static void enviarSaludo(Context context, Saludo saludo) {
Toast.makeText(context, saludo.getMensajeSaludo(), Toast.LENGTH_LONG).show();
}
}
src/main/java/blog/neonigma/Saludar.java
13/36
Nuestra primera app NDK
#include <jni.h>
#include <iostream>
#include <string>
#include <stdexcept>
using namespace std;
extern "C"
{
JNIEXPORT jstring JNICALL Java_blog_neonigma_AndroidActivity_SayHello(JNIEnv *env, jobject thiz, jstring name)
{
src/main/jni/code.cpp
14/36
Nuestra primera app NDK
std::string variableImportante = "3.14";
try
{
const char *myName = env->GetStringUTFChars(name, 0);
std::string nameCPP(myName);
nameCPP = "Hello: " + nameCPP;
return env->NewStringUTF(nameCPP.c_str());
}
catch (exception &ex)
{
const char *error = "Failed";
return env->NewStringUTF(error);
}
}
}
src/main/jni/code.cpp
15/36
Nuestra primera app NDK
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 19
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "src.blog.neonigma"
minSdkVersion.apiLevel = 17
targetSdkVersion.apiLevel = 19
versionCode = 1
versionName = "1.0"
}
}
build.gradle
16/36
Nuestra primera app NDK
android.ndk {
moduleName = "mixed_sample"
stl = "stlport_static"
CFlags.addAll("-fexceptions")
cppFlags.addAll("-fexceptions")
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file("proguard-rules.pro"))
}
}
}
build.gradle
17/36
Demo time!
18/36
Hacking app Android
● Una app Android se empaqueta dentro de un fichero APK
● Estos ficheros son solamente ficheros ZIP conteniendo
recursos y un archivo Dalvik Executable (.dex)
● Con las herramientas adecuadas, podemos extraer el código
Java incluido dentro del fichero .dex
● Elementos como los recursos gráficos y el fichero
AndroidManifest.xml no van ofuscados 19/36
Hacking app Android
Para extraer el código de la parte Java (no nativa)
● Paso 1: extraer .dex del APK
$ unzip program.apk classes.dex
Archive: program.apk
inflating: classes.dex
● Paso 2: utilizar dex2jar para convertir classes.dex a ficheros .class de Java
$ d2j-dex2jar.sh./classes.dex
dex2jar classes.dex -> ./classes-dex2jar.jar
● Paso 3: utilizamos el decompiler JD-GUI para extraer el código fuente
$ ./jd-gui classes.dex.dex2jar.jar
20/36
Hacking app Android
21/36
Hacking app Android
● Necesitamos ofuscación defensiva: Proguard /
Dexguard
● ProGuard optimiza, reduce y ofusca el código de
aplicaciones Android
● Solo funcionará cuando hagamos la exportación a APK
● Las reglas se escriben en fichero proguard-rules.pro 22/36
Hacking app Android
● Ejemplo proguard (identificar lo que se excluye):
-optimizations !code/simplification/arithmetic
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
23/36
Hacking app Android
No obstante, hay que ir
probando reglas de
ofuscación....
24/36
Desarrollo apps NDK
25/36
Hacking app nativa
● El código nativo se incluye dentro del apk como ficheros .so
● Este código está compilado y ensamblado contra una
arquitectura específica (ARM, x86, …)
● En teoría es difícil leer un fichero ensamblado, pero… hay
herramientas que ayudan: IDA como disassembler, apktool
para desempaquetado y reempaquetado, etc.
26/36
Hacking app nativa
27/36
Hacking app nativa
● Cosas que podemos hacer:
○ Ocultar nuestras funciones y variables de la tabla de
símbolos
○ Ofuscar el código, por ej. con O-LLVM
LOCAL_CFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden
Instructions Substitution: -mllvm -sub
Bogus Control Flow: -mllvm -bcf
Control Flow Flattening: -mllvm -fla
Functions annotations
28/36
Hacking app nativa
Sin ofuscación Con ofuscación 29/36
Caso práctico
Charlemos sobre un caso real...
30/36
Ejemplo
31/36
32/36
33/36
Ejemplo práctico
34/36
Ejemplo práctico
¡Nada de ser malvadou!
35/36
Referencias
● Curso de programación Android sgoliver
● Introducción al Desarrollo de NDK apps
http://es.slideshare.net/RevistaSG/introduccion-al-desarroll
o-de-ndk-apps-dev-day-4-woman-condesasama
● Conectar programas C/C++ con apps Android
http://www.nacho-alvarez.es/index.php/blog/2012/05/02/co
nectar-programas-cc-con-aplicaciones-android/
36/36

Mais conteúdo relacionado

Semelhante a Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK

Destripando y protegiendo aplicaciones android
Destripando y protegiendo aplicaciones androidDestripando y protegiendo aplicaciones android
Destripando y protegiendo aplicaciones androidSergio Arcos
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidAlberto Ruibal
 
Android apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktoolAndroid apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktoolSalvador Mendoza
 
Intel Android @ HackMTY
Intel Android @ HackMTYIntel Android @ HackMTY
Intel Android @ HackMTYSoftware Guru
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweetsJorge Soro
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndkBarcelona GTUG
 
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxLo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxSergio Antonio Ochoa Martinez
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaSoftware Guru
 
Primera App - Laboratorio Android
Primera App - Laboratorio AndroidPrimera App - Laboratorio Android
Primera App - Laboratorio AndroidGDG Cali
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicaciónJose Antonio Vacas
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de AndroidGDG Cali
 
Curso de programacion en android
Curso de programacion en androidCurso de programacion en android
Curso de programacion en androidEscurra Walter
 
La plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.orgLa plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.orgAntonio Cañas Vargas
 
Instalacion y configuracion de Android Studio
Instalacion y configuracion de Android StudioInstalacion y configuracion de Android Studio
Instalacion y configuracion de Android StudioJuan Vladimir
 

Semelhante a Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK (20)

Destripando y protegiendo aplicaciones android
Destripando y protegiendo aplicaciones androidDestripando y protegiendo aplicaciones android
Destripando y protegiendo aplicaciones android
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
Informe tecnología
Informe tecnologíaInforme tecnología
Informe tecnología
 
Android apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktoolAndroid apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktool
 
Adtg como realice el app en android - usmp
Adtg   como realice el app en android - usmpAdtg   como realice el app en android - usmp
Adtg como realice el app en android - usmp
 
Intel Android @ HackMTY
Intel Android @ HackMTYIntel Android @ HackMTY
Intel Android @ HackMTY
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweets
 
Android Pres3
Android Pres3Android Pres3
Android Pres3
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 
Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
 
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxLo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
 
Desarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache CordovaDesarrollo de apps móviles con Apache Cordova
Desarrollo de apps móviles con Apache Cordova
 
Primera App - Laboratorio Android
Primera App - Laboratorio AndroidPrimera App - Laboratorio Android
Primera App - Laboratorio Android
 
Android
AndroidAndroid
Android
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicación
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de Android
 
Curso de programacion en android
Curso de programacion en androidCurso de programacion en android
Curso de programacion en android
 
La plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.orgLa plataforma educativa libre OpenSWAD.org
La plataforma educativa libre OpenSWAD.org
 
Instalacion y configuracion de Android Studio
Instalacion y configuracion de Android StudioInstalacion y configuracion de Android Studio
Instalacion y configuracion de Android Studio
 

Mais de José Ignacio Álvarez Ruiz

Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)José Ignacio Álvarez Ruiz
 
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...José Ignacio Álvarez Ruiz
 
Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y AndroidSysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y AndroidJosé Ignacio Álvarez Ruiz
 
Sysmana 2017 monitorización de logs con el stack elk
Sysmana 2017   monitorización de logs con el stack elkSysmana 2017   monitorización de logs con el stack elk
Sysmana 2017 monitorización de logs con el stack elkJosé Ignacio Álvarez Ruiz
 
Sysmana 2017 metodologías gestión ágil de proyectos
Sysmana 2017   metodologías gestión ágil de proyectosSysmana 2017   metodologías gestión ágil de proyectos
Sysmana 2017 metodologías gestión ágil de proyectosJosé Ignacio Álvarez Ruiz
 
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFCCharla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFCJosé Ignacio Álvarez Ruiz
 
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)José Ignacio Álvarez Ruiz
 

Mais de José Ignacio Álvarez Ruiz (9)

Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
 
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
 
The blockchain disruption
The blockchain disruptionThe blockchain disruption
The blockchain disruption
 
Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y AndroidSysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android
 
Sysmana 2017 monitorización de logs con el stack elk
Sysmana 2017   monitorización de logs con el stack elkSysmana 2017   monitorización de logs con el stack elk
Sysmana 2017 monitorización de logs con el stack elk
 
Sysmana 2017 metodologías gestión ágil de proyectos
Sysmana 2017   metodologías gestión ágil de proyectosSysmana 2017   metodologías gestión ágil de proyectos
Sysmana 2017 metodologías gestión ágil de proyectos
 
Comunicación NFC entre Raspberry Pi y Android
Comunicación NFC entre Raspberry Pi y AndroidComunicación NFC entre Raspberry Pi y Android
Comunicación NFC entre Raspberry Pi y Android
 
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFCCharla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
 
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Último (13)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK

  • 1. Desarrollo seguro de aplicaciones C/C++ en Android con NDK IES Gran Capitán - 26 Enero 2016 Nacho Álvarez @neonigmacdb ✉ neonigma@gmail.com http://www.nacho-alvarez.es
  • 2. Acerca de mí ● Ingeniero en Informática por la UCO ● Trayectoria profesional: ○ Soporte Servicio Informática UCO ○ Desarrollo Web ○ Desarrollo / Integración distribuciones GNU/Linux ○ Android mobile + backend developer (WUL4) ○ Actualmente: Área de Innovación (Redsys) 2/36
  • 3. Acerca de mí ● Involucrado en la Innovación de soluciones de medios de pago 3/36
  • 4. Eventos ● GDG Córdoba https://www.facebook.com/GDGCordobaESP/ ● Hack&Beers Córdoba https://twitter.com/hackandbeers ● BetaBeers Córdoba https://twitter.com/betabeersODB ● Codemotion Madrid https://www.facebook.com/Codemotion-Madrid-505998872792272/ ● FOSDEM (Free and Open Source Software Developers’ European Meeting) https://fosdem.org 4/36
  • 5. Índice 1) Estructura de una app Android 2) Introducción al NDK 3) Nuestro primer programa con NDK 4) Seguridad en aplicaciones móviles a) Hacking app Android b) Hacking app nativa 5/36
  • 6. Estructura de app Android 6/36
  • 7. Tutoriales Android ● http://www.sgoliver.net/blog/curso-de-programacion-and roid/indice-de-contenidos/ ● https://github.com/sgolivernet/curso-android-src ● https://github.com/sgolivernet/curso-android-src-as 7/36
  • 8. Introducción al NDK ● Conjunto de herramientas que permiten incorporar código nativo (C/C++) en aplicaciones Android. ● Con NDK generas librerías binarias para cada arquitectura de procesador (arm, armv7, x86, etc) ● Las librerías binarias se pueden invocar desde Java por medio de JNI (Java Native Interface). 8/36
  • 9. ¿Por qué usar NDK? 9/36
  • 10. Estructura de app NDK 10/36
  • 11. Nuestra primera app NDK public class AndroidActivity extends Activity { static { System.loadLibrary("mixed_sample"); } private Context context; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); context = this; String greeting = SayHello("neonigma"); Saludo saludo = new Saludo(greeting); Saludar.enviarSaludo(context, saludo); } public native String SayHello(String name); } src/main/java/blog/neonigma/AndroidActivity.java 11/36
  • 12. Nuestra primera app NDK public class Saludo { private String mensajeSaludo; public Saludo(String mensajeSaludo) { this.mensajeSaludo = mensajeSaludo; } public String getMensajeSaludo() { return mensajeSaludo; } } src/main/java/blog/neonigma/Saludo.java 12/36
  • 13. Nuestra primera app NDK public class Saludar { public static void enviarSaludo(Context context, Saludo saludo) { Toast.makeText(context, saludo.getMensajeSaludo(), Toast.LENGTH_LONG).show(); } } src/main/java/blog/neonigma/Saludar.java 13/36
  • 14. Nuestra primera app NDK #include <jni.h> #include <iostream> #include <string> #include <stdexcept> using namespace std; extern "C" { JNIEXPORT jstring JNICALL Java_blog_neonigma_AndroidActivity_SayHello(JNIEnv *env, jobject thiz, jstring name) { src/main/jni/code.cpp 14/36
  • 15. Nuestra primera app NDK std::string variableImportante = "3.14"; try { const char *myName = env->GetStringUTFChars(name, 0); std::string nameCPP(myName); nameCPP = "Hello: " + nameCPP; return env->NewStringUTF(nameCPP.c_str()); } catch (exception &ex) { const char *error = "Failed"; return env->NewStringUTF(error); } } } src/main/jni/code.cpp 15/36
  • 16. Nuestra primera app NDK apply plugin: 'com.android.model.application' model { android { compileSdkVersion = 19 buildToolsVersion = "23.0.2" defaultConfig.with { applicationId = "src.blog.neonigma" minSdkVersion.apiLevel = 17 targetSdkVersion.apiLevel = 19 versionCode = 1 versionName = "1.0" } } build.gradle 16/36
  • 17. Nuestra primera app NDK android.ndk { moduleName = "mixed_sample" stl = "stlport_static" CFlags.addAll("-fexceptions") cppFlags.addAll("-fexceptions") } android.buildTypes { release { minifyEnabled = false proguardFiles.add(file("proguard-rules.pro")) } } } build.gradle 17/36
  • 19. Hacking app Android ● Una app Android se empaqueta dentro de un fichero APK ● Estos ficheros son solamente ficheros ZIP conteniendo recursos y un archivo Dalvik Executable (.dex) ● Con las herramientas adecuadas, podemos extraer el código Java incluido dentro del fichero .dex ● Elementos como los recursos gráficos y el fichero AndroidManifest.xml no van ofuscados 19/36
  • 20. Hacking app Android Para extraer el código de la parte Java (no nativa) ● Paso 1: extraer .dex del APK $ unzip program.apk classes.dex Archive: program.apk inflating: classes.dex ● Paso 2: utilizar dex2jar para convertir classes.dex a ficheros .class de Java $ d2j-dex2jar.sh./classes.dex dex2jar classes.dex -> ./classes-dex2jar.jar ● Paso 3: utilizamos el decompiler JD-GUI para extraer el código fuente $ ./jd-gui classes.dex.dex2jar.jar 20/36
  • 22. Hacking app Android ● Necesitamos ofuscación defensiva: Proguard / Dexguard ● ProGuard optimiza, reduce y ofusca el código de aplicaciones Android ● Solo funcionará cuando hagamos la exportación a APK ● Las reglas se escriben en fichero proguard-rules.pro 22/36
  • 23. Hacking app Android ● Ejemplo proguard (identificar lo que se excluye): -optimizations !code/simplification/arithmetic -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -keep public class * extends android.support.v4.app.Fragment -keepclasseswithmembernames,includedescriptorclasses class * { native <methods>; } 23/36
  • 24. Hacking app Android No obstante, hay que ir probando reglas de ofuscación.... 24/36
  • 26. Hacking app nativa ● El código nativo se incluye dentro del apk como ficheros .so ● Este código está compilado y ensamblado contra una arquitectura específica (ARM, x86, …) ● En teoría es difícil leer un fichero ensamblado, pero… hay herramientas que ayudan: IDA como disassembler, apktool para desempaquetado y reempaquetado, etc. 26/36
  • 28. Hacking app nativa ● Cosas que podemos hacer: ○ Ocultar nuestras funciones y variables de la tabla de símbolos ○ Ofuscar el código, por ej. con O-LLVM LOCAL_CFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden Instructions Substitution: -mllvm -sub Bogus Control Flow: -mllvm -bcf Control Flow Flattening: -mllvm -fla Functions annotations 28/36
  • 29. Hacking app nativa Sin ofuscación Con ofuscación 29/36
  • 30. Caso práctico Charlemos sobre un caso real... 30/36
  • 32. 32/36
  • 33. 33/36
  • 35. Ejemplo práctico ¡Nada de ser malvadou! 35/36
  • 36. Referencias ● Curso de programación Android sgoliver ● Introducción al Desarrollo de NDK apps http://es.slideshare.net/RevistaSG/introduccion-al-desarroll o-de-ndk-apps-dev-day-4-woman-condesasama ● Conectar programas C/C++ con apps Android http://www.nacho-alvarez.es/index.php/blog/2012/05/02/co nectar-programas-cc-con-aplicaciones-android/ 36/36