Instruction SYSENTER et WRMSR ???

toto8966 Messages postés 18 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 24 novembre 2003 - 25 août 2003 à 17:11
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 3 sept. 2003 à 00:38
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 !

7 réponses

cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
25 août 2003 à 20:44
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/
0
toto8966 Messages postés 18 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 24 novembre 2003
25 août 2003 à 21:15
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
0
cs_Vermifuge Messages postés 75 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 18 septembre 2006
26 août 2003 à 16:31
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
0
toto8966 Messages postés 18 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 24 novembre 2003
26 août 2003 à 16:50
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
29 août 2003 à 00:22
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 :)
0
toto8966 Messages postés 18 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 24 novembre 2003
29 août 2003 à 00:28
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 !
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
3 sept. 2003 à 00:38
Je n'ai pas vu SYSENTER Mais en fait Chrishka utilises des API. Pour SYSENTER, je vais me documenter chez Dr Doobs.

Core Breaker :)
0
Rejoignez-nous