Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENTRÉE AUTOMATIQUE DU LOGIN ET DU PASS SUR LES SYSTÈMES NT


Information sur la source

Catégorie :Sécurité Niveau : Expert Date de création : 29/11/2003 Date de mise à jour : 22/01/2004 13:53:55 Vu / téléchargé: 8 522 / 744

Note :
Aucune note

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

Description

Le titre n'est pas très clair mais j'ai pas trouvé mieux !
Le but de ce programme est de pouvoir entrez un login et un password dans la boite d'identification au démarrage de windows (XP ou 2000 peut-être NT mais pas sur...).
Ainsi on peut concevoir toute sorte de méthode d'identification pour remplacer celle du mot de passe (Carte à puce etc...)
L'avantage de ma méthode est d'utiliser les identifiants des Dialogues ce qui permet d'être compatible avec n'importe quelle langue... S'il on avait utiliser l'API FindWindow() en ayant entré le titre de la fenêtre cela aurait marché seulement pour l'OS français... !
Avec ma méthode tous les Windows sont compatible (basé sur NT seulement)
Pour que cela fonctionne il faut que le programme soit exécuter en même temps que l'affichage de la boîte de Login.. C'est ici le plus gros problème...
Pour contourner le problème j'ai fait une petite DLL GINA qui exécute le programme au démarrage..
Je posterais cette DLL ce soir sur cppfrance car la j'ai pas le temps..

Malgré ces belles choses :) il y a un quand même un bug:
Lors du vérouillage de l'ordinateur, la fonction n'arrive pas à détecter si l'identification à réussie ou pas..A corriger donc... si quelqu'un arrive n'hésiter pas ;)

J'attend vos commentaires (et vos questions car c'est dur d'être clair sur cette source mais en testant vous comprendrez !!!)

MISE A JOUR DU 22.01.2004
---------------------------------

J'ai mis dans le zip la dll pour éexcuter son programme au démarrage de windows... et aussi un programme pour installer tout ça.. voir mon dernier commentaire... !

Laissez vos commentaires & remarques
 

Source

  • Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
  • ByVal lpClassName As String, _
  • ByVal lpWindowName As String) As Long
  • Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  • Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
  • Private Declare Function GetTickCount Lib "kernel32" () As Long
  • Public Declare Function GetLastError Lib "kernel32" () As Long
  • Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" ( _
  • ByVal hwnd As Long, _
  • ByVal lpClassName As String, _
  • ByVal nMaxCount As Long) As Long
  • Public Declare Function GetWindow Lib "user32" ( _
  • ByVal hwnd As Long, _
  • ByVal uCmd As Long) As Long
  • Public Const WM_SETTEXT As Long = 12
  • Public Const BM_CLICK = &HF5
  • 'Fonction réalisée par Cyberdevil - Copyright 2003 Xwave Network
  • 'Elle ne peut en aucun cas être appropriée à un autre nom que celui d'Xwave Network
  • 'http://www.xwaves.net - http://jetforce.xwaves.net
  • '--------------------------------------------------
  • Public Function Loginner(ByVal login As String, ByVal password As String, Optional locked As Boolean = False) As Boolean
  • Dim hWNDuser As Long, hWNDpass As Long, hWNDok As Long, hWNDgina As Long, ret As Long, ret2 As Long, ret3 As Long
  • Dim hWNDlogon As Long, hWNDErreur As Long
  • Dim error As Boolean
  • hWNDgina = FindWindow("#32770", vbNullString) 'recherche du handle de la fenêtre de login
  • If locked = False Then 'si pas vérouillé
  • hWNDuser = GetDlgItem(ByVal hWNDgina, 1502) 'recherche du handle du textbox Login de la fenêtre de login
  • hWNDpass = GetDlgItem(ByVal hWNDgina, 1503) 'idem que ci-dessus sauf qu'ici, c'est pour le password
  • hWNDok = GetDlgItem(ByVal hWNDgina, 1) 'idem que ci-dessus sauf qu'ici, c'est pour le bouton OK
  • Else 'si vérouillé
  • hWNDuser = GetDlgItem(ByVal hWNDgina, 1953) 'recherche du handle du textbox Login de la fenêtre de login
  • hWNDpass = GetDlgItem(ByVal hWNDgina, 1954) 'idem que ci-dessus sauf qu'ici, c'est pour le password
  • hWNDok = GetDlgItem(ByVal hWNDgina, 1) 'idem que ci-dessus sauf qu'ici, c'est pour le bouton OK
  • End If
  • ret = SendMessage(ByVal hWNDuser, WM_SETTEXT, 0, ByVal login) 'on envoie le login
  • ret2 = SendMessage(ByVal hWNDpass, WM_SETTEXT, 0, ByVal password) 'on envoie le password
  • ret3 = SendMessage(ByVal hWNDok, BM_CLICK, 0, 0) 'on valide le toute
  • hWNDgina = FindWindow("#32770", vbNullString) 'recherche du handle de la fenêtre de login
  • hWNDlogon = 0
  • If locked = False Then
  • hWNDlogon = GetDlgItem(ByVal hWNDgina, 1502)
  • Else
  • hWNDlogon = GetDlgItem(ByVal hWNDgina, 1953)
  • End If
  • While hWNDlogon <> 0
  • If locked = False Then
  • hWNDlogon = GetDlgItem(ByVal hWNDgina, 1502)
  • Else
  • hWNDlogon = GetDlgItem(ByVal hWNDgina, 1953)
  • End If
  • If isLoginError() = True Then
  • error = True
  • GoTo apr:
  • End If
  • xWait 100
  • DoEvents
  • Wend
  • apr:
  • If error = False Then
  • Loginner = True
  • Else
  • debutfaux:
  • hWNDgina = FindWindow("#32770", vbNullString)
  • hWNDok = GetDlgItem(ByVal hWNDgina, 2)
  • ret3 = SendMessage(ByVal hWNDok, BM_CLICK, 0, 0) 'on valide le toute
  • DoEvents
  • If isLoginError = True Then GoTo debutfaux:
  • Loginner = False
  • End If
  • End Function
  • '********************************************************************************************
  • ' Name : xWait
  • ' Purpose : Wait for the time requested without
  • ' stopping the execution of other functionsfuck
  • ' Syntax : xWait(MilsecToWait)
  • ' Parameters : MilsecToWait : Time to wait in millisecond
  • ' Return : /
  • '********************************************************************************************
  • Public Sub xWait(ByVal MilsecToWait As Long)
  • Dim lngEndingTime As Long
  • lngEndingTime = GetTickCount() + (MilsecToWait)
  • Do While GetTickCount() < lngEndingTime
  • DoEvents
  • Loop
  • End Sub
  • Private Function isLoginError() As Boolean
  • Dim hWNDgina As Long
  • Dim ret As String
  • hWNDgina = FindWindow("#32770", vbNullString) 'recherche du handle de la fenêtre de login
  • ret = GetDlgItem(hWNDgina, CLng("65535"))
  • If ret <> "0" Then
  • isLoginError = True
  • Else
  • isLoginError = False
  • End If
  • End Function
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" ( _
                 ByVal hwnd As Long, _
                 ByVal lpClassName As String, _
                 ByVal nMaxCount As Long) As Long
Public Declare Function GetWindow Lib "user32" ( _
                 ByVal hwnd As Long, _
                 ByVal uCmd As Long) As Long


Public Const WM_SETTEXT  As Long = 12
Public Const BM_CLICK = &HF5
'Fonction réalisée par Cyberdevil - Copyright  2003 Xwave Network
'Elle ne peut en aucun cas être appropriée à un autre nom que celui d'Xwave Network
'http://www.xwaves.net - http://jetforce.xwaves.net
'--------------------------------------------------
Public Function Loginner(ByVal login As String, ByVal password As String, Optional locked As Boolean = False) As Boolean
    Dim hWNDuser As Long, hWNDpass As Long, hWNDok As Long, hWNDgina As Long, ret As Long, ret2 As Long, ret3 As Long
    Dim hWNDlogon As Long, hWNDErreur As Long
    Dim error As Boolean
    hWNDgina = FindWindow("#32770", vbNullString)    'recherche du handle de la fenêtre de login
    If locked = False Then    'si pas vérouillé
        hWNDuser = GetDlgItem(ByVal hWNDgina, 1502)    'recherche du handle du textbox Login de la fenêtre de login
        hWNDpass = GetDlgItem(ByVal hWNDgina, 1503)    'idem que ci-dessus sauf qu'ici, c'est pour le password
        hWNDok = GetDlgItem(ByVal hWNDgina, 1)    'idem que ci-dessus sauf qu'ici, c'est pour le bouton OK
    Else    'si vérouillé
        hWNDuser = GetDlgItem(ByVal hWNDgina, 1953)    'recherche du handle du textbox Login de la fenêtre de login
        hWNDpass = GetDlgItem(ByVal hWNDgina, 1954)    'idem que ci-dessus sauf qu'ici, c'est pour le password
        hWNDok = GetDlgItem(ByVal hWNDgina, 1)    'idem que ci-dessus sauf qu'ici, c'est pour le bouton OK

    End If

    ret = SendMessage(ByVal hWNDuser, WM_SETTEXT, 0, ByVal login)    'on envoie le login

    ret2 = SendMessage(ByVal hWNDpass, WM_SETTEXT, 0, ByVal password)    'on envoie le password

    ret3 = SendMessage(ByVal hWNDok, BM_CLICK, 0, 0)    'on valide le toute
    
    
    hWNDgina = FindWindow("#32770", vbNullString)    'recherche du handle de la fenêtre de login
    hWNDlogon = 0
    If locked = False Then
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1502)
    Else
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1953)
    End If
    While hWNDlogon <> 0

    If locked = False Then
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1502)
    Else
    hWNDlogon = GetDlgItem(ByVal hWNDgina, 1953)
    End If
        If isLoginError() = True Then
        error = True
        GoTo apr:
        End If
        xWait 100
        DoEvents
    Wend
apr:
    If error = False Then
        Loginner = True
    Else
debutfaux:
    hWNDgina = FindWindow("#32770", vbNullString)
         hWNDok = GetDlgItem(ByVal hWNDgina, 2)
         ret3 = SendMessage(ByVal hWNDok, BM_CLICK, 0, 0)    'on valide le toute
         DoEvents
         If isLoginError = True Then GoTo debutfaux:
        Loginner = False
    End If
End Function
'********************************************************************************************
' Name     : xWait
' Purpose  : Wait for the time requested without
'        stopping the execution of other functionsfuck
' Syntax   : xWait(MilsecToWait)
' Parameters : MilsecToWait : Time to wait in millisecond
' Return   : /
'********************************************************************************************
Public Sub xWait(ByVal MilsecToWait As Long)
    Dim lngEndingTime As Long

    lngEndingTime = GetTickCount() + (MilsecToWait)
    Do While GetTickCount() < lngEndingTime
        DoEvents
    Loop
End Sub

Private Function isLoginError() As Boolean
    Dim hWNDgina As Long
    Dim ret As String
    hWNDgina = FindWindow("#32770", vbNullString)    'recherche du handle de la fenêtre de login
    ret = GetDlgItem(hWNDgina, CLng("65535"))
    If ret <> "0" Then
    isLoginError = True
    Else
    isLoginError = False
    End If
End Function

Conclusion

Je mettrai une mise à jour ce soir en ajoutant un utilitaire permettant d'installer le programme à l'exécution.. Promis pour ce soir !
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de jon256 le 18/12/2003 08:26:37

ça a l'air très interressant tout ça ... mais au fait la mise à jour tu la faite ou pas ? (bon 21 jours après que tu ai posté le msg on va dire que oui )

Merci pour la source je cherchais un truc du genre.  ;-)

signaler à un administrateur
Commentaire de Cyberdevil le 18/12/2003 16:13:01

je susi vraiment désolé mais j'ai pas encore fait la mise à jour je suis vraiment débordé mais je la met demain !
A+

signaler à un administrateur
Commentaire de jon256 le 19/12/2003 08:27:52

je l'attends avec impatience !

signaler à un administrateur
Commentaire de Mast3rbug le 22/01/2004 10:53:57

Est-ce que ca fonctionne pour vrai?  PArce que j'essaie avec win2000 et ca ne fonctionne pas.  Le handle de la boite de dialogue n'est pas trouvé.  Si quelqu'un l'a fait fonctionner, j'aimerais bien le savoir, et sur quel systeme d'exploitation.

Parce que ce que j'ai entendu a date sur l'authentifiaction windows, c'est qu'elle ne peut etre géré par aucun messages standatds de la boucle de messages...

signaler à un administrateur
Commentaire de Cyberdevil le 22/01/2004 13:37:38

Le truc c'est que j'ai pas testé sous windows 2000 les Handle sont ptetre différent...
Je viens de mettre à jour... Pour tester il suffit de lancer le programme Install Loginer.exe et de lcique sur INstall Gina...
Ensuite tout sijnhstall (très rapide)...
plus qua redémarrer...
magie le programme se lance en meme temps que la boite de login et ovus pouvez entrez votre mot de passe et logn dans le progz.. et il les enverra a la boite de login !

Bon test et redite moi si ça marche po !

A+

signaler à un administrateur
Commentaire de Mast3rbug le 23/01/2004 08:45:31

C'est assez génial!  Ca fonctionne.  Ca doit faire 1 semaine que je cherche comment faire pour bypasser le login de windows...  PCanywhere le fait d'une autre facon, j'sais pas trop comment, mais dans la boite de dialogue direct du login windows....  Mais comme ca, ca fonctionne autant!  Sauf qu'au demarrage, ca n'a pas démarré....   juste quand j'ai démarré login.exe et j'ai fait CTRL-ALT-DEL.  
T'as quoi de special dans ton Install Loginer.exe?  Parce que mon application, la seul maniere que j'ai trouvé pour l'installer au demarrage, c'est de l'installer en service avec SRVANY.

j'ai pas vérifié dans ton code la facon de t'y prendre, mais c'est vraiment ca qui me manquait!  Merci encore!!  Apres avoir scruté le web pendant 100 heures au moin, t'es le seul qui a un exemple concret VB loL!

signaler à un administrateur
Commentaire de Cyberdevil le 25/01/2004 11:04:01

C'est bizzard quil ne s'est pas démarré !
Il utilise un remplacement de la DLL Gina (cell qui affiche la boite de login de windows)... et ainsi quand windowes demande dafficher la boite ben juste avant il exécute le programme...

Pourrait tu détailler ta technique avec SRVANY ?

A+

signaler à un administrateur
Commentaire de Mast3rbug le 25/01/2004 20:41:44

La technique pour démarrer une application VB avant le login de NT (comme un service) est quelque peu differente que la DLL de gina.  J'ai remarqué que le .exe de ton login démarre parce que tu as un lien dans ta DLL qui fait démarrer le .exe.    en service, windows le démarre tout seul.

j'ai le lien ici, c'est tres clair comme procédure et le download de SRVANY

http://www.vbrad.com/pf.asp?p=source/tip_service_vb.htm


La procédure:

1. Like I said, obtain the files listed above and place them into the  same folder. I normally create a folder called c:\winnt\system32\Service Installation Kit.
2. Run SrvInstw.exe
3. Check Install Service radio box, click Next
4. Check Local Machine radio box, click Next
5. Enter the name for your service, click Next
6. Click Browse and select srvany.exe (which is in the same folder as SrvInstw.exe, remember?), then click Next
7. Click Service is its own Process radio box, click Next
8. Select what user account you want this service to run under. If this service is to have its UI, check the Allow Service to Interact with Desktop checkbox. Normally the services run under System Account
9. Select the startup option, click Next
10. Click Finish. But you are not finished just yet
11. Open RegEdit. Navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
12. Locate the service you just created in the Services branch, click on it.
13. Create a new key called Parameters
14. Click on Parameters and create a new string value called Application
15. Double-click on Application and set it equal to the full path of your  VB executable (e.g. c:\...\MyApp.exe)
16. Now go to Services applet and you can start your service.


Je l'ai essayé, et ca fonctionne tres bien.  Le seul probleme que j'avais, c'est que mon application n'etait pas capable d'envoyer des caracteres au login de windows avec les handles des textbox......   mais ta DLL a réglé le probleme.


Mast3rbug.

signaler à un administrateur
Commentaire de PROTEUS91 le 04/12/2004 17:02:45

Moi j'ai une petite question, le Gina, est un dll que tu as fait toi meme ou que tu as recupérer ?

J'aimerai mettre une autre application au demarrage que ta FORM est ce que tu penses que c'est possible ?

Dernière chose, j'aime bien les codes epuré sans fuioriture j'ai regarder ton code et je penses qu'il y a plein de chose que tu pourrai enlever, par rapport a ta form, j'en ai une que tu pourrais peut etre utiliser en remplacement de la tienne, dis moi si je peux te l'envoyer comme ca tu me diras si tu la veux ou pas.

Cordialement,

signaler à un administrateur
Commentaire de waganono le 10/06/2005 11:14:31

J'ai essayé ce programme à ma sauce mais un truc me chiffonne:
Je suis sous Win 2000 et impossible de capter le HANDLE de la fenêtre
à partir de la fonction FindWindow, est ce une protection de Windows?
Ca marchait bien sous Win 95,98,... mais là mystère

Si quelqu un avait des infos sur cette authentification?

signaler à un administrateur
Commentaire de popo66 le 01/12/2005 16:03:19

super interessant, je suis admiratif.

signaler à un administrateur
Commentaire de Ridjidji le 10/06/2006 21:46:33

J'ai plusieurs questions :

1) Quand j'essaie de compiler moi-même le la dll sous VC 6, la compilation se passe avec 3 warnings (je crois qu'il n'y en a qu'un ds le log de compilation que tu as mis ds le zip) et la dll ne marche pas.
2) Qu'est-ce qui se passe pour le prog au moment où l'utilisateur se connecte (il est fermé, ou qq chose comme ça ?)

signaler à un administrateur
Commentaire de Philippe734 le 26/02/2007 18:03:35

salut, sur mon xp cela ne fonctionne pas. alors du coup je me demandai s'il existerai une api qui permettrai de dévérouiller windows, un autologin ? biensur en renseignant l'api avec le nom d'utilisateur et le mot de passe. à votre avis ?

signaler à un administrateur
Commentaire de TroXsA le 06/08/2007 18:32:23

Bonjour a tous

Philippe734 as tu trouvé des sources interessante sur ce que tu recherche a faire ? (car je recherche a faire la meme chose)

sinon Cyberdevil as tu fait d'autre exemple avec ce type de DLL (gina) ?

Cordialement,
www.troxsa.info

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.