23 juillet 2011

Reverse avec apktool

Si, pour vous instruire sur Android, vous avez regardé le contenu d’un fichier apk (qui est en fait un fichier zip) vous avez constaté que les fichiers texte, comme les xml, sont illisibles. Heureusement il y a apktool !

Apktool est une application open source, écrite en java, qui permet de faire du reverse engineering sur des applications Android (apk).

Attention son téléchargent se fait en deux temps :
  1. Le fichier java apktool.jar, le même quelle que soit la plateforme Win/Mac/Linux.
    Le nom de l’archive qui contient ce fichier est de la forme apktool<x.y.z>.tar.bz2
  2. Un script et  un binaire (dépendant de la plateforme) pour lancer l’exécution du jar.
    Le nom de l’archive qui contient ce fichier est de la forme apktool-install-<plateforme>-r<xx>-brut1.tar.bz2
On copy l’ensemble de ces fichiers dans le même répertoire. L’idéal est d'avoir ce répertoire dans le PATH
Sous Windows on a donc : apktool.jar + apktool.bat + aapt.exe

USAGE 
Ouvrir une console (boite dos) et taper ( sans oublier le 'd' )

apktool  d  \path\to\application.apk

Un répertoire avec le nom de l’application a été créé dans le repertoire courant. Il contient les fichiers en clair. Il ne vous reste plus qu'a explorer !...
(Pour plus de détails sur les paramètres taper juste : apktool)

Où est le code java ?
Les fichiers java sont présentés sous forme de fichiers "smali". Il s'agit du code assembleur utilisé par la machine virtuelle Dalvik.

Application utile:
Il existe des sites web qui vous proposent de créer enligne votre application Android (et iPhone). Les applications ainsi générées nécessitent des droits très surprenant sans rapport avec les besoins réel de l'application. Que contient le fichier .apk à la fin ? Grâce à apktools vous allez découvrir tout ce qui est ajouté (en cachette) à votre application (pub, appel de numéro, liens vers d'autre sites, player étrange, ect) et tout ce qui en fait n'est pas dans votre application mais sur des serveurs.
Donc, grâce à apktool, j'ai appris qu'il ne fallait surtout pas utiliser ces services : trop gratuits pour être honnêtes  !!
Pour aller plus loin...


16 juillet 2011

Bug du SDK r12 d'Android


Quand on utilise le SDK r12 pour Android et que l’on tente d’exécuter un programme Android depuis Eclipse on obtient cette erreur : 

[2011-07-10 21:00:51 - Emulator] invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.
[2011-07-10 21:00:51 - Emulator] Hint: use '@foo' to launch a virtual device named 'foo'.

Le Paramètre invalide Files\Android\android-sdk\tools/emulator-arm.exe est en fait la deuxième partie de C:\Program Files\Android\... coupé par l'espace. Le problème vient donc de l’espace dans le path du SDK: C:\Program Files\Android\android-sdk

Solution :

1) Ouvrir une boite dos et taper la commande 
dir /x \ 
pour déterminer le chemin au format dos du répertoire « \Program Files » 

>dir /x \ 

Répertoire de C:\
17/01/2011  22:45       0    AUTOEXEC.BAT
17/01/2011  22:45       0    CONFIG.SYS 
24/01/2011  10:44    <REP>   DOCUME~1     Documents and Settings
10/07/2011  10:54    <REP>   PROGRA~1     Program Files 
17/06/2011  02:07    <REP>                WINDOWS
Ici le nom dos est “PROGRA~1

2) Dans Eclipse cliquer dans le menu sur : Window > Preferences > Android
Dans le champ SDK Location remplacer \Program Files\ par \PROGRA~1\

10 juillet 2011

Android: Versions, Api, Noms

Il n’est pas toujours facile de se repérer entre les numéros de version d’Android, leur nom de code et le « Api Level ».
  • L’Api level est le seul qui techniquement à une influence.Si ce numéro ne change pas c’est qu’aucune fonction n’est apparue, ou n’a disparue.
  • Le nom de code regroupe plusieurs versions ayant en gros les mêmes fonctionnalités.
  • Le numéro de version, comme l’Api level , montre l’évolution de logiciel mais avec en plus une hiérarchisation des changements.
2003 Octobre : Création de Android Inc.
2005 Aout: Rachat de Android Inc. par Google.
2005 Novembre: Création du consortium Open Handset Alliance.

28 février 2011

Debuter avec Android


PRESREQUIS
  1. Connaitre java et XML. Le noyau d’Android est bien un linux, mais l’environnement d’exécution est sous le contrôle d’une machine virtuelle java, un peu spéciale, nommé Dalvik.
  2. Un téléphone et/ou une tablette tournant sous Android 2.2 ou supérieur. Ceci n’est pas absolument obligatoire car le SDK Android inclus un émulateur. Mais c’est tout de même plus gratifiant d’utiliser ses applications sur un véritable terminal Android.
  3. Lire l’anglais. Ceci est un prés-requis pour tout développeur, quelque soit le langage et  l’environnement de développement. Mais encore plus quand le système est nouveau et que les ouvrages et sites web francophones de qualité ne foisonnent pas encore.
INSTALLATION
  1. JAVA
    Le classique JRE (Java Runtime Environnement) ne suffit pas, il faut absolument  installer le JDK (Java Development Kit). Mais pour développer sous Android inutile de prendre un bundle (JEE, FX ou Netbeam) le JDK SE (Standard Edition) suffit. Bien sur, le JDK inclut le JRE.

    Important: Pour éviter des problèmes ultérieurs commencez par désinstaller votre java actuel, puis installez la dernière version du Java SE Development Kit.

  2. ANDROID
    La première chose à faire est de télécharger et installer le SDK starter package.

    Si vous êtes sous Windows et avez téléchargé l’exe, l’étape suivante se lancera automatiquement. Dans tous les autre cas il vous faudra lancer le SDK Manager qui s’occupera de télécharger les autres éléments du SDK en fonction de vos besoins (ce qui peut être long...). Vous pouvez, par exemple, ne sélectionner que les émulateurs Android 2.2 et supérieur, sauf la 2.3.1 (API version 9) qui est obsolète.

    Important: Si à l'installation le SDK Android vous dit qu'il ne trouve pas pas le JDK java cliquez sur le bouton Back  puis sur le bouton Next, et là il trouve le JDK !

  3. CVS / SVN / MERCURIAL (optionel)
    Que vous vouliez profiter du code de d’autres projets open source, ou publier votre projet sur GoogleCode ou SourceForge ou Savannah, dans tous les cas il vous faudra installer au moins un système de contrôle de version. Les plus connus étant :
    Si vous participez à plusieurs projets vous pourrez êtres amenes à installer plusieurs systèmes de contrôle de version.

  4. ECLIPSE (optionel mais vivement recommandé)
    Il est tout à fait possible de se passer d’Eclipse. On peut juste utiliser un éditeur de texte et la ligne de commande. Mais Eclipse simplifie vraiment la tache. Il est vrai qu’au début l’interface visuelle d’Eclipse est intimidante. Mais ça vaut le coup de se familiariser avec Eclipse car on peut l’utiliser dans bien des domaines (Java, C/C++, php, javascript ect)
    • IDE : Comme pour le JDK, il existe plusieurs bundles pour Eclipse. Mais pour developper sous Android il suffit de prendre le plus petit, et le plus simple, c'est à dire Eclipse IDE for Java Developers
    • Plugins : Grâce à un grand choix de plugins Eclipse est un environnement de développement très versatile.
      Il vous faudra installer au moins le plugin ADT dédié au développement sous Android.
      Attention que la version du plugin ADT soit celle qui va avec la version du SDK Android. 
    • La prise en charge de CVS est intégrée nativement à Eclipse. Pour les autres systèmes de contrôle de version il existe des plugins spécifiques : SVN, Mercurial 
      
APPRENTISSAGE

Comme toute application Android est écrite en java il faut connaitre un minimum de java. Grace au NDK il est possible de développer en langages compilés (donc en C/C++) mais les choses ne sont pas forcement plus simples (ni plus rapides).

SUPPORT

Si vous avez besoin d’aide plusieurs canaux sont disponibles. Au niveaux forums pour développeurs je vous conseille :
Rappelez vous que pour espérer obtenir une réponse il faut
1)      qu’elle soit synthétique. Hors de question d’envoyer 100 lignes de code en disant ça ne marche pas. Pourquoi ?
2)      qu’elle corresponde à un véritable problème. Donc, il faut avoir lu les documentations, fait quelques recherches avec Google, et expérimenté diverses options avant de poser sa question.


A vous de jouer !