Android connected to Arduino

The goal of this article is to explain how you can easily communicate between an Android application and an arduino board.
It’s a good way to quickly prototype some stuff to connect some electronic to Internet!

2014-03-06 00.36.30

– You need to be able to write a simple program on your ardunio.
– You need to be able to write a simple application for android.
– You need an android phone that support USB OTG mode.

Please note that the code is not “clean”. My goal was just to create a simple demo.
You can download the code here: AndroidArduino.tar. My code is totally free to use if you remove any references to my name.

It’s not the only solution. You can implement a USB protocol on the device. Another way is to use an external serial module or some bluetooth adapters.

Shopping time!

Cost: ~$25 + mobile phone.

You can use your own stuff, but the samples work with the following material on Please note that the average delivery time is 4-6 weeks. If you buy for less than $50, you don’t have to pay taxes in Switzerland.

Connect a USB cable to your phone

A USB to TTL port to communicate with arduino using USB port.

Arduino Micro-Controller

A RGB LED controller

A temperature sensor

You may want to buy
A nice kit

Build the stuff

If you want to use my code sample:

Connect the RGB led:
* – Connect red to pin 5
* – Connect green to pin 6
* – Connect blue to pin 7
* – Connect V to VCC

Connect temperature sensor to:
* – S to pin 12
* – Middle pin to VCC
* – Pin “-” to GND

Connect the programmer to the device and burn my firmware. You should see a red, green and blue “lightshow”.

Connect the USB port to the OTG adapter.

Install my application on the phone, connect the device to the phone and you will be able to communicate between the phone and the arduino using the USB port of your phone and a serial protocol.

You can get the temperature of the device on your phone. You can set the level of the leds.

You will see the battery of the phone going down really fast 🙂 You can install a powered USB hub, but it doesn’t work on every phone.

On the Ardunio side

You need to include #include <HardwareSerial.h>

In setup(), set the speed of the serial port
void setup() {

in loop()
int r =;
if (r != -1) { <– If we have received something
if (r == ‘x’) {  <– If we have received the char  ‘x’.


Send some char back

It’s really easy to communicate using the serial port on the arduino part.

In “tools -> serial port” of the development kit, you can communicate with your device and test that you communication protocol is working as expected  before testing on the phone.

On the Android side

You can see the documentation here:

In my activity, I start the communication with the serial port.
private Ardunio ardunio;

arduino = new Arduino(this) {

“Arduino” is an abstract class in a thread. I instantiate the class and implement the abstract method in my activity.
public void info(final String txt) {
runOnUiThread(new Runnable() {
public void run() {

In my Activity, I start / stop a thread that communicate with the Ardunio.

public void onPause() { super.onPause();

protected void onResume() { super.onResume();

I use the library provided by FTDI to interact with the device. FTDI is the manufacturer of most popular USB<->Serial chips.
private final D2xxManager ftD2xx;

Open the first FTDI device
int cntDev = ftD2xx.createDeviceInfoList(activity);
if (cntDev >= 1) {
FT_Device dev = ftD2xx.openByIndex(activity, 0);

Read what is on the serial port. Timeout after 0.2 seconds. Please note that I read one character at a time – the FTDI implementation seams to have a bug if you read more than one character at a time…
int c = 1;
while (c > 0) {
c =, 1, 200);
if (c > 0)
buff.append((char) b[0]);

I can send something to the serial port using
String s = “r” + this.r + “g” + this.g + “b”+ this.b;

Don’t hesitate to see my code to understand the details and some “tips” that are not included in this article!

InovAgil, a new way to create content


You are free to share a link to this post on other sites.

It’s the description of my Startup idea for my EMBA:

As I have not been able to create a group around this idea, I share it on my blog. If you are interested to create something, please contact me.

Short and example

How can we create a platform to create movies or musics using a collaborative approach?

Note: This example is not exactly what is described in the following chapters as my idea is still evolving.

I start a project called: “Romantic song under the Snow”.

I write some lyrics associated to this song, I ask my friends on Facebook to give a feedback. Some of my friends decide to change some words, write some missing part.

I write a music associated to these lyrics. One of my friend who is a good piano player records a music and share this music with me. A girl that I don’t know with an amazing voice decide to sing on top of this music and share the result with my project.

We receive some feedback, some people love it, many people don’t like some part and propose another thing that are even better. We improve the result.

Another guy decide to share a strong music, but I don’t really like the content. He decides to “clone the project” and do his own creation.

At the end we decide that the project is good enough, we close the project and people start to share the content on different platforms. Another guy took the content, make a project on his own, and made a funny version, another guy mixed different project to do a strange mix, but many people seams to like it.

The problem

Open-source, collaborative innovation and creation is hard without a structure that facilitate  discussion, project management, team creation, leadership and social rewarding.
We have seen an increased popularity in framework and projects that facilitate collaborative creation and sharing. The most popular is probably Wikipedia, the free Encyclopedia co-authored by millions of users., a way to crowd finance Startups and product creation. Facebook, the popular social collaborative environment where you share and co-create your life., where you not only read, but create and publish newspapers. That’s just a small part of the services that are created around this idea of collaborative innovation.

Furthermore, there is no easily accessible web platform for collaborative media creation that would enable users to easily create collaboratives movies, musics and books.

The solution

A new way of creating movies, musics and books by facilitating creation, team organization, social rewarding and enabling the consumer to be an owner, actor and
collaborator in the creation process of this media.

InovAgil is an interactive platform where consumers are participants in the different phases of the creation of a media. Our platform will empower people to create a team around a project, help them to organize the work and support them to share and monetize this work. This solution will focus on giving tools to people to collaborate as a team, share and reward the work of the members through social networks to encourage other people to praise and join a project. The project will be owned by all the participants.

The innovation: Empower consumers to be creator and take an active part in the creation
of movies, musics and books. They are socially rewarded through visibility of their work and exposure on social networks.

The innovation of InovAgil compared to existing models

● Watchers, Readers and Listeners can now be active actors in the creation of movies,
musics and books, the consumer is now the producer.

● We provide an agile base to facilitate the work of different people, we are facilitators not

● Everyone can take part in the creation of a movie, music, or book, improve, mix, change,
we encourage crowd creation versus personal ownership.

● No complete and dominant platforms to facilitate the creation of movies, musics and
books. We will be integrated with social networks to encourage collaborative creation
and social rewards of active members.

● We encourage remixing and remastering. Projects and part of the project can be
remixed, reused and improved.The Market: A big part of the 1 billion users that are using social networks and Internet.

Everyone with an Internet connexion and interest in medias can take part in the creation of a movie, music or book. You can review a scenario, write some music, work on a translation, write a chapter, watch and share a media, work on special effects, or be an actor of a movie.

Many people spend more than 50 hours per month in front of a television, if 10% of the potential users spend 2%, so 1 hour per month of their time creating content instead, we can expect a creative time of 100 millions hours per months. It’s similar to the budget of 5-10 Avatar movies per months.

Revenue generation

Advertisement, sale product licences to corporate environment, fundraising, derivative products.

InovAgil will be available in two versions:

● InovAgil Free Edition

This edition will be totally free, but the work will be public and under a creative commons
licence. Everyone can participate in the different phases of a project. We will make money by having advertisements on the site and fundraising campaigns. You can support a movie by giving money as an individual or as a brand. Part of this money will be shared between us and the creators of the project. We will insert advertisement in movies and books. Our team can sell derivative products based on the movie, organize events to meet the creators and find alternate way to make money.

● InovAgil Corporate Edition

This edition is for corporate environment that want to empower the creativity, idea of their
employees to create medias but don’t want the result to be visible and open-source.

These customers will pay a fee based on the type, duration and number of projects. We will have specific paid services like distribution of a media.


An interesting article about the success of “GangNam style“. “Some commentators attribute the video’s success in part to the many parodies spawned by Psy’s original. “

Energie nucléaire, les vrais coûts

German: Kernkraftwerke und Energiewende (Danke Max Ursin!)

Le but de cet article est d’analyser un peu les chiffres et documents donnés par l’OFEN.

Je me suis basé sur les documents que l’on trouve sur leur site:

Je me intéressé principalement à l’argent qui a été mis de côté pour démanteler les centrales. Il y a deux fonds.

Les fonds pour le démantèlement

Créé en 1984, le fonds de désaffectation pour les installations nucléaires a pour fonction d’assurer le financement de la désaffectation et du démantèlement des installations nucléaires mises hors service ainsi que le financement de la gestion des déchets ainsi produits.

Les coûts de désaffectation doivent être intégralement couverts par le fonds.

Créé en 2000, le fonds de gestion des déchets radioactifs provenant des centrales nucléaires a pour but de couvrir les coûts de gestion des déchets d’exploitation et des éléments combustibles irradiés après la mise hors service d’une centrale nucléaire.

A propos des centrales en Suisse

La durée maximum d’exploitation a été augmentée à 50 ans en 2008.

Avec le coût de démantèlement.

Beznau I en 1969-2019 6000 GWh (Axpo) 4,933 milliards.
Beznau II 1972-2022
Mühleberg 1972-2022 (BKW FMB Energie) 2’900 GWh, 2,321 milliards.
Gösgen serait fermée en 2029 (Alpiq, Axpo, ville de Zurich) 8’000 GWh 5,734 milliards.
Leibstadt en 1984-2034 (Alpiq, Axpo) 9’500 GWh 5,860 milliards
Zwillag 0,095 milliards

Qui fait partie de la commission

C’est toujours intéressant de voir les décideurs!


M. Walter Steinmann, directeur de l’Office fédéral de l’énergie, président
M. K. Rohrbach, BKW FMB Energie SA, vice-président
M. R. Bösch, Axpo Holding AG
M. R. Cron
Mme J. Demierre
M. St. W. Döhler, Axpo Holding AG
M. U. Eggenberger, Admin. fédérale des finances
M. R. Hengartner
M. M. Plaschy, Alpiq Holding AG

Qui pilote et s’occupe de la surveillance des coûts.

M. R. Cron, présidence (encore!)
M. F. Altdorfer, IFSN
Mme J. Demierre (encore!)
M. Dr. P. Hänggi, swissnuclear
M. J. Rodriguez, Office fédéral de l’énergie
M. M. Spicher, Secrétariat d’État à l’économie (seco)
M. T. Williams, Axpo AG
M. P. Zuidema, Nagra

Beaucoup de conflits d’intérêts, il y a trop de gens qui ont intérêts à minimiser ce fond!

Évaluation des coûts

En citant “Faktenblat_2_24_November_2011_franz_verabschiedet.pdf”

>> “Coûts selon la meilleure estimation («best estimate») Pour le calcul des coûts, on se réfère aux coûts dits «best-estimate». Ceux-ci désignent les dépenses calculées à partir d’un concept technico-scientifique clair, détaillé, délimité dans le temps et défini en fonction de la situation la plus récente. Les coûts sont estimés en toute conscience et prudence, avec expertise et sans marge de sécurité selon les prix du marché actuels (coûts «overnight» ou au jour le jour).”

>> “Grâce au réexamen et à l’actualisation périodiques – en fonction des prix du marché – des coûts de désaffectation et de gestion des déchets, il est tenu compte du fait que les dépenses ne surviendront que dans quelques décennies. Cette approche permet par ailleurs de valoriser les connaissances toujours plus élaborées qui sont obtenues au gré de l’exploitation des mines et de la construction de tunnels, en vue de l’aménagement futur des dépôts de stockage en couches géologiques profondes.”

Je lis: On minimise les coûts sachant que la technologie va évoluer! Est-ce qu’on peut vérifier cette hypothèse?

Un autre point intéressant:
“…à la phase d’observation, fixée à 50 ans, d’un dépôt géologique en profondeur”

Et après on fait quoi? En s’en balance car ce sera plus vraiment notre problème étant donné les les décideurs seront certainement plus en vie! Il y a plus d’argent pour contrôler et gérer nos déchets?

Quelques chiffres

Coûts de désaffectation, suivi des coûts de gestion des déchets

Beznau I + II: 809 + 4’124 = 4’933 mio
Gösgen: 663 + 5’071 = 5’734 mio
Leibstadt: 920 + 4’940 = 5’860 mio
Mühleberg: 487 + 1’834 = 2’321 mio
(Zwillag: 95 + 0 = 95)

La rien à redire! On peut penser que les prix sont justes par rapport à d’autres sources d’informations.

Plus intéressant, la contribution annuelle
Beznau I + II: 20.8 + 38.2 = 59
Gösgen: 10.4 + 29.5 = 39.9
Leibstadt: 14.1 + 40.9 = 55
Mühleberg: 13.1 + 19.6 = 32.7
(Zwillag: 2.2)

Je cite
“Le calcul des coûts et la fixation des contributions prévus par l’OFDG sont conçus de manière à garantir qu’au moment de la mise hors service d’une centrale, celle-ci s’est acquittée de tous les montants qu’elle était tenue de verser, les dépenses totales pour la désaffection et pour la gestion des déchets radioactifs après la mise hors service des centrales nucléaires”

La rien à redire, ça a l’air honnête.

Allez amusant-nous! Multiplions cette somme par la durée de vie des centrales! (50 ans)

Beznau I + II: 59 * 50 = 2950 mio
Gösgen: 39.9 * 50 = 1995 mio
Leibstadt: 55 * 50 = 2750 mio
Mühleberg: 32.7 * 50 = 1635 mio

Il y a pas quelque chose qui vous surprend!!?

Beznau I + II: Financé sur 50 ans 2950 mio, coûts 4’933 mio
Gösgen: Financé sur 50 ans 1995 mio, coûts 5’734 mio
Leibstadt: Financé sur 50 ans 2750 mio, coûts 5’860 mio
Mühleberg: Financé sur 50 ans 1635 mio, coûts 2’321 mio

Oui vous lisez bien!! On ne finance pas le démantèlement avec cette somme!!!

Et je suis en plus très très généreux avec les 50 ans, car le fond n’a quasiment pas été alimenté quand certaines centrales arrivent en fin de vie.

Soyons sérieux maintenant! Et prenons des chiffres plus réalistes.

En fin 2011 le fond était formé de

1‘336 + 2‘824 mio (Oui c’est sérieux!! Z_Informatio_ûber_die_Finanzergebnisse_2._Quartal_2012_franz.pdf)

Redistribuons cette somme sur les différentes centrales.
Beznau I en 1969-2019: ferme dans 7 ans
Beznau II 1972-2022: ferme dans 10 ans
Mühleberg 1972-2022: ferme dans 10 ans, ou en mi-2013 sous ordre du tribunal fédéral!
Gösgen serait fermée en 2029: ferme dans 17 ans
Leibstadt en 1984-2034: ferme dans 22 ans

Sur Jahresbericht2011_EntsF_verabschiedet_der_Kommission_23._Mai_2012_definitiv.pdf

On peut avoir une idée de la distribution des 1‘336 + 2‘824 mio par centrales. (6.2)

Observez d’ailleurs les étranges ‘0’ sur ce document! Ils ont rien versé au fond!! Probablement à cause des intérêts du fond…. ou mon allemand est trop mauvais.

Si on redistribue les 1‘336 + 2‘824 mio = 4160 mio de manière proportionnelle.

Beznau I + Beznau II: Payé: 1399 mio
Mühleberg: Payé: 1192 mio
Gösgen: Payé: 1024 mio
Leibstadt: Payé: 534 mio

N’est pas compté les taux d’intérêts qui étaient d’ailleurs négatifs en 2011.

Donc il reste à payer

Beznau I + II: coûts 4’933 – 1399 mio = 3534 mio à financer en 9 ans
Gösgen: 5’734 – 1024 mio = 4710 mio à financer en 17 ans
Leibstadt: 5’860 – 534 mio = 5326 mio à financer en 22 ans
Mühleberg: 2’321 -1192 mio = 1129 mio à financer en 10 ans (ou en 1 année…)

Rappel: Les 50 ans maximum de vie de la centrale sont la durée maximum sur laquelle ce fond est calculé! Décision du conseil fédéral de fermer la centrale ou non!

Donc en théorie

Beznau I + II: coûts 4’933 – 1399 mio = 3534 mio à financer en 9 ans
Gösgen: 5’734 – 1024 mio = 4710 mio à financer en 17 ans
Leibstadt: 5’860 – 534 mio = 5326 mio à financer en 22 ans
Mühleberg: 2’321 -1192 mio = 1129 mio à financer en 10 ans (ou en 1 année…)

Beznau I + II: 3534/9 = 393 mio/an
Gösgen: 4710/17 = 277 mio/an
Leibstadt: 5326/22 = 242 mio/an
Mühleberg: 1129/10 = 113 mio/an (ou 1129 mio/an en prenant la décision du tribunal fédéral)
(Attention cette somme est sur-évaluée étant donné qu’il y a des taux d’intérêts)

A comparer à la contribution annuelle
Beznau I + II: 59 mio/an => 15% de ce qu’ils devraient payer!
Gösgen: 39.9 mio/an => 14% de ce qu’ils devraient payer!
Leibstadt: 54.5 mio/an => 23% de ce qu’ils devraient payer!
Mühleberg: 32.7 mio/an => 29% de ce qu’ils devraient payer!

On peut maintenant calculer le prix par Kwh (Vendu ~10 centimes pour l’énergie + 10 centimes pour le transport)

Beznau I + II: Produit 6000 GWh / an <- Faut trouver 393 mio/an
Gösgen: Produit 8’000 GWh / an <- Faut trouver 277 mio/an
Leibstadt: Produit 9’500 GWh / an <- Faut trouver 242 mio/an
Mühleberg: Produit 2’900 GWh / an <- Faut trouver 113 mio/an (ou 1129 mio)

Donc le démantèlement (et seulement le démantèlement) devrait coûter par Kwh:
Beznau I + II: Donc 6.6 ct/Kwh + combustible, frais, etc..
Gösgen: Donc 3.5 ct/Kwh + combustible, frais, etc..
Leibstadt: Donc 2.5 ct/Kwh + combustible, frais, etc..
Mühleberg: Donc 3.9 ct/Kwh + combustible, frais, etc.. ou 39ct/an étant donné qu’ils doivent fermer mi-2013 selon le tribunal fédéral.

* A cela il faut rajouter les autres frais, ce n’est que les coûts pour le démantèlement!! Ajoutez l’achat du combustible nucléaire, amortissements pour la construction de la centrale, les réparations, les employés, les contrôles, etc… *

Et la on comprends mieux pourquoi économiesuisse annonce une multiplication du coût de l’énergie de 2.5… et oui cette dette du nucléaire faut bien la payer d’une manière ou de l’autre.

“Une étude officielle américaine de janvier 2010 (NREL) constate le coût actuel moyen du kWh éolien terrestre : 7 ct/kWh”. Ceci est à comparer avec les 7 ct/KWh de Beznau rien que pour provisionner le démantèlement!

Les éoliennes dans le Jorat ( sont évaluées à 10ct/Kwh.

Reste que si on me vend de l’énergie nucléaires à 30ct/KWh, je vais peut-être me mettre avec mes voisins pour construire nos éolienne à 10ct/Kwh…. L’énergie solaire est annoncée à 27ct/KWh pour 2013 (actuellement à 34ct/KWh).

Il y a beaucoup d’imprécisions sur cette analyse basée sur les données de l’OFEN.
Mais l’ordre de grandeur devrait jouer!

Il y a une habitude consistant à socialiser les dettes – donc les faire payer par vos impôts, et privatiser les bénéfices!! (Après on s’étonne des dettes de certains pays…)

Et je ne me base que sur les documents officiels de l’OFEN!

[Update 16 octobre]

Quelque commentaires d’un spécialiste (D’un parti de droite)
– La sous-évaluation des coûts sera très sûrement plus importante que prévu (c.f. les débuts en France et en Angleterre; car le problème à estimer ces coûts est que… jamais aucune centrale n’a été démantelée – exception de celle de Lucens, mais c’est un cas particulier).
– Dès lors, le fond de compensation ne suffira jamais. (Ce n’est pas pour rien que certains, comme Recordon, propose de ne pas démanteler les centrales mais de les arrêter et utiliser pour le dépôts de déchets: ça coûterait trop cher à nettoyer). Et que c’est très certainement le contribuable qui passera à la caisse.
– Reste que ses conclusions sur economiesuisse sont fausses: le coûts de l’électricité va monter parce qu’on va progressivement passer du nucléaire au renouvelable, et que la 2e coûte (encore) plus cher à la production.
GK: Mais la je ne suis pas d’accord! On verra le vrai coût d’EolJorat dans quelques années les études de 10ct/KWh étant faites aux Etats-Unis.
– Pour autant, il ne faut néanmoins pas oublier que le nucléaire est subventionné, et que le prix au kW/H du nucléaire devrait coûter plus que les 5 centimes actuels (C.f. Rapport Weinmann –

[Update 17 octobre]

BKW-FMB (Mühleberg) se met sous forme de holding en 2011.

Ce que cela veut dire: Une société mère qui gère des filiales.

La société mère n’est pas responsable des dettes des sociétés filles selon les informations que l’on m’a données.

En gros si une des filiales fait faillite, la société mère ne doit pas gérer ni assumer les dettes de la société fille. Imaginons une branche “exploitation Mühleberg”, qui tout à coup fasse faillite car ils ne peuvent plus provisionner le démontage d’une centrale nucléaire.

Socialisation / Étatisation des dettes!

Note: Une bonne partie appartient au canton de Berne (52,9%), 20% des actions sont en mains du fournisseur allemand d’électricité E.ON et le reste est librement négocié. (lien)

[Update 22 octobre]

Quelques erreurs, ont été corrigées

Pirate Bay owned by Suisa

Pirate Bay owned by Suisa

Voila un article qui se veut polémique, mais dans le fond a une certaine logique!

L’idée est sortie d’une discussion lors d’une table ronde sur la culture.

Les gens étaient fatigués, “brain-washed”, donc aussi prêt à écouter des choses non conventionnelles. Une des idées était que la Suisa propose une plateforme similaire à “pirate bay”, mais réservée à la Suisse.

Quoi?? Le représentant des majors qui ouvre une plateforme laissant les gens pirater?? Mais t’es fou toi! Jamais!!

Mais finalement pourquoi pas?

A mes yeux, le but de la Suisa est permettre à l’artiste de vivre de sa passion, donc de lui donner de l’argent afin qu’il puisse vivre dignement de son art. Le but n’est pas de défendre un “business model”, c’est-à-dire récompenser les intermédiaires à l’exemple des lois presque imposées par les pays anglo-saxon, mais mettre en avant principalement l’artiste, le créateur.

Pour y arriver on met en place ou on renforce des outils législatifs, on essayer de contrôler. On met en place des punitions disproportionnées. On vous coupe votre connexion Internet.  Les gens trouvent simplement d’autres manières de partager.

Pourquoi ne pas mettre en place une plateforme d’échange gérée par la Suisa? Un “Pirate Bay by Suisa”.

L’avantage de cette plateforme c’est qu’elle permettrait de donner les revenus aux artistes (et non a un Kim Dotcom…), elle permettrait aussi de contrôler le contenu et encourager la personne qui télécharge à récompenser l’artiste pour son travail! Les plateformes permettant le chargement d’œuvres ont un “business model” qui leur permet de faire BEAUCOUP d’argent, pourquoi ne pas “pirater” leur idées afin que cet argent finisse dans la poche de l’artiste?

Contrôler le piratage

Depuis une éternité, soit quelques dizaines d’année, l’industrie autours des médias, les “majors“, essaye d’interdire le piratage.

Une nouvelle technologie arrive, elle se fait attaquer par les “majors”, elle se fait ensuite remplacer par une autre technologie, et ainsi de suite. Internet Pirate Will Always Win!

Le copieur de cassettes, le graveur de CD, les newsgroups et serveurs FTP, IRC gratuits, Napster (P2P centralisé), BitTorrent (P2P décentralisé), les News Groups payants, le streaming, le filesharing (Megaupload), l’échange physique.

Ce qui est intéressant, c’est que plus la technologie se fait attaquer, plus elle évolue, plus il y a aussi des intermédiaires qui se font de l’argent dessus qui devrait revenir aux artistes. On attaque au niveau légal, les gens utilisent d’autres plateformes. Ils payent même pour accéder à des contenus!

L’étape suivante est un retour à l’échange en main propres.Et la il n’y a plus de contrôle possible, sauf ajouter un espion sur votre lecteur MP3, votre téléphone… NFC, Wi-Fi Direct, PirateBox, VPN. Le réseau Internet devient trop dangereux, alors on utilise un réseau déconnecté!

Est-ce que c’est à l’argent “public” de financer la lutte contre le piratage? Pour prendre un exemple Hadopi en France coute aux collectivités publiques plusieurs dizaines de millions, est-ce que c’est normal que vos impôts soient utilisés pour vous punir?

On arrive au point ou le “fan” d’un artiste se retrouve puni par un groupe qui représente l’artiste. Les gens qui participent au succès d’un musicien, aiment son œuvre, son art, se retrouve avec une étiquette d’ennemi!

Les DRM et la qualité du service

J’ai rendu un service très intéressant il y a quelques années à un ami.
Cet ami n’achetait que des CD originaux, il était fortement contre la copie. Un beau jour il achète un CD et impossible de l’utiliser dans sa voiture! Les vendeurs de ce CD avaient mis en place une protection contre la copie empêchant l’utilisation du CD sur certains lecteurs. J’ai fait une copie de ce CD en faisant sauter les protections, et lui ai donné cette copie. Ainsi il pouvait utiliser son CD normalement.

Un autre exemple dans le domaine de l’informatique. J’achète un jeu protégé mais impossible de l’utiliser car j’avais un lecteur CD SCSI. J’utilise à la place un lecteur IDE ça marche. Problème: impossible de jouer sans connexion internet, et comme j’avais beaucoup de problèmes avec ma connexion, impossible de jouer au jeu que j’avais payé! Finalement j’ai mis en place un “crack” permettant d’enlever les protections. Soulagement! Le jeu démarre plus vite, n’a même pas besoin qu’on mette le CD dans le lecteur, n’a plus besoin de connexion Internet.
La version piratée du produit que j’utilisais marchait mieux que l’original. (Pourquoi payer, attendre que le jeu sorte en Suisse, se déplacer au magasin pour avoir moins bien?)

Qui connait les DRM?
Les DRM sont une protection sur votre musique, votre film permettant l’utilisation que sur des lecteurs “approuvés”. Par exemple je ne pouvais utiliser la musique achetée sur iTunes que sur mon lecteur Apple.
J’achète une musique, et je me retrouve bloqué dans mon utilisation. Je ne peux pas l’utiliser à l’étranger parfois. Je ne peux pas prêter cette musique (comparez aux CD ou DVD que je peux prêter à un ami). Je ne peux même pas la mettre dans ma voiture, sur ma chaine stéréo car non approuvée par Apple. Je paye pour quelque chose et j’ai une qualité et facilité d’utilisation qui est moins bonne que la version piratée. WTF??

La version piratée revient à aller sur un site, entrer le nom de la musique, cliquer sur le lien, attendre dix minutes, et je peux la lire sur tous les lecteurs MP3!

Ultraviolet, qui connait cette technologie?
A la base c’est une très bonne idée, l’utilisateur qui achète un média physique peut regarder une version non physique partout!
Mais ça se corse…
– Parfois: désolé vous ne pouvez pas utiliser Ultraviolet depuis la Suisse (Hein??? J’ai acheté un film qui me dit sur l’étiquette que je peux charger la version numérique.)
– Désolé vous ne pouvez pas utiliser Ultraviolet sur votre Linux (Quoi?? Faut avoir du matériel certifié DRM-Ready??). Ca ne marche pas sur mon iPad??
– Vous payez plus cher! Hein?? J’achète une œuvre et je dois payer plus cher car je veux la regarder sur mon matériel?? C’est prévu combattre le piratage??

Un autre exemple amusant. Je suis un utilisateur de SwissTV. C’est une société Suisse qui fait un excellent produit. Malheureusement ce n’est pas eux qui font les règles!
Par exemple pour un film en particulier je paye
– Location CHF : 5.90.-
– Achat CHF : 22.90.-
Bon le prix est un peu haut je trouve – sur un réseau P2P c’est moins cher. Mais vous ne devez pas attendre 1-2 heures avant de voir le film.
Par contre c’est plus gênant quand j’achète le film car:
– J’achète un film et je ne peux pas le prêter!
– Pas la possibilité de voir le film depuis l’étranger.
– Je ne peux regarder le film que sur ma box SwissTV. Et si je veux le montrer à mon fils dans ma voiture? Et si je veux le regarder sur mon portable?
– L’achat est limité à une année!!! (Je ne sais pas si cette règle a changée)
– Je n’ai même pas accès à plusieurs langues. (J’aime bien regarder des films en anglais.)

En P2P par contre il n’y a pas ces limitations, et le film est accessible avant!

L’acheteur honnête se retrouve avec un produit qu’il paye plus cher, qu’il a plus de difficulté à utiliser partout, qui marche moins bien. Il n’y a pas un problème ou l’acheteur “honnête” se retrouve avec un produit moins bon? Celui qui “joue le jeu” se fait arnaquer par celui qu’il est supposer aimer!

Coupable sauf preuve du contraire

Quand je vais en vacances, j’achète de temps en temps un pull, un pantalon, et divers produits – comment je peux reconnaitre qu’un produit est “contrefait”, comment je peux reconnaitre une marque?
En Suisse on a de la chance car notre objet sera détruit (la loi vient de changer), pas d’amende, pas de punition.
En France par contre on va vous détruire l’objet et vous faire payer une amende correspondant au prix de l’original? Mais ça va la tête?? Et le préemption d’innocence?? Ma femme est assez forte à reconnaitre les marques, mais pour ma part je ne vais pas reconnaitre qu’un objet est une copie de marque. Est-ce que je dois suivre une formation spécifique en reconnaissance de marques avant d’acheter un objet?

On a la même chose dans le domaine de l’Internet. Je regarde une vidéo en streaming, mais est-ce que j’ai le droit de la regarder, est-ce que les droits ont été payés.

Si j’utilise “Pirate Bay”, est-ce que je suis dans l’illégalité? Charger c’est légal en Suisse, partager certains trucs c’est illégal.
Quand je regarde Zattoo (qui diffuse en P2P), est-ce que j’ai le droit d’utiliser ce service?

La personne qui prend de la copie doit-elle être formée à reconnaitre que c’est une copie illégale? Comment peut-elle savoir qu’elle a affaire à un site qui n’a pas payé de droits? La “présomption d’innocence” voudrait qu’elle ne soit jamais embêtée.

Évolution en Suisse

Une des chances que nous avons en Suisse, c’est d’avoir relativement peu de lobbys tournant autours de la musique. Le peuple est ainsi capable de contre-balancer le protectionnisme de certains groupes. Nous avons aussi une culture de l’OpenSource, de l’ouverture des données assez avancée par rapport à d’autres pays. La Suisse est un environnement favorable à l’évolution et un terrain fertiles à des entreprises qui peuvent se construire sur cette base.

Actuellement le chargement d’œuvre protégées par les droits d’auteurs est légal en Suisse même si la plateforme n’a pas payée de droits. La préemption d’innocence et l’intérêt de l’individu passe avant le droit de certaines entreprises principalement américaines. Suisa qui un temps voulait nous persuader du contraire a un avis un peu plus mitigé. Je crois qu’ils ont compris que l’on ne pouvait pas aller à contre-courant de l’évolution et de la “génération X, Y“.

L’upload d’œuvre protégées sans payer de droits (donc le P2P) reste interdit.

Il y a actuellement beaucoup de discussions sur la mise en place d’une licence universelle Selon certains échos, cela viendrait avec le droit d’uploader dans un cadre non commercial des médias, donc d’utiliser le P2P.


Pour résumer

  • Interdire est inutile, la technologie aura toujours un pas d’avance.
  • Il y a beaucoup d’argent autour du piratage, autant qu’il parte dans la poche de l’artiste.
  • Ce n’est pas au consommateur, mais à l’industrie de s’adapter. Un produit est fait pour le consommateur, le consommateur n’est pas fait pour un produit. (Premier chapitre des livres de marketing, adapter votre produit au consommateur.).
  • Le consommateur veut le meilleur produit, et quand le gratuit est mieux que le payant, on peut difficilement le forcer à consommer une moins bonne qualité.
  • La génération X et bientôt Y, soit ceux étant nés avec le numérique et Internet, vont prendre de plus en plus de pouvoir, rien ne pourra les arrêter comme c’est eux qui vont faire et subir les lois.

C’est pour cela que je propose que la Suisa mette en place une plateforme de téléchargement gratuite seulement pour la Suisse, avec possibilité d’ouverture à d’autres pays ayant fait les démarches pour en profiter. Cette relation permettrait d’ailleurs de faire connaitre et mettre en avant nos catalogues et nos musiciens chez nos partenaires.

  • Les utilisateurs vont se tourner vers cette plateforme étant donné que la qualité est plus élevée que les autres plateformes (et que l’artiste sera récompensé).
  • Contrôle des revenus générés au travers de la publicité par cette plateforme qui peuvent ainsi être reversés aux ayant-droits. Cela veut dire plus d’argent pour les artistes!
  • Mise en place des produits dérivés à l’exemple de la possibilité d’acheter un CD, de soutenir un artiste. On peut imaginer que le soutiens soit même public “Facebook: Henri vient de donner 10.- à Renaud après avoir chargé son album car il est un fan!”. “Robert vient de donner 500.-, il va pouvoir venir voir son artiste après un concert à Lausanne en VIP.”
  • Possibilité de mettre en avant des artistes Suisses. Vous aimez cet artiste, vous allez certainement aimer cet artiste Suisse.
  • Possibilité de mettre en avant des représentations d’artistes ou faire appel au crowdfunding d’évènements. Je suis prêt à acheter un billet x.- si tel artiste vient faire une représentation à Genève.
  • On est un pays qui est adapté pour ce type d’évolutions!
  • On exporte et fait connaitre nos artistes!

Il y a un coup de maitre à jouer, et j’espère que la Suisse sera la première à le faire.

Flir (I7) Some Analysis


I’m the proud owner of a Flir I7 Infrared camera.

With this nice camera, you can take 120×120 infrared pictures. These pictures are saved in an internal SD-Card. You can connect this camera to you computer.

On the picture, you can see the temperature of a 120×120 pixels area. You have a crossbar in the middle where you can see the temperature of the center. You have a scale at the bottom and the Flir logo on the top right.

Nice! Great! A pretty good camera for an expensive, but decent price.


My issue

Sadly the resolution is not high, and 30% of the image is covered by useless things (The logo, the temperature, the scale and the date).

It seams that the provided software can “take these things out of the interesting part”, I have not been able to test this software.

My configuration
– I’m on Linux, and the provided software only works on Windows (Not even on Mac…)
– I have a Windows in Virtual Box, but the provided software crashes!!! You can download a more recent version on the web site, but this version only loads images directly from the camera (and it doesn’t work for me), or from the SD-Card (and the SD-card is not mounted/accessible through my Windows).

Basically the Flir Team doesn’t seam to be able to write a correct software.



My goal is to be able to extract the original image without all the useless things (Logo, …) on Linux. You can probably use the same software on mac.

The provided software should be compatible with other models. (The old 120×120 and the new 140×140 Flir i7, Flir i5, Flir i3, and probably other models.)



Let’s first analyze the JPG image.

> jhead IR_0248.jpg
File name : IR_0248.jpg
File size : 36197 bytes
File date : 2012:02:11 14:17:08
Camera make : FLIR Systems AB
Camera model : FLIR_i7
Date/Time : 2012:02:11 14:17:08
Resolution : 240 x 240
Focal length : 6.7mm
Exposure time: 0.031 s (1/32)
Focus dist. : 1.00m

Nothing really interesting here.


If you open this image with an hex editor (GHEX), you will see a PNG header.

#89 50 4E 47 0D 0A… PNG…

Flir have inserted a PNG image in your JPG image, interesting! This image is not visible when you use a normal viewer.

I can find the position of this PNG segment using
> strings -a -3 --radix=d IR_0248.jpg | grep PNG
8035 PNG

So my PNG image is starting at position 8034. Before the PNG segment you have a character “0x89”.

Let’s extract this PNG image
tail --bytes=+8035 IR_0248.jpg > t.png

And let’s get some information about this png file.

> file t.png
t.png: PNG image data, 120 x 120, 16-bit grayscale, non-interlaced
Data is stored on 16 bytes (A value between 0 – 65535). The image size is 120×120 as expected, it’s the size of my camera.

It’s looks really interesting, the temperature levels seams to be wrong, but you can recognize the original image without the added information (logo, …).

Let’s convert the PNG file to a raw file. This file will contains the first pixel in the first two bytes, then the second pixels in the two next bytes. The size of the file is 120*120*2 bytes.
> convert t.png -depth 16 gray:t.raw

0xa730, 0x9830, … seams to be the temperature of 20,3°c
We see that bytes are inverted (little endian), but after comparing different image, we cannot just rely on this information.
Let’s analyze the JPEG file again


If you open the file with an HEX editor (ghex2), you will see that the format of a JPEG file is
0xFF D8 E0 00 {2 bytes size of segment 1} [name and data of segment 1] {2 bytes size of segment 2} [name and data of segment 1]

Analyzing one of my files I have
0x0006: JFIF : Just a header
0x0018: Exif : This header is “classical” and contains description about the image. Date, camera brand and model, width and height, etc..
0x0e2a: FLIR : This header looks really interesting, this is where you have the PNG file and other data. This header is specific to FLIR, it means most of the viewer just ignore it.
0x4e02: Other data


We will focus on the FLIR segment.

I have first “analyzed” the file with PhotoMe, we see 10 “Manufacturer notes” segments.
0x01: Rational -> That’s the maximum temperature in the image in °K
0x02: Rational -> That’s the minimum temperature in the image in °K
0x03: Rational -> 0.8, 0.95 ??
0x04: Rational -> 250 – Always the same, perhaps the minimal “reliable” temperature of the camera
0x05: Rational -> 523 – Always the same, perhaps the maximum “reliable” temperature of the camera
0x06: Rational -> 273 – Always the same, it’s perhaps temperature 0°C
0x07: ASCII -> 00000
0x08: ASCII -> 0000
0x09: Undefined -> Binary
0x0A: Long -> 1 – Always the same


To better understand the Exif/FLIR format, you can read this PDF: DC-008-2010_E.pdf
This chapter explains how a data is structured in this FLIR segment: 4.6.2 IFD Structure
Bytes 0-1 Tag — Bytes 2-3 Type — Bytes 4-7 Count — Bytes 8-11 Value Offset

So if I take the first segment of one of my files:
Tag: 0x 00 01
Type: 0x 00 00
Count: 0x 46 46 46 00
Value offset: 0x





Geroco et ZigBee


Ce travail est un ébauche technologique et je ne suis pas affilié à la compagnie Geroco.

N’hésitez pas à me contacter si des choses ne marchent pas chez vous ou si vous passez du temps à trouver/comprendre une information, j’ai peut-être oublié des étapes et je mettrais ce document à jour.

C’est un “travail en cours”, ce document va pas mal évoluer ces prochains temps.

EcoWizz c’est quoi?

EcoWizz est une “prise intelligente”, c’est à dire qu’on a la possibilité de connaître la consommation actuelle d’un ou plusieurs appareils, on a aussi la possibilité d’activer ou désactiver cette prise à distance (en théorie). C’est un produit qui est compatible actuellement avec les prises Suisses.

Plus d’information sur


Une machine installé avec linux. J’utilise la distribution “Ubuntu 11.04”.

Une clef USB EcoWizz avec quelques prises.

VirtualBox avec Windows d’installé et le support de l’USB. (Plus d’informations)


Le but de cet article est de mieux comprendre comment marche le produit EcoWizz de la société Geroco.

Cela vous permet d’ acquérir les compétences et compréhensions suivantes

  • ZigBee: Mieux comprendre comment ce protocole utilisé dans la domotique marche.
  • FT232: C’est quoi et comment ça marche (port série sur le port USB).
  • USB: Comment monitorer votre port USB (Linux), et mieux comprendre le protocole par un exemple concret.
  • Port série et Java: Comment utiliser un port série sur Linux avec le langage de programmation Java.

Mon but technologique est de pouvoir utiliser la solution d’EcoWizz dans mon environnement local, ceci en tant qu’ajout à ma solution de domotique – donc possibilité d’allumer et éteindre les prises, et de récupérer des informations de ces mêmes prises. Pour cela j’ai besoin de pouvoir interagir avec leur produit au travers d’une solution tournant sur Linux.

Le première étape consiste à en savoir plus sur le produit EcoWizz, et quels sont les composants hardware de cette solution.

En allant sur “”, on va découvrir que le protocole de communication qu’ils utilisent est ZigBee.

En insérant la clef USB sur un environnement linux et grâce aux commandes “usb-devices”, “lsusb”

On peut découvrir que cette clef utilise un “chip série” (uart) pour communiquer entre l’ordinateur et le “chip ZigBee”.

Bus 003 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC


T: Bus=03 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev=06.00
S: Manufacturer=FTDI
S: Product=FT232R USB UART
S: SerialNumber=A700fjni
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio

En cherchant a l’aide d’un éditeur hexadécimal dans leur code installé sur la version Windows, on peut voir la chaîne de caractères: CC2480. Il s’agit du contrôleur ZigBee qu’ils utilisent. On peut probablement arriver à cette même conclusion en ouvrant leur clef USB, mais c’est quelque chose que je voulais éviter.

Quelques autres points intéressants à relever: Ils utilisent QT, SQLite format 3 (donc possibilité d’aller lire la base de donnée locale), WebnergyClient.dll

Pour résumer

  • ZigBee
  • Chip série (ftdi_sio) FT232R USB UART
  • CC2480 (Contrôleur ZigBee)

VirtualBox, Windows et espionner le port USB

=> Configurer VirtualBox et Windows

Le but de cette partie est de pouvoir “espionner” les messages qui sont envoyés à la clef EcoWizz, à la fin nous seront capable d’envoyer un premier message à la clef et de recevoir la première réponse.

Installez le produit VirtualBox qui vous permet de faire tourner Windows par dessus Linux. Nous auront besoin de la version avec le support de l’USB. (Plus d’informations, ou problèmes). WMWare marche aussi.
Installez le programme EcoWizz et assignez la clef à votre instance Windows. (Devices -> USB Devices -> FTDI …), essayez de rajouter des prises.

Vous devez être capable d’utiliser le clef sous votre environnement virtuel Windows.

=> Support de Wireshark et possibilité “d’espionner” ce qui se passe sur un port USB.

En “root”, installez wireshark. (Sur debian/ubuntu, sudo apt-get install wireshark). Ce programme permet d’espionner ce qui se passe entre

Vous devez activer quelques modules sous linux pour être capable de le faire. (Plus d’informations)

Lancez Wireshark en root (sudo wireshark), vous devriez avoir quelque chose qui s’affiche s’appelant “usbmon{id} USB bus number {id}”, si ce n’est pas le cas, le module de “debuggage” de l’USB n’est pas actif. Je vous conseil de mettre votre module EcoWizz sur un bus différent de la souris (sinon vous avez trop d’informations.).

Vous pouvez savoir sur quel port se trouve votre clef grâce à la commande "lsusb"
Bus 003 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Vous commencez à avoir des lignes qui s’affichent ressemblant à: 4 0.001532 host 3.0 USB “GET DESCRIPTOR”, “URB_CONTROL”.

Analyser le protocole USB

Commencez par lire le code source du drivers du FT232: ftdi_sio.c et lancez WireShark: “su wireshark”.
Utilisez 1-2 minutes votre clef EcoWizz sur votre instance windows, vous devriez voir défiler les messages TRES rapidement. Enlevez votre clef.

Il y a 3 types de messages qui nous intéressent

GET DESCRIPTOR: Décrit le type de device.
Qui nous donne par exemple
0040 20 03 46 00 54 00 32 00 33 00 32 00 52 00 20 00 .F.T.2. 3.2.R. .
0050 55 00 53 00 42 00 20 00 55 00 41 00 52 00 54 00 U.S.B. . U.A.R.T.

URB_CONTROL out: Contrôle les propriétés du device
Dans notre cas ce qui nous intéresse particulièrement, c’est de mettre ce filtre: “usb.setup.bRequest == 3”. Ce filtre va nous sortir tous les paquets responsables de configurer la vitesse du port série (baudrate).

Le paquet qui nous intéresse est
URB.bmRequestType: 0x40
URB.bRequest: 3
URB.wValue: 0x001a ( = 115’200)

Ce que l’on apprend de ce paquet est la vitesse de connexion du port serie EcoWizz: 115’200
On peut trouver les autres informations de configuration par introspection.

URB_BULK out: Envoi et réception des messages qui seront envoyés au module ZigBee.

Il y a beaucoup de message qui passent et ne sont pas très utiles. Ce qui nous intéresse vraiment sont les messages avec ce filtre: “usb.transfer_type == 0x03 && usb.data_len >2”

On a deux types de messages qui nous intéressent

Le message: Host -> x.2
0000 80 67 eb 6a 00 88 ff ff 53 03 02 03 03 00 2d 00 .g.j.... S.....-.
0010 fd fb 2e 4e 00 00 00 00 62 8c 01 00 8d ff ff ff ...N.... b.......
0020 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 ........ ........
0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
0040 fe 01 26 06 01 20 ....

Et la réponse: x.2 -> Host
0000 c0 63 eb 6a 00 88 ff ff 43 03 81 03 03 00 2d 00 .c.j.... C.....-.
0010 fd fb 2e 4e 00 00 00 00 ce c2 01 00 00 00 00 00 ...N.... ........
0020 10 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ........ ........
0030 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 ........ ........
0040 11 60 fe 09 66 06 01 a5 03 82 00 00 4b 12 00 15 .`..f... ....K...

La partie nous intéressant particulièrement commence à partir de l’adresse 0040.
Message envoyé au port série: fe 01 26 06 01 20
Réponse: 11 60 fe 09 66 06 01 a5 03 82 00 00 4b 12 00 15

On va analyser plus loin le contenu de ces messages. C’est intéressant de remarquer qu’un message envoyé du host au device commence toujours par “fe”, un message envoyé du device au host par “11 60 fe”.


  • Nom du port /dev/ttyUSB0
  • Vitesse du port 115’200
  • SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, SerialPort.FLOWCONTROL_NONE
  • Un message envoyé du host au device est du style: fe xx xx xx …
  • Un message envoyé du device au host est du style: 11 60 fe xx xx xx …

Protocole de communication avec le contrôleur ZigBee CC2480

Le but de cette partie est de mieux comprendre comment votre ordinateur “discute” avec la clef ZigBee.

Comme nous l’avons vu, le contrôleur est un CC2480. Comme nous avons de la chance, quelqu’un a crée un code que nous pouvons utiliser ici: ““.

J’ai récupéré le code de svn (svn checkout zb4osgi-trunk)
Pour installer svn: “sudo apt-get install subversion”

En analysant le code, on comprend mieux comment les messages sont construits.

Du host au device:
fe {size(data)} {Message Type #1} {Message Type #2} {data}* {checksum}
Exemple: [fe] [01] [26 06] [01] [20]
=> Message type : 0x2606
=> Data : 01, de taille 01
=> Checksum : 20

Du device au host
11 60 fe {site(data)} {Message Type #1} {Message Type #2} {data}* {checksum}
Exemple: [11 60 fe] [09] [66 06] [01 a5 03 82 00 00 4b 12 00] [15]
=> Message type : 0x6606 (Réponse au message 2606…)
=> Data : 01 a5 03 82 00 00 4b 12 00, de taille 09
=> Checksum : 15

Le fichier vous énumère les différents types de messages supportés.

Vous pouvez aussi charger cette documentation : ZigBee API

Envoyer notre premier message

Je suis capable d’envoyer des messages à la clef EcoWizz/ZigBee

Vous avez toutes les informations pour le faire (au travers d’un terminal)

  • Nom du port /dev/ttyUSB0
  • Vitesse du port 115’200
  • SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, SerialPort.FLOWCONTROL_NONE

Vous pouvez par exemple envoyer en hexadécimal: fe 00 21 02 23 ..!.#
Vous allez recevoir normalement: 11 60 fe 05 61 02 02 01 01 00 00 64 .`..a… …d

Plus d’informations avec éventuellement du code quand j’aurais avancé dans cette partie.

Android Reverse Engineering

Note: The quality of this article is not good. It’s a way for me to keep some notes.

What is Android Reverse Engineering

The goal is to explain how you can reverse engineer an android application. How you can see the source code of an *.apk file.

The target audience is android developers, architects and geeks.



This text targets people with some experience. If you think that some part are too complex or you want to improve part of the document, don’t hesitate to send me a mail!



It’s always interesting to see how an application is built. I’m curious and my goal is to understand how great code to run great applications is built.

  • Design patterns: See the architecture of an application, what libraries they use, how developers write code. As an example some code is written in HTML, or compiled in a *.so libraries to avoid writing a different code for android and iPhone.
  • Privacy: Understand why an application needs to access things they don’t need. As an example why this application needs to access your address book or be able to send SMS?
  • Integration: Android is really an amazing system because you can integrate application in many features of the operating system. As an example, with the application “”, you can see who is calling even if not in your address book – It looks simple, but the system that do it is just amazing. (This is where you see that Android is way more mature than iOS.). AndroidManifest.xml is where many secrets are stored. Finding “how to do it” is not always easy but always interesting.
  • Secret features: Sometime you have “secret features”. As an example you can play videos on “MoboPlayer” using another application, but the way to do it is not documented anywhere.
  • API: Many application are integrated with web services, API. It’s interesting to see how the integration is done, secrets that are stored in an application. As a developer or architect always think that the code of your mobile application is “public”! It’s common to see: public static String API_SECRET = “top3eCret@”;
  • Security and database: Copy and past part of a code is easy, think about it when implementing your complex encryption algorithm! 😛 Might not be that useful!


Write an android application

To get the maximum benefit of this article, you need to be able to write a simple android application and deploy this application.

You need to know what adb is, what is this strange file “AndroidManifest.xml”, to know how to write some java code. This part is out of the scope of this article.


Unlock and root your mobile phone

You need to unlock and root your mobile phone if you really want to understand how it works.

How to do it is not part of this article.

Unlock: This process is a way to “open your phone” and keep your privacy. By default your phone is locked, it means you cannot install code that was not certified by the manufacturer. It’s important because otherwise someone who steal your phone can access your data.

During the unlock process all your data are deleted ! Once your phone is unlocked, your data are not secure if your phone is stolen.

Root: By default all your applications run in their own sandbox. It means that an application cannot change the content of another application. Android is running on top of a Linux layer, the user called “root” is allowed to change and read everything.

When you “root” your phone, you are able to connect as root.

Once your phone is rooted, you can do
./adb shell (connect to your phone using a terminal)
then “su”

Note: install “BusyBox Free” from the “Play Store” if your are used to Linux. Busybox is a way to have some common Linux commands on an embedded Linux system.


Common path

Connect to your phone:
./adb shell
Then “su”

/data/app: The package (apk) of your installed application is here. It’s interesting if you want to analyse an application you have installed.

/data/data: The data of your applications is stored here.

/sdcard/: Where your sdcard is mounted.

adb push <local> <remote> – copy file/dir to device
adb pull <remote> [<local>] – copy file/dir from device


View the resources of the application

Imagine you have an application called ch.nuage.test.apk.

You want to see images, the source code of AndroidManifest.xml.

Download this application:
Then run : “apktool d ch.nuage.test.apk”

You will have a new directory with
– AndroidManifest.xml (in plain text!)
– Images, texts, of the application
– Smali: The pseudo-code (I prefer to read the code given in the next paragraph)


View the source code of the application

Imagine you have an application called ch.nuage.test.apk.

The goal of this part is to browse the source code of the application.

First “unzip” the code. Change the extension to “.zip” ch.nuage.test.apk =>, or try to unzip this file directly.

Inside you have a file called “classes.dex”, it’s what interest us.

Download dex2jar
Use dex2jar to transform the “dex” to a common java jar file. classes.dex

UnZip/UnJar classes_dex2jar.jar. You should now have a folder with *.class files.

To see a “pseudo” java code, your can use this tool:

Please note that

  • Comments have been removed 😛
  • Name of many variables has changed.
  • Name of many classes is now “a, b, c, d”
  • Some part of the code cannot be compiled or displayed correctly.


What next?

You can change, repackage applications, recompile, but it’s not in the scope of this article.

You something have libraries in the application (lib/*.so), you can see the code using a decompiler like – but it’s out of the scope of this article (and the software is too expensive for me.)



Many databases are using sqlite3.

You can change easily these files by installing sqlite and editing the content using SQL requests.



GameCIH might interest you too.

It’s a way to “speed up” an application or change value in the application like money, lives.



As you see it’s quite easy to see the content of an application.


  • Think about it when developing mobile software. (It’s the same on iPhone…). Your top secret password or API is not that secret… Your oAuth secret should perhaps be stored on your server and not on the mobile application.
  • It’s a good way to see what other people do to improve your skills.