2016-08-23

1,2,3 Je suis là / Here we are + Android 6

English version below

Android 6 a introduit un nouveau mécanisme pour les autorisations sensibles que sont les contacts, les SMS et la position. 3 autorisations coeur de l'application "1,2,3 Je suis là !".

Selon les consignes de Google, l'intégration de ces autorisations doit s'accompagner d'une documentation explicite pour éclairer l'utilisateur. En attendant une prochaine version, voici comment retrouver pleinement le fonctionnement de "1,2,3 Je suis là !" :
  • Aller dans les "Paramètres" du téléphone puis "Applications"
  • Choisir "1,2,3 Je suis là !"
  • Aller dans "Autorisations"
  • Activer les 3 permissions : GPS, SMS et Contacts


Android 6 introduces a new mechanism for sensitives permissions such as contacts, sms and location. 3 permissions at the core of "Here we are".

According to Android guidelines, theses permissions need an explicit documentation for enlighted user's choice. Until the next release, here's how to reactivate permissions manually :
  • Open Android's "Settings" then "Apps"
  • Choose "Here we are"
  • Choose "Permissions"

  • Enable Contacts, Location and SMS

2015-08-06

Utiliser sa kindle comme écran domotique

* ERRATA 1 : FOR non-frog-speakers : complete journey inside the project and step-by-step instructions to reproduce my video : https://hackaday.io/project/7126-kindle-as-a-home-automation

* ERRATA 2 : all source code (C99, python, energia) are on my GitHub : https://github.com/cekage/kindle-home-automation *

En attendant que l'inspiration Android me revienne, je vous propose une manipulation un peu tarabiscotée pour transformer votre Kindle en écran domotique.

Bien évidemment la kindle possède un navigateur et bien évidemment la manipulation consistera à ne pas le lancer. Sinon c'est trop facile !

* TLDR;  Créér un mobi avec des mots connus du dictionnaire. Rooter la kindle. Diriger les log syslog-ng vers un program. Le "program" doit avoir des triggers pour des requetes http (source plus bas).*


Pré-requis:

Cet article nécessite quelques connaissances pour reproduire la même chose chez vous :
  • une kindle rooté
  • un peu de html et kindlegen 
  • le minimum vital des bases linux : bash, vi, scp, ssh, mount
  • vi (ouais ça se corse à partir de là)
  • syslog-ng
  • savoir compiler un code source avec une toolchain kindle.
Rien d'insurmontable et au pire faites-vous aider.

Objectif:

Nous allons commencer par faire un ebook puis observer en direct dans la KIndle ce qu'il se passe lorsqu'on fait des manipulations.
Ensuite nous allons voir comment canaliser ces informations et les filtrer au besoin.
Enfin nous allons construire un moulin en bout de la canalisation pour faire des requêtes HTTP.

Le mobi

L'opération est toute simple, vous vous procurez kindlegen sur site de amazon et vous faites un .mobi avec.
Le .html que j'ai utilisé pour la démonstration dans la vidéo est sur github.

Visite des coulisses:

Votre kindle est rootée et vous avez ssh ? C'est la manière la plus confortable. Notez que ça  fonctionne aussi avec la liaison série.
k@mbp ~ $ ssh root@192.168.1.110
Welcome to Kindle!

root@192.168.1.110's password: 
#################################################
#  N O T I C E  *  N O T I C E  *  N O T I C E  # 
#################################################
Rootfs is mounted read-only. Invoke mntroot rw to
switch back to a writable rootfs.
#################################################

Première des choses, regardons les syslog:
150806:083005 syslog-ng[29521]: SIGHUP received, restarting syslog-ng
150806:083005 system: I tinyrot:def:Removing  /var/local/log/netlog_00000127_*.gz to save storage space
150806:083005 system: I tinyrot:def::Rotating file /var/log/odotlite with max size 2048
150806:083005 system: I tinyrot:def::No file to rotate: /var/log/odotlite
150806:083005 system: I tinyrot:def::Rotating file /var/log/wpa_supplicant with max size 128
150806:083005 system: I tinyrot:def:Removing  /var/local/log/wpa_supplicant_00000139_*.gz to save storage space
150806:083007 syslog-ng[29521]: new configuration initialized

Rien de bien extraordinaire. Notez la présence de tinyrot, il y a fort à parier qu'il s'agit d'un outil de rotation de log. Nous pouvons oublier tout de suite l'idée de récupérer quoi que soit dans les fichiers logs de /var/log (Race Condition).

Maintenant ouvrons un ebook en appuyant sur les boutons de la kindle:
150806:083007 syslog-ng[29521]: new configuration initialized
150806:083118 cvm[3363]: I BookletManager:SwitchingBooklets:from=Home,to=Bookworm:
150806:083118 cvm[3363]: I lipc:gsp:prop=orientation, source=com.lab126.system:Get string property
150806:083118 cvm[3363]: I WindowManagerImpl:PageTransitionBehavior:USE_GL16=true:
150806:083118 cvm[3363]: I WindowManagerImpl:NewTemperatureAndPages:temperature=25,pages=5:Updated temperature and pages
150806:083118 cvm[3363]: I Reader:BOOK INFO:book asin=unknown,file size=31022,file last mod date=2015-08-05 11.49.25 -0719,content type=ebook,length=HTMLPosition_ 1354,access=2015-08-06 08.19.41 -0719,last read position=HTMLPosition_ 359,isEncrypted=false,isSample=false,isNew=false,isTTSMetdataPresent=false,isTTSMetadataAllowed=true,fileExtn=mobi:
150806:083118 cvm[3363]: I lipc:gip:prop=userstoreFreeSpace, source=com.lab126.volumd:Get int property

La ligne Reader nous permet donc de savoir quel ebook est ouvert, son format et tout le barda. Notez l'asin, unknown, c'est parce que j'ai utilisé un fichier .mobi. Avec un format en azw3 le fichier aurait un asin de ce type là : 18812ddb-b3de-4ae1-bc3c-538d68b19ad8.
Faites donc des essais et essayer de deviner ce qui va vraiment nous intéresser pour la suite.
Nous avons donc un bout pour commencer : savoir ce que l'utilisateur fait.

Filtrer, raffiner, canaliser

On attaque la partie velue, le syslog, tout d'abord identifions :
[root@kindle root]# ps ax | grep syslog
29521 ?        Ss     0:02 /usr/sbin/syslog-ng

Oh ! Ce familier syslog-ng ! C'est une bonne surprise, nous allons pouvoir lancer arrêter ce daemon très simplement pour tester nos configurations.
Car, et c'est la bonne nouvelle de la bonne surprise : syslog-ng possède des filtres et peut envoyer nos logs à une commande.
Allons au plus rapide, remounter / en rw et modifiez pour obtenir :
[root@kindle root]# grep cvm /etc/syslog-ng/syslog-ng.conf 
destination cvm { program("/tmp/readlog" template("$MSG\n")); };
filter f_cvm { match("cvm"); };
## /var/log/cvm in addition to /var/log/messages,
log { source(src); filter(f_cvm); destination(cvm); };

La destination de la règle cvm sera un programme avec un template minimal, le filter est sur la chaîne "cvm" (vous pouvez l'améliorer) et la règle du log qui reprends la source, le filtre et la destination.
Ok nous savons que l'information que nous cherchons va nous arriver par les log du lecteur, nous avons donc paramétrer le gestionnaire de log pour alimenter un programme nommé readlog qui sera dans /tmp/ (ou ailleurs, peu importe). Il ne reste plus qu'à construire readlog :-)

le code de readlog

Petit rappel, nous sommes sur une système anémique qui n'a pas beaucoup de ram et dont on ne souhaite pas épuiser la batterie en le faisant lagger.
Donc on oublie les scripts bash avec sed/grep/curl, c'est pas beau, ça mange de la ram et ça tue les chatons.
ON OUBLIE LE SCRIPT BASH !!!!
Vous trouverez les fichiers sources sur mon repo github.
git clone https://github.com/cekage/kindle-home-automation

Conclusion

C'était un défi fun, il n'y avait qu'une seule manière pour passer une valeur du lecteur d'ebook à un logiciel sous-jacent. L'utilisation du dictionnaire est rustre mais efficace.
L'expression régulière clef est "SupplementarInfoBox:QUICK_LOOKUP:asin=.*,word=[A-Z]+:", comprenez qu'en utilisant un azw3 (avec calibre ?) vous pouvez bloquer la clef ASIN à une valeur connue et ainsi limiter les interférences avec les autres ebooks.

En ce qui concerne la partie LED, elle n'a pas beaucoup d'intérêt. C'est un simple blink avec un test sur la ligne série. Si "1" on toggle LED1 si "0" on toggle LED0… le tout est piloté avec un script python qui écoute sur mbp:8080 (en dur dans le code source) et écrit sur /dev/msp430 (la launchpad).

2015-01-14

La #charlitude floue / the #charlie mess

English version below.

C'est quoi un #jesuischarlie ?

Congés de fin d'année 1994 le vol d'Air France 8969 était dans tous les esprits. La télé me l'avait fait comprendre, c'était gravissime. Sauf pour un journal qui avait décidé de mettre en Une un tapis à bagages avec des membres en vrac de terroristes, sur fond vert. De mémoire il y avait une accroche ironisant sur le service à bord d'Air France. Quinze ans, plein age bête, très influençable et à peine sorti de l’intérêt des adolescents pour la mort je découvre qu'un peu d'humour bête et méchant aère l'esprit. En plus il y a Cabu le dessinateur de Dorothée. #JeSuisCharlie


Après quelques années à relire des numéros plus ou moins récents chez les parents de mon meilleur ami, ceux-ci m'offrent en 1998, un an d'abonnement à Charlie. Lorsque 666.667 club est sorti, Cantat appelait Charlie à le défendre. Peu de mes camarades de foire (a-k-a la filière S) pouvaient raccrocher ce cri en trois mots à un journal rempli de bites, de couilles, d'insanités et de mauvais esprit. Ils rataient Siné sème sa zone en écriture manuscrite, Oncle Bernard (il cause pas comme mon prof d'éco, il ne doit pas être prof), Luce Lapin et ses puces. Charlie était ma dose de n'importe quoi hebdomadaire, même ce Fischetti avec ses articles scientifiques devait être un canular, non ? #JeSuisCharlie


Le bac, étudiant-diant-diant bordelais j'ai accès à la culture. Enfin. Musées, musiques, bibliothèques, concerts, internet… j'ai accès à presque tout. Merci Charlie pour toutes ces années à me faire envie. Je te relis de temps en temps car ton mauvais esprit ne se trouve nulle part ailleurs.


2008, je suis un pro. Je lis Management, Les Echos, l'Usine Nouvelle et autres European Rubber Journal. Je te lis encore moins Charlie, mais à chaque déplacement au siège social, tu es dans ma main. Tu es là, ostensible, tu non-dis pour moi, tu me protèges en quelques sortes. Mais tu décides de virer Siné, tu t'es pris au sérieux avec les représentants d'un ami imaginaire. C'est TRÈS malhonnête. Je te vois dans le kiosque, je sais que beaucoup d'entre toi ont défendu Siné, je sais que je vais me marrer avec Maurice et Patapon. Mais ce ne sera pas avec toi. Je prends le Siné. #JeNeSuisPasCharlie.


2012, l'oncle déluré gagne contre le canard qui emploie son intraitable neveu. J'apprends qu'entre temps le neveu s'est épaissi, il est devenu le grand chef. Tu es de nouveau avec moi lors de mes déplacements au siège. J'écoute Bernard Maris sur Inter, un économiste qui devrait plaire à Oncle Bernard… Oh ! Ainsi tu étais dans ma radio tout ce temps ? #JeSuisPresqueCharlie


2014, je vois ton appel à l'abonnement. J'aime tes caricatures, ton outrance, mais tu ouvres tes colonnes à des gens qui oublient de rire des sujets graves. Ces gens sont probablement nécessaires, pour toi, à notre société. Tu as la légitimité pour porter ces voix. Je suis libre de ne pas te soutenir avec un abonnement, je ne te soutiendrai pas. #JeNeSuisPasAssezCharlie.


2015, tu ouvres toujours les colonnes à 2-3 vents mauvais. Je ne les aime pas. Ils ont maintenant l'auréole des survivants comme les autres membres, sauf ceux qui y sont restés. Tu étais là quand j'avais besoin de rire alors je suis allé dans la rue, pour défendre ces caricatures, cette outrance et cet insolent mauvais goût qui éclairent le citoyen.
J'ai eu une réaction pas très Charlie en apprenant l'élimination des trois assassins. Mes félicitations aux policiers n'étaient pas non plus très Charlie.


Depuis mercredi #JeSuisCharlie, l'émotion me fait passer un cap. Je suis en paix avec toi. Je t'attends mercredi, au courrier, je me suis abonné pour des années. Tu traineras sur la table basse, tu seras lu (d'abord en cachette, les bites obligent) par mes enfants. Peut-être un jour un-e ami-e des enfants tombera sur toi à la maison et aura un éclair comme je l'ai eu il y a 20 ans déjà…


Aux morts tombés pour leur insolence, leur métier, leur judéité (en 2015 encore, en France, être juif tue).

A Cabu, Charb et Oncle Bernard qui s'en vont avec une partie de mon adolescence.




This is not a litteral translation of the above text. The french version uses a lot of references which are senseless if you weren't in France when it happened. However you were teen, you probably (think you) were rebel. You were probably able to taste pee/poo humor even young adult.

That's the point with Charlie. Charlie ribs everyone, even themselves, without limits. Charlie stands for Charles DeGaulle, yes cartoonists mocks the man who impersonate the release from nazis. Were-they nazis ? Certainly not ! They hate symbols. All symbols. The rare times Dove of Peace was drawn, the bird was pooping, shooted and sometimes barbecued.

Criticize symbols implies criticizing all symbols : idea, policy, religions/sects, known peoples, professions, diplomas, tv programs. All the list is continually criticized. Charlie pisses on everybody and thankfully a lot of people didn't care (or didn't know).

Hammering everything and employing jews & christians & atheists & muslims, lgbt & hetero, women and men, Charlie can't be accused of (white|christian|male|hetero)-privilege bias. But to know that fact, you have to know who is Charlie, not extrapolate from an isolated mean cartoon.


Charlie was the stupid-and-mean companion when I was teen and young-adult. A friend who showed me alternate ways exist, ways few people choose to walk-in. You chose linux before 946681200, you reverse app/firmware for fun, you tink usual things to push them where original engineer didn't want to, you dare criticizing Liberty-killing Acts ? Then you are part of the people who think before embrace what is served to you through tv (specially tv news) or marketing bullshit (MEGAFA at least).

Charlie shows you the nonsense served by banks, insurances, cable operators, … the irritating subjects common press hides because the we-can't-piss-on-our-announcers thing. Charlie only relies on subscription and very few bucks given by public aid to press. "Few" means dramatically less than "Closer" (remember the President Hollande thing with Miz Trierweiler).

Charlie is also the name of Waldo. That's said, where is Charlie ?
When you leave beaten tracks, for mocking yourselves, for knowledge, for sarcastic prank, for taking pen to fight , you are close to the spirit that Charlie cartoonists loved.


Cartoonists murderers also kill journalists, janitor, policemen and policewoman (a muslim + a black + a white, the black-blanc-beur France). At the end they killed supermarket consumers just because they were jews. In 2015, in France be jew kills.






2013-11-26

ADB Lock for KitKat (Android 4.4) [fr / en]


* English Version Below *

  En attendant la publication de la V4, voici les améliorations apportées à l'actuelle V3 en mode normal (root) et système (non-root).

Nouvelle Icône

    On ne peut pas dire que les designers Android se cassent beaucoup la tête pour concevoir les icônes de débogage.  Quatre barres verticales, rappel géométrique des quatre barres de chocolat dans une confiserie KitKat.

Corrections (non sécuritaires):

  • En mode non-root, la surveillance de l'écran lançait inutilement une détection de root.
  • En mode non-root, les appels ne sont plus faits à Settings.Secure mais à Settings.Global.
  • Le hack BillingHack du PlayStore est corrigé. Pour rappel, être sponsor n'active *AUCUNE* fonctionnalité supplémentaire dans l'application.

Compatibilité Dalvik ET ART

ADB-Lock est toujours compatible avec l'actuelle machine virtuelle Dalvik (celle que vous avez actuellement) et est aussi compatible avec la nouvelle : ART (que vous aurez très prochainement).

Attention, les outils SuperUser ne sont pas tous compatibles avec ART, je vous suggère très fortement de passer ADB Lock en mode Système (cf mon précédent billet)!

Mode Système (non-root) : contourner les nouvelles restrictions.

Android 4.4 a de nouvelles sécurités, l'une d'elle enlève systématiquement l'autorisation WRITE_SECURE_SETTINGS aux applications normales et même celles de /system/. Cette sécurité se contourne avec mon zip pour le recovery :




Je ne vous donne pas dans ce billet comment contourner la protection, mais vous laisse trouver par vous-même.

Si vous avez urgemment besoin de la solution, elle est dans le zip :-)



    Until ADB Lock V4 release, I publish an improved V3 on both mode : normal (root) and system (non-root).

New Icon

    I'm not sure Android's designers spend enough time designing ADB notifications icons. This time, they released a four vertical bars supposed to reminds us a KitKat tablet with the four bars candy.

Improvements (not insecure):

  • In non-root mode, screen monitoring switch required unnecessarily root privilege.
  • In non-root mode, too, ADB Lock will no longer calls Settings.Secure instead of Settings.Global.
  • Last, and least, PlayStore Hack BillingHack will not works on ADB Lock. As a reminder, becoming a sponsor *WILL NOT* unlock hidden features. It's only sponsoring.

ART and Dalvik compatibility

ADB-Lock remains fully compatible with the actual runtume (aka Dalvik) and is now compatible with ART (the next runtime).

A lot of SuperUser tools are not compatible with ART, I strongly suggest you to switch in System Mode (see my last post)!

System mode (non-root) : bypass brand new restrictions.

Android 4.4 brings new security enhancement, one of them revoke systematically WRITE_SECURE_SETTINGS permissions to both /data/app AND /system/app. This mechanism is really easy to defeat with my recovery zip :




I will not give you in this post how I bypass the protection, you have to find it by youself.

But if you really need the answer, it's inside the zip, in plaintext :-)

2013-10-02

ADB Lock non-root mode [fr / en]

English version below…

Android réserve ses fonctions les plus sensibles aux applications "système". C'est par exemple le cas de "Paramètres", l'application système que vous utilisez le plus souvent, qui est autorisée à activer ou désactiver ADB sans recourir au root.

Une application Système est une application classique : elle est au format APK, elle doit déclarer ses permissions. LA différence est qu'elle est placée dans /system/ (un dossier spécial et protégé) au lieu de /data/app comme toutes les autres apps.

L'app ADB-Lock est capable de détecter toute seule si elle est Système et dans ce cas cesse d'utiliser le mécanisme ROOT pour permuter l'état de l'ADB.

Il y a au moins 4 manières de passer ADB-Lock en mode Système : avec une app, avec le shell adb, avec un script  ou avec un zip (recovery ou TWRP). Bref vous avez l'embarras du choix.

2013-09-19

ADB Lock v3 ! [en / fr]

[English version below]
-----

Le développement d'ADB Lock se fait sur mon temps libre et la priorité est donnée aux apps qui font rentrer la monnaie. ADB Lock est "financée" par le don, qui à ma grande surprise, fonctionne plutôt bien selon mes critères.

La précédente version, d'octobre 2012, toujours compatible avec Android 4.3, méritait quelques modifications :
  • Android 2.3 et inférieurs (plus suivis par Google) resteront sur la version 1. Le maintien des layout et une partie du code ne se justifie plus.
  • Suppression de la permission Internet et du mécanisme (jamais activé) de publicité via AdMob.
  • Abandon de la bibliothèque RootTools et réecriture des commandes pour ne plus dépendre de busybox.
  • Support des tablettes 10" et 7" (grâce à GenyMotion).
  • Quelques modifications cosmétiques comme l’icône du launcher, suppression des paradigmes d'ordinateurs tels que la fermeture des fenêtres par un click sur une croix et une meilleure harmonie visuelle (padding/margin).
  • La barre du haut initialement occupée par l’icône de l'app, est remplacée par une (fausse et c'est pas bien !) ActionBar qui pointe vers mes profils Twitter, Google+ et ce blog. 
Si vous ne l'utilisez pas encore, installez le SuperUser de koush, qui offre de biens meilleures performances, plus d'options et une plus grande fiabilité que le SuperUser de ChainsDD ou SuperSU de chainfire.

Notez que si vous utilisez Superuser de ChainsDD, il est possible, qu' en arrière plan, ADB Lock ne puisse éteindre adbd car SuperUser demande une confirmation alors que l'écran est éteint.

---

I used to code "ADB Lock" on my spare time, and I must confess the money I do with, is a criterium to prioritize my apps's developpement. Surprisingly, the donation model of this app runs better than I though when I chose this monetization.

The last holo version of ADB-Lock, published a year ago, is still fully compatible with brand new Android 4.3 security models, but it needs a lot of improvements.
  • Android 2.3 and below (not maintained by Google) terminals stay with ADB Lock v1.
    ADB Lock v3 will aims Android 4 and above.
  • The Internet permission is definitively removed. AdMob (never activated) is also removed.
  • RootTools and busybox are no longer needed. They are removed too.
  • Android 10" and 7" are supported. Thanks to GenyMotion !
  • some cosmetic changes concerning launcher icon, computer paradigms (like corner cross to quit) and more efficient visual repartition of widgets (mainly margin & padding stuff)
  • 3 social network icons : Twitter / Google Plus / Blogger to see on what I'm working on. In French.
I can't enough recomand you to use koush's SuperUser instead of chainsDD's SuperUser or chainfire's SuperSU. Koush's has better performances, better options and higher reliability.

For example, ChainsDD's sometimes forgets it has previously (and permanently) allowed ADB Lock and blocks adbd stop mechanism, waiting for another allowance while screen is… off.

2013-09-09

Łǎ łōčǎłé zz_ZZ, ł'ǎűţŕé ƒǎçōи ďé ƒǎìŕé śōи ł33ţ



Tantôt en Anglais, tantôt en Français, je change la langue par défaut de mon terminal assez régulièrement.  Et c'est au cours d'un changement que je suis tombé sur une locale étrange "[Developer] Accented English", que j'ai bien évidemment validé. Je suis curieux.

Probablement qu'un jour ça me perdra, en attendant ça m'amuse.

Attention, ce mode rend votre terminal instable éи ρłűś ďé łé ŕéиďŕé ď샃ìčìłéɱéиţ łìśìƃłé !



        Comme vous pouvez le voir sur la vignette ci-contre, cette locale est la locale par défaut, du moins le contenu du texte, sauf que les lettres sont piochées dans les alphabets d'un peu tout le monde.


    Vous reconnaissez le i cyrillique en minuscule (и), le tréma, le circonflexe, le caron, la cédille … et encore plein d'autres cas de la diacritique latine.


    Codons !


    Je n'ai trouvé aucune explication sur cette locale dans la documentation Android, probablement que les cas concrets d'utilisation sont explicités dans les sources.

    En attendant de lui trouver un sens, faisons-en un easter-egg :  si un autre développeur utilise mon app en Accented English, autant lui être agréable et être raccord avec le reste de son terminal.

    Le code de la locale est zz_ZZ (pays région) il convient de créer "values-zz" et d'y placer le bon fichier "strings.xml", fidèle reflet de values/strings.xml !

     En attendant de mettre la main sur la table de conversion, je vous propose celle-ci :
    'a' : "ǎ", 'b' : "ƃ", 'c' : "č", 'd' : "ď", 'e' : "é",
    'f' : "ƒ", 'g' : "ǧ", 'h' : "ℏ", 'i' : "ì", 'j' : "ĵ", 'k' : "ķ", 'l' : "ł",
    'm' : "ɱ", 'n' : "и", 'o' : "ō", 'p' : "ρ", 'q' : "ʠ", 'r' : "ŕ", 's' : "ś",
    't' : "ţ", 'u' : "ű", 'v' : "ʋ", 'w' : "ŵ", 'x' : "ẍ", 'y' : "ẏ", 'z' : "ž",
    
    'A' : "Â", 'B' : "Ɓ", 'C' : "Ç", 'D' : "Ð", 'E' : "Ë", 'F' : "Ƒ", 'G' : "Ǧ",
    'H' : "Ȟ", 'I' : "Í", 'J' : "Ĵ", 'K' : "Ķ", 'L' : "Ł", 'M' : "Ḿ", 'N' : "Ň",
    'O' : "Ô", 'P' : "Ƥ", 'Q' : "Q", 'R' : "Ŕ", 'S' : "Ş", 'T' : "Ť", 'U' : "Ü",
    'V' : "℣", 'W' : "₩", 'X' : "Ẋ", 'Y' : "¥", 'Z' : "Ż"

    Le visuel est cohérent avec les choix faits pour Android.

    Même si la conversion est en fait triviale, il est possible de l'automatiser avec quelques lignes de python :
    Utilisation : ./script.py input.xml output.xml
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*- 
    
    '''
    __author__ = "Cekage"
    __copyright__ = "Copyleft 2013, Cekage Studio"
    __credits__ = ["cekage", "fileformat"]
    __license__ = "WTFPL"
    __version__ = "1"
    __maintainer__ = "cekage"
    __email__ = "android.dev@cekage.net"
    __status__ = "ƤŔÔÐÜÇŤÍÔŇ"
    
    # Ǧŕééţž ţō http://www.fileformat.info/info/unicode/category/Ll/list.htm
    # Ǧŕééţž ţō http://www.fileformat.info/info/unicode/category/Lu/list.htm
    '''
    
    import sys
    import getopt
    import os
    from xml.etree import ElementTree
    
    convert_table = { 'a' : "ǎ", 'b' : "ƃ", 'c' : "č", 'd' : "ď", 'e' : "é",
    'f' : "ƒ", 'g' : "ǧ", 'h' : "ℏ", 'i' : "ì", 'j' : "ĵ", 'k' : "ķ", 'l' : "ł",
    'm' : "ɱ", 'n' : "и", 'o' : "ō", 'p' : "ρ", 'q' : "ʠ", 'r' : "ŕ", 's' : "ś",
    't' : "ţ", 'u' : "ű", 'v' : "ʋ", 'w' : "ŵ", 'x' : "ẍ", 'y' : "ẏ", 'z' : "ž",
    
    'A' : "Â", 'B' : "Ɓ", 'C' : "Ç", 'D' : "Ð", 'E' : "Ë", 'F' : "Ƒ", 'G' : "Ǧ",
    'H' : "Ȟ", 'I' : "Í", 'J' : "Ĵ", 'K' : "Ķ", 'L' : "Ł", 'M' : "Ḿ", 'N' : "Ň",
    'O' : "Ô", 'P' : "Ƥ", 'Q' : "Q", 'R' : "Ŕ", 'S' : "Ş", 'T' : "Ť", 'U' : "Ü",
    'V' : "℣", 'W' : "₩", 'X' : "Ẋ", 'Y' : "¥", 'Z' : "Ż"}
    
    def accentualize(text):
        ''' returns text with all known chars replaced by accented one '''
        
        accentualized=""
        for char in list(text):
            if char in convert_table.keys():
                accentualized += convert_table[char]
            else:
                accentualized += char
        return accentualized
    
    def convertXML(xmlfrom,toxml):
        ''' reads xmlfrom, loads <string>, accentualizes the text and finally writes to toxml '''
        
        document = ElementTree.parse(xmlfrom)
        resroot = document.getroot()
        
        for string in resroot.findall('string'):
            string.text =  accentualize(string.text)
            
        document.write(toxml,encoding='UTF-8',xml_declaration=True)
    
    def main():
        if len(sys.argv) < 3:
            sys.exit('Üśǎǧé: %s ìиρűţ.ẍɱł ōűţρűţ.ẍɱł' % sys.argv[0])
    
        if not os.path.exists(sys.argv[1]):
           sys.exit('ËŔŔÔŔ: %s ŵǎś иōţ ƒōűиď!' % sys.argv[1])
        
        convertXML(sys.argv[1],sys.argv[2])
    
    if __name__ == "__main__":
        main()
    
    Voilà ce que ça donne :

    Quelques limites à cette locale.

    Passer à cette locale va rendre votre terminal instable le temps son utilisation, si vous avez besoin de stabilité ne l'utilisez pas en permanence.

    Voici deux briques de base du système android qui vont tôt ou tard vous poser problème :
    • Settings.apk ( l'application Parametres )
     
    • Google Search




    Enjoy :-)

    2013-07-24

    MasterKey : du cache-cache au root.

    C'est à l'équipe de sécurité BlueBox que l'on doit la paternité du bug MasterKey. Avant que la présentation officielle de la faille à la BlackHat 2013 ne soit faite, les détails donnés ont suffit à d'autres chercheurs chevronnés pour la trouver par leurs propres moyens.

    Si dans un premier le temps le buzz était alimenté par les "99%", il est ensuite un peu retombé car la faille ne semblait destinée qu'au cache-cache. Saurik a dévoilé il y a quelques jours comment chainer MasterKey aux outils de développement d'Android pour cette fois-ci passer root. Du coup, doit-on avoir peur de cette faille ?

    Si vous avez du contenu professionnel sensible sur votre smartphone, il est temps de l'effacer. Si vous avez encore des smartphones sous scellés, il est temps de dumper les bases sqlite !

    2013-06-29

    État de l'art de la triche sur Ruzzle… et plus encore !

    mise à jour 2/07 : Présentation de Ruzzle+GIF et synthèses des manipulations des vidéos.

    Intro

    What you must learn is that these rules are no different than the rules of a computer system...some of them can can be bent. Others...can be broken. Understand?  - Morpheus

    Cette réplique de Matrix illustre assez bien ma conception de l'informatique en général et dans les jeux vidéos en particulier. Je triche, je cheat, je n'ai acun esprit de fair play, je ne respecte pas les règles du ou des développeurs mais je respecte les miennes : utiliser, comprendre, détourner, retourner. Bref … corrompre !

    La première modification que j'ai apporté au Ruzzle concernait l'horloge. Mes manches durent 4 minutes, celles de l'adversaire 2. Malgré cet avantage mes adversaires arrivaient à taper des scores équivalents aux miens. Diable ! MAIS TOUT LE MONDE TRICHE !!!

    2013-06-08

    Listes des raccourcis Emoji/Unicode pour le clavier Android stock.

    Faire un coeur en emoji
    La version 4.2 (JellyBean) d'Android apportait à nos smartphones le support des emojis. Ce sont des icônes, colorées, très populaires au Japon et portée à l'attention du très grand public européen par Apple avec iOS.

    En réalité nous n'avons pas affaire à des vrais emojis, mais à des caractères Unicode (v5/v6). De ce constat découle quatre conséquences, importantes à comprendre:
    • Les caractères sont monochromes
    • Les caractères doivent être dans la police choisie pour l'interface.
    • Les caractères 24bits comme le picto "feu"  sont affichables, copiables et collables. ⚠ Seuls les caractères unicodes 8 et 16 bits sont gérés par le dictionnaire.
    • Les VRAIS emojis ne sont pas gérés par Android de base (mais certaines ROMs comme CyanogenMod savent les afficher).
     Les images affichées dans le tableau qui suit dépendent de la police choisie pour consulter cette page web. Quelques-un de ces caractères sont par exemple invisibles avec un Android AOSP !