IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Ring0 sous XP


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut Ring0 sous XP
    Hello,

    Pour pouvoir placer du code en mode Ring0 jutilise jusqu'a présent le Driver TVicHW32. ( http://www.entechtaiwan.com/tvichw32.htm )
    Ca fonctionne top, rien a dire !
    Mais ... j'aimerais pouvoir passer en Ring0 tout seul, comme un grand !
    Il semble bien que sous Windows XP, cela ne soit pas si facile que ca !
    Faut écrire (semble t il) un KMD, Kernel Mode Driver ... hum !
    Quelqu'un se serait il déja intéressé au sujet.
    Il y a t il un as des as parmis vous qui soit déjà passé "tout seul" en Ring0 sous Windows XP ?
    Je ne demande pas du tout cuit, hi, mais un pti coup de pouce ferait bien plaisir. Toutes les infos sont les bien venues.
    Tout tout grand merci a tous.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    Salut,

    C'est possible sous 95/98/Me, mais je ne crois pas qu'il y ait de hack pour passer en ring0 sous 2000/XP "tout seul comme un grand". C'était relativement simple sous noyau 95 si je me rappelle bien, dommage que ça marche plus. Je crois que ça exploitait une faiblesse qui te permettait d'écrire dans l'idt. J'essaye de retrouver l'article.

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Chris,

    Je crois que ça exploitait une faiblesse qui te permettait d'écrire dans l'idt
    Tu veux dire qu'il n'y avait pas de méthode "officielle" pour passer en mode noyau sous 95?
    Les VXD ne donnaient-ils pas des privilèges noyau ?

    golem
    +++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    J'ai jamais dit qu'il n'y avait pas de méthode officielle, mais ça tient en quelques lignes ce que je te dis, c'est incomparable avec la méthode vxd, ça me semblait correspondre à "tout seul comme un grand"

  5. #5
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    " VXD " ? je vois pas bien ce que c'est !
    Et sur le concept de KMD (Kernel Mode Driver) quelqu'un sait il quelque chose ? Quand on associe Ring0 et Windows XP, sur Internet, on tombe sur cette notion de KMD ! mais pas beaucoup d'info ... comme a chaque fois que l'on fait une recherche sur un sujet pointu.
    Y'a pas un as des as parmis vous qui s'est déja frotté a écrire un KMD ?
    ou qui aurait utilisé avec succes le DDK de Microsoft ?
    personne n'est jamais passé en Ring0 sous XP ? pas sur le site des développeurs Francais, je crois pas ca !

    Je cherche pas du tout cuit, juste des liens, des livres ....
    je repasse juste une Xieme fois jetter un coup d'oel !
    non, me semble que personne n'a jamais réussi a passer en Ring0 sous Xp ... ah bon ! sujet taboo ???
    il semble bien que oui !!!!!
    Tout grand merci a tous

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Par les SEH
    Par fake en modifiant CS et SS pour faire croire à l'OS que t'es en ring0
    retour dans le prog

    Yavait un APJ (Assembly programming Journal) qui parlait que de ça ya environ 2 an, peut être moins.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 91
    Points : 96
    Points
    96
    Par défaut
    Hello, c'est pas con du tout le coup du SEH (j'y avais pas pensé). Cependant un truc me chagrine, si tu changes de CS pour un CS qui se trouve en Ring 0, comment être sûr qu'à cet endroit où tu vas installer ton bout de code cette partie de mémoire que tu vas écraser ne sert pas déjà (Et y a de grandes chances que ce soit le cas). En majorité ce sont justement les VxD qui tournent en Ring0 (pas bon du tout d'écrire par dessus).

    Bon par contre, attribuer le CPL0 (Ring 0) au bout de code actuel c'est possible. En tout cas sous Win95/98. Sous Xp j'en sais rien je l'ai pas donc je peux pas te dire comme ça. Mais tu vas pouvoir le vérifier par toi-même avec SoftIce (Je pense qu'il est installé sur ton ordi), pour peux que les instructions suivantes existent toujours sous la version de SoftIce qui fonctionne sous XP.

    la commande IDT te donne l'adresse de base où débute l'IDT. (Si l'IDT exite toujous sous XP, j'en sais rien, j'ignore tout de XP)
    ex: IDTBase = 80008000

    Commande PAGE 80008000 donne des info sur cette partie de la mémoire, si en particulier ses attributes sont en RW c'est qu'il est possible d'écrire dans l'IDT donc de le modifier. (Première condition indispensable)

    La commande IDT donne également les adresses des différents vecteurs qui constituent l'IDT.
    Par exemple le premier (intG32 : interruption 0 = Exeption division par 0)
    la commande PAGE "Adresse du vecteur 0" donne des info sur la partie de mémoire concernant ce vecteur. Si lui aussi est en RW alors tu peux écrire du code à la place du code de l'Exeption division par 0 (Qui est toujours en Ring0).

    Je résume si avec ces trois vérif chacune est en RW sous XP alors tu pourras passer en RING0. Dis mois si c'est le cas (j'en doute un peu) je te dirais alors comment procéder.
    @+

  8. #8
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Non, il n'est pas possibe de dévier les vecteurs d'interruption contenu dans l'IDT sous Windows XP. Adresser l'IDT meme pour uniquement faire une lecture provoque une exeption sous XP, en tout cas au départ du Ring3, users mode. J'ai essayé ... bein oui ! ca veux pas !
    Les interruptions se déroulant en Ring0, cela aurait pu etre une bonne solution. Solution qui fonctionne sous Win95 ou 98 ... OS moins restrictif, mais sous XP ... nada ! La solution qui consiste a changer CS ne me plait pas trop. Faut encore voir s'il est possible de changer la valeur de CS sous Windows XP, pas certain ! En Ring3, on a pas acces a l'ensemble des instructions, ni a l'ensemble des modes d'adressage. Un simple " Cli " sous XP au départ du privilège 3, provoque une exeption ... instruction interdite ! Changer CS pour acceder a un "CS" qui se trouve en Ring0 ...
    l'idée est belle ! Mais quelle sont les valeurs de CS ouvrant le privilège 0 ? De plus, remarque pertinente ... la mémoire est elle libre a cet endroit, l'OS n'en a jamais besoin ? certain ? ... hum !!!
    La seule solution (résultats de mes propres recherches), c'est la réalisation d'un "Kernel Mode Driver" (KMD). Et pour écrire pareil Driver, un truc semble incontournable, le Driver Development Kit de Microsoft ... le DDK de Microsoft, ... pour Windows XP bien entendu. Ca, j'ai ! On peut avoir le CD pour 25 dollars, chez Microsoft. Concernant le chemin a suivre pour arriver a écrire un tel Driver semble etre " le secret des Druides ! " , hi . A part le site MSDN de Microsoft, pas grand chose sur le Net. A croire que personne n'a jamais utilisé le DDK de MS ! A croire que personne n'est jamais passé en Ring0 "tout seul" sous Windows XP ! Ah oui, passer en Ring0 sous Win9x, ca on en parle, bein oui, c'est largement plus simple ! mais au départ de XP ... le désert ! grave !
    voila ... je continue ma recherche ! amitiés a tout ...
    mais bon ... toutes les idées sont bonnes ... exprimez vous, please !!!!

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 91
    Points : 96
    Points
    96
    Par défaut
    Juste pour info, Les KMD d'XP c'est bien ce qui remplace les VxD de Win9x ?

    Je coix que tu as fort à faire, parce que programmer de VxD c'était déjà pas une mince affaire, alors réapprendre un nouveau concepte sans posséder de documentation éclairée, c'est quasi impossible.

    (Pour ce qui est de savoir si un CS est en Ring0 ou non il suffit d'utiliser Query ou Page sur une zone de mémoire et regarder les attribue de cette mémoire)

    Bonne chance.
    @+

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    Content de te voir passer morgatte.
    J'sais pas sous XP. Ya pas moyen de sauver les registres avant de les écraser ?
    Sinon fau en desasembler un. Pour voir.

  11. #11
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    VxD ? désolé , je ne connait pas ! peux pa te dire s'il s'agit de l'équivant pour Win95 du DDK pour XP de Microsoft ! sorry !
    Par contre, j'ai une info intéressante.
    Pouvoir exécuter du code en Ring0 (au départ du Ring3) sans écrire un Kernel Mode Driver, mais en utilisant la technique du " callgate".
    Je pense que ca rejoint la philosophie du changement de CS, mais d'une manière "autorisée" par l'OS.
    Pour les curieux :http://www.eecs.umich.edu/~haih/windowskmem.txt
    Allez voir le chapitre 4.3 de cette page.
    C'est un point de départ ... ! Mais "Callgate" sur le Net donne pas mal de réponses et d'infos.
    Si quelqu'un a déja utilisé avec succes cette méthode du "Callgate" sous XP, je le suplie de pointez son nez ...

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 27
    Points : 27
    Points
    27
    Par défaut
    VxD Virtual Device Driver -> pour win 9x

    KMD Kernel Mode Drivers -> NT

    Les deux sont des drivers spéciaux qui tournent en ring0, c'est pareil mais pas compatibleun l'autre.

    Mais XP c'est pas un NT et c'est surtout très chiant.

    Juste pour info. a+

  13. #13
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Xp hyper sécurisé et chiant, ca, c'est pas un Scoop !
    mais bon, ca fait pas avancer le shmilblick ca !
    Sur, quand j'aurai trouvé, j'en fait un bouquin et j'me casse aux
    bermudes avec les tunes !
    Car la d'sus, clair, y'a personne qui connait réellement qq choses !
    et moi non plus !
    Mais on est po - si - tif ! alleeeezz les gars, Ring0 et XP ..

  14. #14
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Bon, je résume :
    pour passer en Ring0 sous Windows XP, semble bien qu'il y'a trois trucs intéressants a creuser !
    1) Le Kernel Mode Driver
    2) le " Callgate "
    3) l'instruction Pentium " Sysenter "
    Pour le Kernel Mode Driver, faut utiliser le DDK de Microsoft. Quasi pas d'info pratique sur le Net. Y'a le site MSDN de MS, mais c'est tres théorique !!!
    y'a qq sites Russes et Japonnais qui en parle ... mais comprends pas gd choses !
    Réaliser un Kernel Mode Driver semble vachement complexe.
    La solution du " Callgate " semble plus intéressante. Consiste a acceder a un segment d'office "ouvert" en Ring0. On en parle sur le Net, mais comme d'habitude, pour NT ... pour XP, on dit rien ! et pas mal de théorie aussi, pas bcp d'exemples pratiques.
    Y'a l'instruction Pentium "Sysenter " aussi ... la, j'en sais pas encore bcp. C'est une vraie instruction machine, et ce qu'on en dit, notamment dans la doc Intel est réellement intéressant. Mais semble bien que personne ne la connait réellement.
    J'ai posé une sujet unique concernant cette instruction, et bein ... j'ai pas de réponses ! Pourtant c'est une vraie instruction, reconnue par l'assembleur en ligne de delphi ! Elle semble bien permettre de passer en Ring0 au départ de Ring3. Mais elle demande un environnement de pile et de paramètres précis !
    Voila !
    Kernel Mode Driver, Callgate, Sysenter ... je pense que le reste, c'est du pipo !
    enfin, j'en suis la !
    appel a tous !

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Tu as le lien de ta doc intel qui parle de sysenter ?

  16. #16
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    oui, bien entendu on parle de Sysenter dans la doc Intel.
    Mais ca reste assez théorique et de la a mettre en musique ...
    C'est une instruction qui demande un environnement d'appel asez subtil.
    Si quelqu'un avait réalisé ca ... bein ca m'aide grave !
    ca m'évite de planter la machine 50 fois avant de trouver !
    Mais il semble bien que cette instrution a elle seule, permette de passer en Ring0 depuis Ring3 ! D'un autre coté, cela semblerait si facile !!!!
    restons positif !

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Mais il n'y a pas UNE doc intel, y'en a plusieurs milliers. Moi j'en ai pas qui parle de cette instruction. Tu pourrais pas me l'envoyer ?

  18. #18
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Non, non, y'a pas 1000 doc Intel ! Y'a LA doc Intel ...
    Mais y'en a une pour chaque processeur, + les différentes éditions !
    C'est vrai qui y'a moyen de "touiller" grave ! enfin, voila :
    The IA-32 Intel Architecture Software Developer’s Manual
    fait une recherche la d'sus sur le Net, tu vas vite trouver et pouvoir télécharger.
    Faut charger la dernière édition 2003.
    Ce sont les fichiers référencés : 245470, 71 et 72 (2003)

    (243190, 91 et 92 ... c'est pas bon ... 1997)
    Faut un pti peu de temps, ce sont de gros fichiers, doit y avoir du monde qui pompe .. soit patient !
    Il y a 3 volumes. Le n° 2 fait plus de 7.7 Méga je pense.
    Pour l'instruction "Sysenter" : Vol 2, chapitre 3.2, instruction Sysenter.

  19. #19
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut Robby!

    Je suis tombé sur ton sujet par hasard, et je ne connais pas le ring0. Malgré que j'ai lu tout le thread, je n'ai pas encore compris à quoi ça pourrait te servir! Et comme je suis assez curieux de nature, surtout pour ce que je ne connais pas... Pourrais-tu me donner 1 ou 2 exemples simples d'utilisation du mode ring0?

    Autre chose, je cherchais un moment donné, à accéder à la mémoire physique sous XP. Chose facile à faire avec 95 et 98, mais avec XP, il faut dévérouiller des droits... Peut-être qu'il ya un rapport avec ce que tu recherches, peut-être pas, je n'en sais rien... c'est à toi de voir!

    http://www.developpez.net/forums/viewtopic.php?t=58693

    Si ça t'intérresse (ou d'autres membres du forum), je dois encore avoir les sources qui m'ont permis d'allouer une partie de la mémoire physique sous XP. Dans ce cas, demandez-moi!

    Bon courage! à+
    De retour parmis vous après 10 ans!!

  20. #20
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Hello Sub0.
    Je sais que tu es un programmeur "pratique", tu aimes le concret et les trucs qui tournent ! j'te fais aller hein ... hi ... quoi que ? hi
    tu connais pas le Ring0 ? Le niveau de privilège 0, le mode Kernel quoi ?
    Je n'ai pas d'exemple précis a te donner, mais les possibiliés sont infinies, par définition ! En Ring0, tu as acces a tout, ce qui n'est pas le cas en Ring3, le mode utilisateur, quand tu programmes en Delphi, t'es en Ring3.
    En Ring3, tu n'as pas acces a toutes les instructions (essaye un "cli" simplement avec l'assembleur en ligne de Delphi). En Ring3, t'as pas acces a tous les modes d'adressages. Un truc comme ca : Mov eax, [ebx,edx,45] ... c'est ok en Ring0 ! Mode d'adressage interdit en Ring3.
    En Ring0, t'as acces aux registres"CR", aux registres de Debug du processeur, a la totalité de la méoire ... et j'en passe !
    Y'a 4 "Ring" (0->3), 4 niveaux de privilège, c'est la base du mode protégé, comprends pas que tu dises : Ring0, connait pas ! tu me fait marcher, la, non ? Fait une recherche avec ceci : IA-32 Architecture Software Developer's Manual . Y'a 3 volumes, attention a la version des fichiers chargés ! Faut que tu charges les .Pdf n° 245470, 71 et 72 de chez Intel. Va voir dans le "volume 3", chapitre 4 (4.4) ...
    Voila! j'espère avoir répondu (en partie) a ta question.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Ring0] 8254 sous Windows ?
    Par - Robby - dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 27/05/2009, 19h41
  2. ring0 sous XP
    Par JustMe dans le forum Langage
    Réponses: 3
    Dernier message: 12/08/2005, 22h29
  3. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  4. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57
  5. Réponses: 4
    Dernier message: 27/03/2002, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo