Reverse C++ et RTTI

Magazine
Marque
MISC
Numéro
61
Mois de parution
mai 2012
Spécialités


Résumé

Dans le cadre d'un reverse, le langage utilisé par le développeur peut être une précieuse source d'informations. En particulier, le C++ offre la possibilité de déterminer le type d'une variable pendant l'exécution. Cela implique la présence de renseignements sur les classes dans le binaire. Nous allons voir quelles informations doivent être présentes, comment elles sont stockées par le compilateur de Microsoft (cl.exe) puis comment les retrouver pour reconstruire automatiquement le graphe d'héritage. 


Le script d'exemple ainsi que l'ensemble des codes sources utilisés dans cet article sont téléchargeables à l'adresse www.r-3-t.org/ms_rtti.7z.

1. Rappel sur le langage C

Lorsqu'un logiciel est écrit en langage C, il est relativement aisé d’en déduire les structures utilisées. Au paragraphe 6.7.2.1 du standard [1], on peut lire :

« Within a structure object, the non-bit-field members and the units in which bit-fields reside have addresses that increase in the order in which they are declared. A pointer to a structure object, suitably converted, points to its initial member (or if that member is a bit-field, then to the unit in which it resides), and vice versa. There maybe unnamed padding within a structure object, but not at its beginning. »

En d'autres termes, il existe une correspondance directe entre le code source C décrivant une structure et le code assembleur généré. Par exemple, la structure suivante :

typedefstruct {

Cet article est réservé aux abonnés. Il vous reste 96% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite


Articles qui pourraient vous intéresser...

CVE-2020-2805 : utiliser cent fois une vulnérabité pour casser cent JVM

Magazine
Marque
MISC
Numéro
116
Mois de parution
juillet 2021
Spécialités
Résumé

Après un article sur une confusion de type [1] et sur la sérialisation [2], il faut bien que l’on vous présente une combinaison des deux avec en bonus, un TOCTOU et des objets pas vraiment immuables dedans. Eh oui ma p’tite dame, tout cela est bien dans le CVE-2020-2805 la dernière vulnérabilité Java qui permet de s’échapper de la sandbox. Du code Java c’est comme Freddie, ça veut toujours se libérer.

Résumé des attaques publiées sur les TPM

Magazine
Marque
MISC
Numéro
115
Mois de parution
mai 2021
Spécialités
Résumé

Les TPM, bien que protégés face aux attaques physiques, et certifiés à un bon niveau de sécurité par les Critères Communs (EAL4+ au minimum), ont subi depuis une vingtaine d’années quelques attaques, montrant qu’ils ne sont pas la contre-mesure inviolable pour garantir l’intégrité logicielle des plateformes numériques. Cet article se propose de résumer les principales vulnérabilités remontées au fil du temps sur les TPM du marché.

Une nouvelle méthode d’imagerie tridimensionnelle pour la rétro-ingénierie des circuits intégrés

Magazine
Marque
Hackable
Numéro
37
Mois de parution
avril 2021
Spécialités
Résumé

La rétro-ingénierie matérielle, et plus particulièrement la rétro-ingénierie du silicium, trouve très rapidement ses limites dans les attaques non invasives où la puce reste fonctionnelle et intègre. Pour pouvoir analyser en profondeur un circuit logique, il faut aujourd’hui forcément passer par une décapsulation et une déstratification, ce qui implique alors la destruction inévitable de la puce. Ces méthodes destructives étaient les seuls moyens d’accéder aux différentes couches d’une puce de silicium et donc de pouvoir reconstituer tout le circuit logique de celle-ci. Mais récemment, des chercheurs ont proposé une nouvelle méthode d’imagerie tridimensionnelle des circuits intégrés, d’abord pour un usage industriel, mais aussi inédit pour la rétro-ingénierie du silicium, qui permet l’analyse en profondeur, sans passer par les processus destructeurs habituels.

Les protections des Secure Elements contre les attaques physiques

Magazine
Marque
MISC
Numéro
114
Mois de parution
mars 2021
Spécialités
Résumé

Écrire du code sécurisé sans bug ni vulnérabilité n’est pas suffisant pour protéger un système contre des attaques matérielles. Les circuits sécurisés, ou Secure Elements, sont de vraies forteresses numériques capables de résister à des attaques évoluées, qui requièrent parfois des moyens colossaux. Que se cache-t-il derrière ces petites puces ?

Stocker ses secrets dans Git, une mauvaise pratique pouvant avoir de lourdes conséquences

Magazine
Marque
MISC
Numéro
114
Mois de parution
mars 2021
Spécialités
Résumé

Dans un rapport datant d’avril 2020, GitLab indique que 18 % des dépôts analysés sur gitlab.com comportaient des problèmes de gestion des secrets. Quelles peuvent être les conséquences liées à ces erreurs ? Quelle stratégie adopter pour gérer au mieux ses secrets ?