Programmation
Tuesday, 10 February 2015
|
Écrit par
Grégory Soutadé

Logo gPass

Petit rappel : gPass est un gestionnaire de mot de passes en ligne. C'est une alternative libre à lastpass. Il permet d'héberger un serveur de mot de passe, qui stockera un mot de passe fort et unique pour chaque site web. Les mots de passes sont chiffrés par une "clé maître" que seul l'utilisateur connaît et sont remplacés à la volée dans le formulaire d'authentification.

Voici la version 0.6 de gPass. Outre les quelques modifications esthétiques de l'addon (ajout des icônes), l'apport majeur de cette version est la compatibilité avec le navigateur Chrome ! Ça a demandé un peu de travail, mais finalement ce n'était pas si compliqué.

Attention, Chrome est très pointilleux sur la sécurité, et le mélange des contenus normaux (http) et sécurisés (https) est mal vu. Il se peut donc que la démo ne fonctionne pas, car le certificat utilisé est auto signé. Donc, à moins de le rajouter explicitement, il risque d'y avoir des soucis.

Autre fonctionnalité "cachée" : les shadow logins (ou identifiants fantômes en français). C'est un mécanisme qui empêche un utilisateur mal intentionné de télécharger la base de données ou de la supprimer si celle-ci n'est pas protégée par une identification. En effet, au lieu de retourner directement les couples nom d'utilisateur/mot de passe (chiffrés bien sûr), le serveur retourne une "image". Il s'agit d'une suite aléatoire qui devra être chiffrée avec la clé maître pour obtenir un jeton d'accès, qui lui permettra de récupérer le couple sus-cité et de le supprimer si nécessaire.

Mais, comme cela requiert beaucoup de temps de processeur, c'est désactivé par défaut.

Les addons sont disponibles ici (firefox) et (Chrome). La partie serveur est à télécharger sur la page du projet.

Tuesday, 23 December 2014
|
Écrit par
Grégory Soutadé

Capture d'écran IWLA

C'est mon cadeau de noël à moi : IWLA. Il s'agit, basiquement, d'un clone d'AWSTATS. Pour ceux qui ne connaissent pas, awstats est un analyseur de log (journal des entrées) d'un serveur web (ce dernier faisant aussi l'analyse des logs ftp, ssh, mail...).

C'est un projet qui me tenait à cœur depuis longtemps et, mine de rien, il y a pas mal de boulot juste pour faire des additions !

IWLA a été pensé pour être le plus modulaire possible. Contrairement à awstats qui est complètement monolithique (tout le code dans gros un fichier PERL), l'extraction des statistiques et l'affichage de celles-ci passe par des plugins (hormis les opérations de base). On peut donc ajouter/retirer/modifier à loisir des modules et obtenir exactement ce que l'on veut (et ce de manière très simple). Chaque module va s'occuper de sa partie, voire modifier le résultat des modules précédents !

L'autre avantage (ou inconvénient), est qu'IWLA génère uniquement des pages statiques (en plus de pouvoir les compresser), ce qui accélère la visualisation. Côté design, il reprend le thème d'awstats (ça aurait été beaucoup plus moche si je l'avais fait moi-même) : un design simple qui va à l'essentiel !

Mais ce n'est pas tout, les données (robots, moteurs de recherche), sont directement extraites d'awstats !

Pour finir de troller, IWLA est écrit en Python, ce qui est bien plus moderne :)

Le tout est disponible sous licence GPL sur ma forge. Amusez-vous bien !

Wednesday, 29 October 2014
|
Écrit par
Grégory Soutadé

Direct access to physical address is a bad idea, but sometimes, for debug we need it. The trick used below is to disable MMU for only one instruction that do the read with fully configured environment and then re enabling MMU. Read and enable instructions should be in the pipe. The code works for arm11 but should also works for arm9 and maybe CortexA 32 bits series. Primitives has been found in FreeBSD 10 source code (sys/arm/arm/).

read_arm_phys_addr() must be called in supervisor mode (kernel mode).

#include <stdint.h> /* CPU control register (CP15 register 1) */ #define CPU_CONTROL_MMU_ENABLE 0x00000001 /* M: MMU/Protection unit enable */ #define CPU_CONTROL_DC_ENABLE 0x00000004 /* C: IDC/DC enable */ #define CPU_CONTROL_WBUF_ENABLE 0x00000008 /* W: Write buffer enable */ #define CPU_CONTROL_BPRD_ENABLE 0x00000800 /* Z: Branch prediction enable */ #define CPU_CONTROL_IC_ENABLE 0x00001000 /* I: IC enable */ uint32_t read_arm_phys_addr(void* addr) { uint32_t value; __asm __volatile ( // Load address "mov r0, %1\n\r" // Disable IRQ, FIQ and abort "cpsid ifa\n\r" // Disable MMU and cache "mrc p15, 0, r1, c1, c0, 0\n\r" "bic r2, r1, %2\n\r" "bic r2, r2, %3\n\r" "bic r2, r2, %4\n\r" "mcr p15, 0, r2, c1, c0, 0\n\r" "nop\n\r" "nop\n\r" "nop\n\r" // Read data "ldr r3, [r0]\n\r" // Enable MMU "mcr p15, 0, r1, c1, c0, 0\n\r" "nop\n\r" "nop\n\r" "nop\n\r" // Enable IRQ, FIQ and abort "cpsie ifa\n\r" "mov %0, r3\n\r" : "=r" (value) : "r" (addr), "i" (CPU_CONTROL_MMU_ENABLE | CPU_CONTROL_DC_ENABLE | CPU_CONTROL_WBUF_ENABLE), "i" (CPU_CONTROL_IC_ENABLE), "i" (CPU_CONTROL_BPRD_ENABLE) : "r0", "r1", "r2", "r3"); return value; }
Thursday, 28 August 2014
|
Écrit par
Grégory Soutadé

Logo gPass

Mise à jour mineure de gPass, mon gestionnaire de mot de passe en ligne, libre et auto hébergé (un concurrent de lastpass donc) pour Firefox.

Rien d'extraordinaire cette fois. La mise à jour affiche message quand le mot de passe est remplacé, mais que le formulaire n'est pas soumit. Elle fait suite à la commande "@_" introduite dans la version 0.5.

PS : J'ai même eu droit à une validation expresse des développeurs de Firefox : moins de 30 minutes entre la soumission et l'acceptation !

Friday, 22 August 2014
|
Écrit par
Grégory Soutadé

Encore un de mes petits outils. Les Windowsiens ne savent pas combien la ligne de commande peut être rapide et puissante comparé aux cliquodrômes graphiques ! Depuis que j'ai découvert "wget" (téléchargement en ligne de commande) il y a quelques années, je ne peux plus m'en passer. Principalement pour une bonne raison : la reprise après arrêt. Comme Firefox en son temps, il permet de stopper le téléchargement et de le reprendre après (surtout en cas d'échec ou de coupure réseau). wget (comme curl) supporte plein de protocoles et d'options (http, https, ftp, login...), mais il y a une fonctionnalité manquante : le téléchargement en parallèle.

Certains sites limitent la bande passante par connexion, mais pas par IP, donc si on utilise plusieurs connexions, on augmente la bande passante totale !

J'aurais aimé implémenter cette fonctionnalité directement dans wget et/ou curl, mais ils sont vraiment gros et c'est une modification assez intrusive. Donc, j'ai créé gget. gget est assez petit (~500 C loc), il est basé sur libcurl et supporte seulement HTTP sans authentification. Les principales fonctionnalités sont :

  • Téléchargement en parallèle (3 connexions par défaut)
  • Reprise après arrêt (par défaut)
  • Limitation de la bande passante (optionnelle)
  • Possibilité de définir son "user agent" (identification du navigateur)

Le code source est disponible sur ma forge sous licence GPLv3. Il y a une version compilée pour Linux.

J'ai ajouté le support pour Windows, il compile parfaitement avec mingw64, mais plante à l'exécution... J'ai abandonné après m'être battu plusieurs jours sous Windows avec CodeBlocks et DevCPP. C'est un système détestable pour faire du développement hors Visual C++ !! Si quelqu'un souhaite proposer un correctif, il est le bienvenu !