Instruction SYSENTER et WRMSR ???

Signaler
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003
-
CoreBreaker
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
-
Utiliser l'instruction Pentium SYSENTER pour exécuter du code en Ring0 au départ de Ring3, c'est normalement possible !
Seulement, y'a un problème.
Quand on exécute SYSENTER, le processeur va chercher les parmètres d'appel de l'instruction dans un des registres MSR.
Pour pouvoir initialiser un registre MSR, on utilise l'instruction WRMSR (write MSR). Mais pas d'bol, WRMSR ne peut etre utilisée qu'en Ring0 !!!!!
Un truc de dingue quoi ?
Qui a trouvé le moyen de se servir de SYSENTER ... et surtout qui a réussi a utiliser l'instruction WRMSR au départ du Ring3 ... ou plus simplement, qui a réussi a initialiser un registre MSR au départ du mode utilisateur, quel que soit la facon ?
Oui, ... c'est une question a 1000 balles ! suis d'accord ! hi
amicalement a tous !
A voir également:

7 réponses

Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006

Les instructions processeur tel que SysEnter sont faites pour assurer un minimum de sécurité, je doute fort qu'il soit possible de passer en ring0 facilement. Evidement, reste les failles du kernel...( très rares sous nux malheuresement ).

Vermifuge
http://codingskillz.free.fr/
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003

Merci de m'avoir répondu, mais ta réponse bien que bien sympathique ne m'apporte pas grand chose.
L'instruction SYSENTER est concue pour permettre l'acces au niveau Ring0 depuis une application tournant en Ring3. Il s'agit "presque" d'un "callgate" mais optimisé vitesse. La doc Intel présente en tout cas cette instruction de cette façon. Ma question était, ... pour utiliser SYSENTER (reconnue par l'assembleur en ligne de Delphi, au passage ...) il faut charger les bonnes valeurs dans 3 registres MSR. Comment faire (par quelle méthode) puisque l'instruction WRMSR (write MSR) est une instruction inaccessible en Ring3. Il y a peut etre une autre méthode d'atteindre les registres MSR, ou un moyen de débloquer WRMSR.
Tout grand merci de ta réponse Vermifuge.
Si tu sais qq chose de plus précis, n'hésite pas !
amicalement
Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006

Désolé, je n'ai jamais étudié ces commandes, mais je viens de coir qu'une source à été ajoutée sur le site qui devrait de permettre de réaliser ton souhait. Cependant, quand je serais un peut moins occupé qu'en ce moment, je jetterais un coup d'oeuil dans les docs intel pour voir ce que je peux trouver. Je te recontacterais à ce moment là.

@+
Vermifuge
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003

Merci de ta réponse.
Cherche pas ! L'instruction SYSENTER n'est pas utilisable pour passer simplement en Ring0 depuis le mode utilisateur Ring3. En fait, avant d'utiliser SYSENTER, il faut initialiser 3 registres MSR du processeurs. La seule instruction capable de le faire est WRMSR (Write to MSR). Et bein, WRMSR est uniquement accessible en Ring0 !!! pour faire rapide (très), SYSENTER permet effectivement de passer de Ring3 en Ring0, a condition que l'os soit au courant et te l'autorise avant. Tu parles d'une solution ! hi ! J'ai contacté " Pierre Maurette " par mail a ce sujet, il parle de l'instruction SYSENTER dans son bouquin "assembleur" ... il m'a expliqué ! Au passage, Pierre Maurette, super gars et super bouquin.
Oui, la source de l'ami Chris pour passer en Ring0 via le procédé du CallGate .. j'ai vu ... je l'ai contacté ! pas mal du tout ! Je suis en train d'essayer de la transcrire pour la faire tourner sous l'assembleur en ligne Basm de Delphi ... mon but final ! Avoir une procédure en delphi (a laquelle je passe l'adresse de "mon-code", capable de faire tourner "mon-code" en Ring0 ... et retour ensuite Ring3 ! Le CallGate, je connaissais ... je cherchais la d'sus, mais Chris la fait ! Bravo Chris ..
Bon, te laisse, encore merci a toi !
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Je savais qu'un callgate pouvait le faire mais à condition que le segment de code qui exécute le callgate soit un segment dit docile (flag de type dans le descripteur de segment) mais l'OS ne mets pas ce flag.

Ce bout de code pour passer en Ring0 m'intéresse. Pourrais-tu me le passer STP ou un lien pour l'obtenir.

Merci.

Core Breaker :)
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003

va voir dans les dernières sources déposées.
Ring0 sous XP de Chrishka .. en MASM
je suis en train d'essayer d'implémenter ca en BASM + DELPHI ... me faudra un peu de temps !
Moi, j'en étais tjs a la théorie ... mais sur base de cette théorie (via forum), Chrishka a été plus loin !
bravo a lui !
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Je n'ai pas vu SYSENTER Mais en fait Chrishka utilises des API. Pour SYSENTER, je vais me documenter chez Dr Doobs.

Core Breaker :)