Monday, 30 August 2021
|
Écrit par
Grégory Soutadé

Logo Odyssea

Après une année off, retour de la tournée nationale pour Odyssea et sa célèbre étape Cannoise sur le front de mer (boulevard du midi, Louise Moreau) le dimanche 19 septembre 2021. Comme il va falloir en prendre l'habitude, la course est déclinée en présentiel et distanciel. Pour la première option, plusieurs distances sont possibles :

  • 10km course, départ 9h15
  • 1km enfant, départ 11h
  • 5km course, départ 11h15
  • 5km marche départ 11h20

Pour les courses, le certificat médical (de moins de 1 an) reste de mise, ainsi que le pass sanitaire. L'objectif des organisateurs est de 20 000 km parcourus (et non plus des euros collectés). Les tarifs n'ont pas évolués : 15€ (10km), 12€ (5km), et 4€ (4km).

Retour : Un grand ciel bleu, soleil (22°C/24°C), vent de face non négligeable. Des conditions agréables donc, mais pas idéales pour réaliser une performance. Cette année a marqué le retour de la compétition sur le créneau de septembre, ce qui ne s'était plus vu depuis 2016 (et le parcours du boulevard Carnot). Malheureusement, je pense que l'obligation du pass sanitaire en a découragé beaucoup. Au total ce sont seulement 1 300 participants (sur place et à distance) qui se sont élancés, ce qui a quand même permis de récolter 11 500€. On reste loin du record des 3 100 participants de 2019 (et ses 24 000€). J'ai moi même hésité à y participer, mais la courte préparation donnant de bons résultats, je suis content d'avoir pu sauter le pas ! Sur un objectif fixé entre 4'40 et 4'45, j'ai réalisé une moyenne de 4'42 (deuxième meilleure performance à égalité avec 2017), sachant que sans le vent, la barre des 4'40 aurait pu être franchie. Sans la pression d'un temps, j'ai pu garder un rythme constant, sans jamais passer dans le rouge, ce qui a rendu la course très agréable. Côté classement, bien que toujours anecdotique, j'en suis à 37/228. Merci aux bénévoles et à l'organisation d'avoir pu rendre ce moment accessible. Pour les participants, Odyssea a mis en place un questionnaire post course accessible ici

Sunday, 22 August 2021
|
Écrit par
Grégory Soutadé

La prochaine élection présidentielle (et législative) se profile. À la rentrée, nous aurons droit à la déclaration de candidature de la plupart des prétendants, passés ou non par une primaire. Force est de constater que malgré la succession des têtes diverses et variées à la plus haute fonction de l’état, il n'y a pas vraiment eu de changement important de trajectoire politique, tout au mieux quelques mesurettes (le plus amusant étant de voir un président de "droite" mettre en œuvre des mesures de "gauche" et inversement). En parallèle, le GIEC a remit le premier volet de son sixième rapport (en 30 ans). 1500 pages qui vont permettre d'alimenter les toilettes des différents bureaux présidentiels.

Car malgré les avertissements répétés, les signes évidents (inondations, incendies, canicules, sécheresses) à répétition (l'exceptionnel devient la norme), il n'y a pas de véritable volonté de changement profond (Le changement, c'est maintenant disait-il). Car l'on souhaite que les choses s’améliorent sans avoir à modifier notre quotidien confortable. Car sans mesures coercitives, chaque acteur va poursuivre son grand n'importe quoi jusqu'au maximum de ses possibilités, en dépit du bon sens. Il ne faut pas non plus tout voir en noir. L'on peut sentir ça et la une certaine brise, avec des personnes impliquées au quotidien, qui ont compris la nécessité de faire les choses différemment et qui s'y attachent, même si au regard de la population globale cela reste bien trop faible.

Sur cette thématique, je me suis amusé à imaginer un programme électoral de transition visant à modifier en profondeur la société afin d'arriver à tenir les objectifs de la COP21 avant 2030. Parce que l'on n'a plus le temps d'attendre que les différentes politiques molles portent leurs fruits. Ici, point de mesure d'intention, point de "favoriser", "tendre", mais des mesures claires, précises, soutenables pour l'économie, applicables, visant a interdire (ou du moins fortement limiter) les comportements toxiques que nous reproduisons depuis trop d'années. Le but étant de sortir de la logique de croissance pour arriver à une logique d’équilibre, de responsabiliser les acteurs (politiques, privés) et les consommateurs. Certaines mesures peuvent paraître inconcevables dans notre façon actuelle de penser et de part nos habitudes, mais il faut arriver a se projeter dans un monde nouveau, plus local, plus lent, plus en lien avec la nature. C'est un monde différent et excitant à la fois car il offre multitude de nouvelles opportunités, de services et de produits à inventer pour respecter un cadre plus restrictif.

Le choix a été fait ici de classer les mesures par ordre d'importance plus que par thème.

Interdiction de circulation pour les véhicules thermiques (ou électriques d'une puissance supérieure à 250W) dans les villes de plus de 50 000 habitants de 9h à 19h (hors samedi, transports en commun, véhicules médicaux, secours et BTP)

Limitation du transport de marchandise à un rayon de 150km. Au delà, il devra se faire par un moyen de fret fluvial, maritime ou ferroviaire

Limitation de la vitesse à 110km/h sur autoroute

Pour les restaurations collectives publiques et privées : limiter à 40% le nombre de repas incluant des protéines animales

Mettre en place le télépéage à 60km/h Afin de limiter les bouchons et redémarrages sur autoroute

Tarifs des péages régulés et uniformisés à 20 centimes/km

Imposer un prix plancher pour les billets d'avion (100€ pour les lignes locales, 200€ pour les lignes Européennes, 400€ hors Europe) Afin de responsabiliser les consommateurs et éviter le dumping des compagnies à bas coût

Suppression des lignes aériennes locales, s'il y a une alternative de 2h30 ou moins en train

Interdiction des pesticides à néonicotinoïdes

Chaque contenant en verre devra être obligatoirement consigné

Interdiction des contenants alimentaires à base de plastique (hors cellophane pour les produits frais)

Obligation de planter des haies d'une hauteur supérieure ou égale à 2m entre chaque parcelle agricole Afin de restaurer la biodiversité et de limiter la propagation des pesticides et des ravageurs

Interdiction totale de l'incinération de déchets verts

Mise en place d'un service de collecte de déchets verts

Prix plancher pour l'achat de matières premières alimentaires Afin de contrer le dumping des pays à bas coût

Limiter l'éclairage public au strict minimum entre 23h et 5h du matin Économies d'énergies, lutte contre la pollution lumineuse

Interdire de l'éclairage des bâtiments professionnels, sauf activité nocturne, et affiches publicitaires entre 23h et 5h du matin Économies d'énergies, lutte contre la pollution lumineuse

Remplacer un lampadaire sur deux par un arbre couvrant Permet de réduire de 2°C à 3°C la température au sol en été

Arborer les places publiques

Obligation d'arborer les parkings nus

Tout travailleur pourra demander jusqu'à 3 jours de télétravail par semaine (si le télétravail est compatible avec ses fonctions)

Investissement dans des lignes de fret ferroviaires

Les nouvelles constructions devront avoir un toit végétalisé

Les nouveaux logements devront être pourvus d'un double circuit d'eau permettant de récupérer une partie de l'eau afin de la réinjecter dans le circuit local Permet de récupérer l'eau non contaminée de la douche, des lavabos et des éviers à destination : de l'arrosage, du remplissage de la cuvette des toilettes ou de ré emploi.

Suppression des quotas des HLM

Toute nouvelle construction sur un terrain naturel (artificialisation des sols) sera soumis à une taxe pour la mairie équivalente à 20% de la valeur finale du bien (terrain + bâti) Afin de responsabiliser les maires vis à vis de l'artificialisation des sols

Taxe sur les piscines de 2000€/an Afin de limiter le volume d'eau perdu inutilement et l'usage massif de sel/chlore

Rétablissement de la taxe d'habitation Afin que chacun participe aux frais de service public de sa commune

Supprimer les avantages fiscaux liés à l'immobilier

Limitation à 20 élèves maximum par classe Car l'éducation est la clé du futur

Suppression des avantages fiscaux supplémentaires à partir de la troisième grossesse Car la population de ne peut pas croître indéfiniment

Suppression de l'impôt sur les héritages, hors forfait pour des héritages > 2M€ Car c'est un impôt injuste

Suppression de l'impôt sur les donations, hors forfait pour les donations > 2M€ Afin de réinjecter l'argent bloqué dans l'économie

Obligation pour la vente à emporter (alimentaire et boisson) d'utiliser des contenants consignés et réutilisables

Mise en places de points de collectes des contenants consignés

Limitation de la publicité audiovisuelle à 10 minutes/heure en une seule coupure maximum (2 pour la radio) Afin de limiter la consommation de masse

Interdiction des panneaux publicitaires vidéo

Bridage du débit des antennes mobiles Afin de limiter la consommation électrique et obliger les concepteurs de site web à les optimiser

Interdiction du transport aérien (commercial) pour les matières végétales et animales Afin de réduire la pollution et la propagation des nuisibles

Suppression pour les entreprises de l’amortissement comptable de l'achat de matériel Afin d'éviter le renouvellement systématique et inutile

Interdiction de construire à moins de 100m du littoral

Augmenter la durée d’indemnité chômage à 3 ans le temps d'assurer la transition Car une partie des emplois actuels ne pourront être ni conservés, ni transformés

Créer un office Européen dédié à la lutte contre les feux de forêt et à la reforestation des zones sinistrées

Créer des camps de vacances accessibles à tous les jeunes jusqu'à 18 ans pour 1€/jour Afin d'offrir des vacances à tout le monde et augmenter la mixité sociale

Légalisation de l'euthanasie pour les patients en phase terminale

Utilisation du surplus d'énergie généré après les pics de de charge afin d'alimenter des mécanismes de génération d'énergies renouvelables (pompage de l'eau, électrolyse...)

Faciliter l'implantation d'éoliennes

Suppression des marchés des matières premières en bourse

Obligation d'émettre les bulletins de paie sous forme électronique, sauf demande expresse de l'employé Pour réduire le nombre d'imprimés

Les programmes scolaires doivent être fixés pour une durée de 5 ans Afin de limiter le renouvellement régulier des manuels

Une demie journée scolaire devra être consacrée par chaque élève à un (ou des) clubs de sport ou culturel, de la primaire à la fin du lycée

Remplacement du défilé national du 14 juillet par des défilés locaux

Mise en place du vote à distance

Interdiction définitive de navigation dans les eaux territoriales pour un armateur coupable d'un dégazement sauvage (en plus de l'amende sine qua non)

Imposer la mise en place d'un système de capture de méthane dans les bâtiments abritant des cheptels de plus de 100 têtes

Limitation des domaines skiable à 25% de la surface totale du massif

Suppression de la retraite présidentielle (hors protection personnelle)

Interdiction des frigos et congélateur ouverts

Limitation du volume sonore des deux roues

Augmentation des effectifs hospitaliers

Limiter la surface de culture du maïs par agriculteur Car le maïs est un très gros consommateur d'eau en été

Wednesday, 04 August 2021
|
Écrit par
Grégory Soutadé

Gâteau anniversaire 11 ans

Petit bilan annuel pour la période 2020/2021. Forcément ce n'est pas un jalon majeur comme ce fut le cas l'année précédente avec les 10 ans bu blog. Pour autant, l'année écoulée a été très positive en terme de fréquentation (+17% de visites et +33% de pages affichées). Car, contrairement à ce que j'aurais pu penser, la pandémie a eu un effet positif sur le nombre de visites (pourtant le blog est orienté technique). D'autant plus que le filtrage opéré par iwla est de plus en plus fin. Ma grave blessure à la cheville n'aura pas non plus plombée l'écriture (nombre d'articles en hausse malgré l'annulation des courses). On est donc dans une bonne année avec des articles de qualité homogène. Satisfaction de cette période : la sortie de libgourou qui fait suite à la rétro ingénierie du RMSDK d'Adobe m'a demandé beaucoup de travail et c'est une véritable fierté d'avoir pu mener ce projet à bien. Les retombées de ces travaux ne se font pas encore sentir dans les statistiques, mais je pense que ce sera un bon accélérateur pour l'année prochaine.

Le concours de l'année précédente s'est terminé sans participant. Néanmoins, je trouve l'idée amusante et décide de le reconduire. Les modalités sont identiques pour cette édition, avec une période d'inscription valable jusqu'au 15 septembre 2021.

Statistiques 2020/2021

  • 26 articles publiés (20, 19, 22, 30, 31, 34, 49, 50, 60, 60)
  • 12 132 visites (10 357, 9 270, 9 580, 9 510, 23 800, 21 300, 25 000, 12 000, 18 000, 9 000)
  • 13.8 Go de données envoyées (16.6, 15.3, 12.5, 17, 17,9, 9, 5.5, 2.7, 2.5)
  • 25 860 pages affichées (19 445, 22 230, 19 887, 20 180, 26 700)

Nombre d'articles publiés Visites Données envoyées Pages affichées

Top 10 :

Un top 10 quasi inchangé (seul le 10e fait son entrée), qui représente 38.5% du trafic total. La moyenne quotidienne s'établit à 33.24 visites/jour. Une bonne année donc et vivement la suivante, qui, on l'espère tous, devrait être plus positive encore !

Monday, 19 July 2021
|
Écrit par
Grégory Soutadé

While developping the reverse of Adobe's library libRMSDK.so, I needed a script to find all dependencies of this library and dependencies of dependencies. All of them must be copied into one folder in order to be packaged. So I wrote this script that parses recursively objdump's ouput. Here is the code :

#!/bin/bash

# Copyright Grégory Soutadé

# This is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with iwla.  If not, see <http://www.gnu.org/licenses/>.
#


#
# Find all dependant shared libraries of a target (using objdump) and copy them into a directory
#


# Options
TARGET=""
OUTPUT=""
ROOT_LIB_DIRECTORY=""
OBJDUMP=objdump
VERBOSE=0
EXIT_ON_ERROR=0
QUIET_NOT_FOUND=0
CLEAN_BEFORE_START=0
COPY_TARGET=0

function debug()
{
    if [ $VERBOSE -eq 1 ] ; then
    echo -e "$1"
    fi
}

function copy()
{
    target=$1
    symlink_name=$2

    if [ ! -e ${target} ] ; then
    debug "${target} not found"
    return
    fi

    debug "cp --no-dereference ${target} ${OUTPUT}"
    cp --no-dereference ${target} ${OUTPUT}

    if [ ! $? -eq 0 ] ; then
    [ ${EXIT_ON_ERROR} -eq 1 ] && exit 1
    return
    fi

    if [ ! -z "${symlink_name}" ] ; then
    echo ln -s `basename ${target}` ${OUTPUT}/${symlink_name}
    ln -s `basename ${target}` ${OUTPUT}/${symlink_name}
    fi

    # Symlink ? Copy target file
    if [ -L ${target} ] ; then
    copy `readlink -e ${target}`
    fi
}

nb_tabs=0
function find_lib()
{
    target="$1"

    if [ ! -e ${target} ] ; then
    debug "${target} not found"
    return
    fi

    nb_tabs=$((${nb_tabs}+1))
    local tabs=""
    for i in `seq 1 ${nb_tabs}`; do
    tabs="${tabs}  "
    done

    dependencies=`${OBJDUMP} -p ${target}|grep NEEDED|sed "s/ \+/ /g"|cut -d' ' -f3`
    for dependency in ${dependencies} ; do
    symlink_name=""
    echo -e "${tabs}${dependency}"
    debug "find ${ROOT_LIB_DIRECTORY} -name ${dependency}"
    file=`find ${ROOT_LIB_DIRECTORY} -name ${dependency}|head -n 1`
    if [ -z "$file" ] ; then
        # Try lib.so*
        file=`find ${ROOT_LIB_DIRECTORY} -name ${dependency}*|head -n 1`
        if [ -z "$file" ] ; then
        [ ${QUIET_NOT_FOUND} -eq 0 ] && echo "ERROR : ${dependency} not found in ${ROOT_LIB_DIRECTORY}"
        [ ${EXIT_ON_ERROR} -eq 1 ] && exit 1
        continue
        else
        symlink_name=${dependency}
        fi
    fi
    # Already copied
    [ -e "${OUTPUT}/${dependency}" ] && continue
    copy $file ${symlink_name}
    find_lib $file
    done

    nb_tabs=$((${nb_tabs}-1))
}

function usage()
{
    echo "Usage : ./find_libs [-O OBJDUMP] [-v] [-e] [-q] [-c] [-C] -t TARGET -o OUTPUT_DIR -l ROOT_LIBDIR"
    echo -e "\t-O OBJDUMP      objdump command"
    echo -e "\t-v              verbose"
    echo -e "\t-e              exit on error"
    echo -e "\t-q              quiet when dependency not found"
    echo -e "\t-c              clean target before start"
    echo -e "\t-C              Copy target in output directory"
    echo -e "\t-t TARGET       first executable or library to analyze"
    echo -e "\t-o OUTPUT_DIR   output directory where to place find libs"
    echo -e "\t-l ROOT_LIBDIR  root directory where to search dependancy libs"
}

while getopts "ht:o:l:O:veqcC" arg; do
    case $arg in
    t)
        TARGET=$OPTARG
        ;;
    o)
        OUTPUT=$OPTARG
        ;;
    l)
        ROOT_LIB_DIRECTORY=$OPTARG
        ;;
    O)
        OBJDUMP=$OPTARG
        ;;
    v)
        VERBOSE=1
        ;;
    e)
        EXIT_ON_ERROR=1
        ;;
    q)
        QUIET_NOT_FOUND=1
        ;;
    c)
        CLEAN_BEFORE_START=1
        ;;
    C)
        COPY_TARGET=1
        ;;
    h)
        usage
        ;;
    *)
        usage
        ;;
  esac
done

if [ -z "${TARGET}" -o -z "${OUTPUT}" -o -z "${ROOT_LIB_DIRECTORY}" ] ; then
    usage
    exit 0
fi

[ ${CLEAN_BEFORE_START} -eq 1 ] && rm -rf ${OUTPUT}

mkdir -p ${OUTPUT} || exit 1

echo ${TARGET}
[ ${COPY_TARGET} -eq 1 ] && copy ${TARGET}

find_lib ${TARGET}

A file version is available here

Sunday, 04 July 2021
|
Écrit par
Grégory Soutadé

Two months ago I released a software that can use librmsdk.so from Adobe in order to retrieve ePub files (with Adobe DRM) from ACSM request files. It was the result of a long work of reverse engineering. The main problem with it is that it requires to run on an ARMv7 platform.

When I published it, I felt I can go further, but I was afraid of counter measures or cryptic algorithms that can be used by Adobe. Nevertheless, thanks to all knowledge acquired by my first reverse attempt I decided to try. In the end, Adobe choose to use standard algorithms with no obfuscation (maybe because it's delivered with a full SDK for clients). Plus, the target library wasn't compiled with code optimization \o/.

So I'm pleased to announce the first release of libgourou. It's a Free and Open Source implementation of ADEPT protocol. It supports :

  • Account signIn
  • Device activation
  • ePub download from ACSM request file

In addition to libgourou, two utils acsmdownloader and activate are provided in order to create a new device and download ePub from your favorite UNIX platform (like Linux x86/amd64 !) without any call to Adobe's code (no ADE, no WINE !).

Like RMSDK, it's based on a client/server model were the client has to implement some system specific functions (network, crypto...). It allows the library to be very portable (it's written in C++ 11).

The library by itself is licensed under LGPLv3 and the client (reference implementation) is under BSD license.

I can now tell it : we have a real alternative to ADE for Linux platforms !

Source are available on my forge

Dernier gif les joies du code Quand les experts sécurité s’avèrent être moins compétents que prévu