Hardening consulting

Mieux vaut tard que jamais ! Il y a quatre ans, je faisais un talk sur FreeRDS à la XDC 2014 où j'annonçais que nous en ferions l'open sourcing sans doute fin 2014, et déjà c'était quelque chose d'initialement prévu pour Septembre 2014. Finalement l'openSourcing tant attendu est là, mais en Avril 2018: juste un tout petit peu de retard !


Présentation

Du retard

Alors évidement il s'en est passé des choses depuis fin 2014. Pour commencer, le nom du projet a changé: le nom FreeRDS appartenait à un des membres du projet, et ce sur quoi nous avons travaillé a radicalement divergé de la collaboration commune des débuts, d'où la nécessité de changer de nom. Nous avions pensé à fireRDS,

Lire la suite…

Suite à cette petite vidéo sur meson, j'ai eu envie de jouer un peu avec ce logiciel pour voir ce qu'il valait en pratique. J'ai donc fait un premier essai sur un sous-projet d'OGON qui utilise cmake comme système de build.


CMake mon amour

J'entends dire partout: tout le monde déteste cmake, mais pour plein de mauvaises raisons, plein de projets l'utilisent. Je ne fais pas exception à la masse: à chaque fois que je dois toucher à du cmake, cela commence par une appréhension, et le langage est tellement moche que même quand j'arrive à faire ce que je veux, je n'ai jamais l'impression d'avoir fait du beau boulot. Et puis souvent, ça ne se passe pas comme je veux, et là les phases de débuggage sont toujours épiques. Je ne dois vraiment pas avoir la philosophie cmake, parce qu'à chaque fois j'ai l'impression que le logiciel fait le contraire de ce à quoi je m'attendrais. Bref, dés qu'il y a du cmake à faire j'y vais à reculons.

Lire la suite…

Une de mes conférences préférée est la LCA, la Linux Conference Australia. Les talks sont toujours de très bonne qualité et avec un très bon niveau technique. Il y a quelques années, c'est un talk de Daniel Stone qui m'avait donné envie d'essayer des trucs avec Wayland.

Lire la suite…

Un peu de RDP pour bien commencer l'année 2018 (avec tous mes voeux), dans ce billet je vais parler d'une implémentation permettant de redimensionner la fenêtre dans xfreerdp.

Contexte

Dans FreeRDP, on disposait déjà de l'option smart-sizing qui permet de demander à voir la fenêtre avec un certain ratio: 100, 150 ou 180 pour cent.

Avec la spécification MS-RDPEDISP, le client peut envoyer la configuration de ses écrans au serveur en temps réel, ce qui permet notament au serveur de réagir quand le client branche ou débranche un écran, ou bien que la résolution change. Par exemple avec mstsc en mode plein écran, si on change la résolution quand il est iconomisé, et qu'on le ramène au premier plan.

Mais on peut faire un usage détourné de cette spécification pour que la fenêtre de FreeRDP devienne redimensionnable: en gros on annonce comme taille d'écran, la taille de la fenêtre client.

Lire la suite…

J'ai eu l'occasion pour une mission avec un client de regarder du coté du H264 et du décodage matériel en utilisant notamment VAAPI. L'occasion de parler un peu d'un sujet que je découvrais.

Mais c'est quoi VAAPI ?

Dixit ubuntu France:

Video Acceleration API (abrégé en VA API, VA-API ou VAAPI) est une bibliothèque open source (libVA) 
et une interface de programmation qui visent à permettre le rendu vidéo par le processeur graphique 
sur les systèmes dérivés d'UNIX (comme Linux ou FreeBSD) utilisant X Window System.

En fait cette API est aussi utilisable "en direct" avec un périphérique DRM, par exemple avec un DRI render node: bien pratique pour offloader le rendu sur le GPU sans interface graphique. Mais il est aussi possible, bien sûr, de s'en servir depuis wayland.

Dans l'idée on nourrit le GPU avec du flux vidéo (H264, VP9 ou MPEG) et il fait le rendu directement dans une surface.

Lire la suite…

Et oui encore un article sur du RDP ! J'ai fait quelques expériences avec la reconnection automatique et je profite de cet article pour en parler un peu.


La reconnection automatique

La reconnection automatique permet au client RDP de se reconnecter à un serveur quand il y a eu un coupure, et ceci sans ressaisir les logins / mots de passe. La coupure peut être due à une coupure réseau ou même un crash serveur. L'exemple typique consiste à rabattre l'écran de son portable avec une connection RDP en cours, et quand on réouvre le client se reconnecte tout seul.


Lire la suite…

En regardant les visites Piwik, je me suis aperçu qu'il y avait un certain intérêt avec mon article précédent sur le DJI Phantom 3. J'ai aussi vu qu'une personne a le même objectif que moi: faire un logiciel pour diriger son Phantom 3 à partir d'un ordinateur portable.

Il est sans doute temps de parler un peu de mes découvertes sur le protocole qui est parlé entre le Phantom 3, la télécommande, la caméra et l'application mobile.

Les bases du protocole

Entête

Les paquets sont découpés en deux: une entête et une charge utile.

L'entête a le format suivant:

-------------------------------------------------------------------------
| 0 0 0 0 0 0 0 0 | 0 0 1 1 1 1 1 1 | 1 1 1 1 2 2 2 2 | 2 2 2 2 2 2 3 3 |
| 0 1 2 3 4 5 6 7 | 8 9 0 1 2 3 4 5 | 6 7 8 9 0 1 2 3 | 4 5 6 7 8 9 0 1 |
|-----------------------------------------------------------------------|
|  magic - 0x55   |    payload length    |  version   |     crc8        |
-------------------------------------------------------------------------

Il y a un octet magique à 0x55. Il est suivit par un champs lenVer sur 16 bits. Il contient la taille de la charge utile et la version du protocole sur les 6 bits du haut. Enfin sur le dernier octet, on a une crc8 des 3 premiers octets.

La charge utile est donc limitée à 4096 octets. Comme l'octet magique et que la version du protocole ne changent pas, seul la taille de la charge utile influence le calcul de la crc8. Ce qui veut dire qu'on peut même faire une grosse table qui donnerait le résultat en fonction de la seule information de la taille.

Lire la suite…

Un petit billet suite à mes aventures récentes autour du multi-écran dans firerds (donc coté serveur). Sur le papier celà semblait relativement simple, une petite balade de santé. Mais comme souvent avec RDP j'ai eu plein de surprises, mauvaises évidement ;)

Expérimenter le multi-écran

Pour commencer, il faut une plate-forme de test. Le plus simple, c'est de mettre deux écrans sur un PC et de lancer un xfreerdp:

# xfreerdp /v:myserver /multimon /f

Lire la suite…

Je n'avais jamais regardé du coté d'Android, mais suite à l'achat du drone et de l'analyse de la capture, j'ai dû mettre les mains dans le cambouis et regarder un peu comment était faite l'application de DJI. Cet article va permettre de faire une introduction aux techniques de reverse d'applications Android.

Lire la suite…