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

Windows Discussion :

DDK et Delphi ?


Sujet :

Windows

  1. #61
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut
    Merci pour ta réponse fd.

    Oui, si tu arrives a trouver la réponse précise a cette question,
    elle m'intéresse énormément.

    Oui ! GetProcessAdress via LoadLibrary !
    Peut etre qu'avec " NtVdm.exe ", ca fonctionne, possible !
    Mais si tu essayes d'extraire dynamiquement par cette méthode le code d'une fonction de " NtOsKrnl.exe " , ca ne fonctionne pas.
    Oui, le LoadLibrary et le GetProcessAdress vont fonctionner.
    Tu chargeras effectivement NtOsKrnl.exe dans la mémoire de ton process, et tu obtiendras bien l'adresse de départ de ta fonction avec GetProcessAdress. Apparemment tout fonctionnera. Mais le code de ta fonction sera un code inexploitable ... dynamiquement mort ... s'il y a la moindre référence d'adresse a un élément réel du kernel, c'est foutu.
    Le "vrai" NtOsKrnl.exe ... qui tourne dans le kernel, et une copie de son code dans la mémoire de ton process, c'est pas du tout la meme chose !
    Mais NtVdm.exe n'est pas une partie du kernel, il est donc possible que cette technique fonctionne dans ce cas.

    Pour le ddk xp ... je m'étais un peu perdu dans l'arbre des répertoires.
    C'est un peu un labyrinthe ce truc. Mais tu me dis qu'il y a effectivement des exemples de drivers. Je vais donc reprendre répertoire par répertoire.
    Si jamais tu as en tete le path des exemples que tu as trouvé ...
    respect a toi fd,

  2. #62
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    pour avoir les exemples faut l'installer

  3. #63
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut
    bein heu ..., je l'ai installé fd ...
    et tu fais comment pour acceder aux exemples ?
    Un sous répertoire de c:\winddk\2600.1106\ .... je suppose ?
    Chez moi, l'arbre du dkk débute comme ca.

    [edit] je pense avoir trouvé.
    Tous les exemples sont dans le répertoire " src\ ".
    J'ai encore du mal a reconnaitre simplement " a l'oeil ",
    les lignes C constituant un driver.
    Fd, n'y a t il QUE des exemples de Drivers dans ce répertoire " src\ " ?
    Ou y a t il aussi autres choses ?
    merci a toi.

  4. #64
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    En gros tu as :
    dans sys le driver
    dans exe un applicatif utilisant le driver

  5. #65
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut
    Merci pour ta réponse fd.
    Le sujet est terminé, je pense bien.
    reste a expérimenter tout ca !
    Si je devais plus tard te poser une question spécifique,
    j'ouvrirai alors un nouveau sujet ... probablement sur le forum Visual C++ .
    Merci pour votre présence a tous tout au long de ce débat.
    Bonnes fetes de fin d'année a tous.

  6. #66
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Par défaut
    Franchment, j'ai pas trop compris ce qu'a ete ecrit dans les pages précedantes ...
    Mais, j'ai tomber récemment sur une page, qui semble toucher a ce sujet, donc voici le lien:

    http://hxdef.org/download.php

    Il s'agit d'un "Delphi Driver Development Kit v0.0.4"
    A vous de voir....

  7. #67
    Membre confirmé Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par défaut
    Février 2007 ... déjà !
    Non, maintenant, c'est certain, les Driver Mode Kernel, n'ont plus de secrets pour moi (presque plus). DriverEntry, les MajorFunctions, et tous le reste. Mais j'ai du me mettre au C. Pas par impossibilité, mais par facilité. Avec le DDK intégré dans l'environnement de Visual Studio .Net 2003 ... plus éventuellement Driver Srudio intégré aussi .... et pourquoi pas IDA aussi ... il y a moyen de s'amuser.

  8. #68
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Par défaut
    Heu .. juste pour que je vois les choses plus clairement :

    Ce que vous appeliez précédement le mode ring 0, c'est le mode protégé du micro. * ? Parce que à ma connaissance il l'est déjà pour faire tourner l'OS, donc où est l'utilité ?


    * je dis ça car le seul moment où jutilise la création de gdt idt ... c'est lors du passage en mode portégé. Pour repasser en mode réel il n'y a qu'à les lire normalement ?!


    Tous ça c'est juste par curiosité personnelle.

  9. #69
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 539
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 539
    Par défaut
    Citation Envoyé par sepullayer
    Heu .. juste pour que je vois les choses plus clairement :

    Ce que vous appeliez précédement le mode ring 0, c'est le mode protégé du micro. * ? Parce que à ma connaissance il l'est déjà pour faire tourner l'OS, donc où est l'utilité ?
    * je dis ça car le seul moment où jutilise la création de gdt idt ... c'est lors du passage en mode portégé. Pour repasser en mode réel il n'y a qu'à les lire normalement ?!
    *mode protégé soi dit en passant c'est un méchanisme que l'on trouve seulement sur les CPU Intel et compatibles ( AMD)
    *eh non en ring 0 on y loge d'abord les gestionnaires de périphériques ( Device Drivers),l'OS il me semble étant logé un cran au-dessus

  10. #70
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Par défaut
    Ah, je croyais que ce mode avait été reprit par tous les x86.

    Le mode ring 0 est donc complètement étrangé au mode protégé et ses gdt idt ... ?

  11. #71
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    eh non en ring 0 on y loge d'abord les gestionnaires de périphériques ( Device Drivers),l'OS il me semble étant logé un cran au-dessus
    Le mode protégé implémente 4 niveau de protections sous x86. Seuls deux sont utilisés sous les systèmes actuels, le niveau 3 et le niveau 0.

    Le mode le plus privilégié (mode ayant le plus de "pouvoir"), est dit mode noyau ("kernel mode" en anglais) ou plus simplement ring0 (anneau de protection 0).

    C'est là où se loge le noyau du système d'exploitation, mais certaines partie de ce dernier fonctionne dans le mode le moins privilégié (mode utilisateur, "user mode" ou encore "ring 3").

    sous Windows, le kernel et les drivers sont logés à la même enseigne (même anneau de protection).

    Le mode ring 0 est donc complètement étrangé au mode protégé et ses gdt idt ... ?
    En mode protégé, seul le mode ayant le plus de pouvoir est apte à changer les informations de la GDT ou de l'IDT (et d'autres registres, structures ou tableaux internes).

    La protection du changement de la GDT ou l'IDT est implémentée au niveau hardware : les instructions d'écriture ne sont pas pas disponibles en ring3 étant donné que le CPL [code privilege level] - rattaché au descripteur de segment CS - est interrogé avant l'exécution d'une instruction visant à écrire dans la GDT ou l'IDT. Si nous sommes en mode utilisateur (ring3), le niveau de privilège du code s'exécutant est alors de 3 [CPL = 3] et comme seul un CPL = 0 permet la modification, l'instruction voulant modifier l'IDT ou la GDT lèvera alors une exception en mode utilisateur.

  12. #72
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Par défaut
    J'ai lu ce thread qui m'intéressais pas mal il y a un moment et je l'ai relu récemment avant de m'attaquer sérieusement au problème (Coder un driver en Delphi). Je remercie donc Robby (Pour ce thread et aussi son autre thread Ring0 sous XP. C'est un fou Robby.) et les participants et m'excuse si ce petit up dérange quelqu'un.

    Je n'ai pas souhaité utiliser le "delphi driver development kit" (Google it pour plus d'infos ), notamment car il se basait sur le lieur de VC à ce que j'ai compris (Je l'ai même pas téléchargé pour cause de restrictions).

    J'ai préférer compiler une dll Delphi, et la transformer en un driver .sys. Ce qui m'a bien aidé, c'est un .sys d'exemple relativement simple, et la référence du format PE qui détaille la structure des .exe, .dll, .sys et autres.

    Il faut tout d'abord l'écrire cette dll. On va commencer par le point d'entrée du driver. On va d'ailleurs l'exporter de manière à retrouver son adresse facilement par la suite. On va importer les symboles de ntoskrnl dont on a besoin avec le mot clé external, classiquement. Le travail de traduction des headers C est fastidieux mais bon... Il faut aussi globalement s'arranger pour que l'assembleur produit soit très propre. On va pas coder en objet, pas utiliser de type compliqués de Delphi, pas mettre d'unité dans les uses... Faut avoir une bonne idée de ce que notre petit compilo préféré va générer, et pas hésiter à désassembler. Mais ça se passe très bien sous une Delphi 7. [troll]C'est pas pour rien que le Delphi est un des rares langages à suivre le C sur 100 mètres.[/troll]

    Une fois que l'on a la dll, il faut la convertir en .sys. Voici un résumé des opérations nécessaires, que j'ai déduit de comparaisons entre ma dll et mon .sys d'exemple (Y compris des comparaisons de ces modules une fois chargés via un dump de la mémoire noyau après écran bleu... ) :
    1) Modification de flags divers... Le plus important étant sans doute le sous système : IMAGE_SUBSYSTEM_NATIVE.
    2) Suppression des imports sur les dll win32 dans la table d'import. On ne conserve que nos imports vers ntoskrnl.
    3) Remplacement du point d'entrée mis en place par Delphi (Qui fait probablement tout un tas de truc obscure digne de la CRT) par l'adresse de notre point d'entrée que l'on a exporté pour pouvoir le retrouver facilement.
    4) Détail super important : dans la Import Directory Table, faire pointer la Lookup sur la Import Address Table. Sinon le loader du driver ne va pas résoudre la Import Address Table et on va faire des calls dans la nature. Je sais pas pourquoi Delphi le fait pas.
    5) Calcul du checksum (En dernier !), sinon Windows va refuser le driver.

    C'est tout !

    [edit]
    Et au cas où j'aurais pas été assez clair :
    Et ça marche !

  13. #73
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    tu peux proposer ta solution pour la FAQ Delphi, cela en intéressera plus d'un je pense.
    Bravo en tout cas

  14. #74
    Membre éclairé Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Par défaut
    Bonjour rt15!
    Pourrais-tu nous faire un petit tuto et nous donner un exemple de Code, moi ça m'intéresse grandement tout ça!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 4 PremièrePremière 1234

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 1
    Dernier message: 13/05/2002, 09h19
  3. [Kylix] Migration delphi -> kylix
    Par Christian dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2002, 22h50
  4. Réponses: 4
    Dernier message: 27/03/2002, 11h03
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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