NtOpenKey

draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 20 sept. 2006 à 19:43
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 20 sept. 2006 à 21:00
Salut a tous,


Je ne parviens pas a utiliser l'api NtOpenKey, j'ai essaye dans tous les sens et rien :(


J'ai soit l'erreur Memoire Insufisante soit une erreur "non decrite"


Voici le code, enfin plutot les declares et une tentative de code lol
N'ayant trouve aucun exemple concret, je ne saurais meme pas dire si je suis sur la bonne voie ou pas, meme au niveau des declares je ne suis pas sure :/



Private Type ACL
        AclRevision As Byte
        Sbz1 As Byte
        AclSize As Integer
        AceCount As Integer
        Sbz2 As Integer
End Type



Private Type SECURITY_DESCRIPTOR
        Revision As Byte
        Sbz1 As Byte
        Control As Long
        Owner As Long
        Group As Long
        Sacl As ACL
        Dacl As ACL
End Type



Private Type UNICODE_STRING
       Length           As Long
       MaximumLength    As Long
       Buffer           As Long
End Type
 
Private Type OBJECT_ATTRIBUTES
    Length                      As Long
    RootDirectory               As Long
    ObjectName                  As UNICODE_STRING
    Attributes                  As Long
    SecurityDescriptor          As SECURITY_DESCRIPTOR
    SecurityQualityOfService    As Long
End Type
 
Private Declare Sub RtlInitUnicodeString Lib "NTDLL.DLL" (DestinationString As UNICODE_STRING, ByVal SourceString As Long)
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
Private Declare Function NtOpenKey Lib "NTDLL.DLL" (KeyHandle As Long, ByVal DesiredAccess As Long, ObjectAttributes As Any) As Long
Private Declare Function NtClose Lib "NTDLL.DLL" (ByVal hObj As Long) As Long



Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Const LANG_NEUTRAL = &H0
Private Const SUBLANG_DEFAULT = &H1



Public Function GetKeyInfo() As String



    Dim ObjAt           As OBJECT_ATTRIBUTES
    Dim hKey            As Long
    Dim hResult         As Long
    Dim UString         As UNICODE_STRING
    Dim l               As Long
    Dim hMem            As Long
    Dim KeySubPath      As String
   
    ObjAt.Length = Len(ObjAt)
    ObjAt.RootDirectory = 0 '
   
    KeySubPath = "Registry\Machine"
    RtlInitUnicodeString ObjAt.ObjectName, StrPtr(KeySubPath)
   
    hResult = NtOpenKey(hKey, &H1, ObjAt)
   
    GetKeyInfo = GetError(hResult)
   
    If hKey = 0 Then NtClose hKey
   
End Function



Public Function GetError(ByVal ret As Long) As String



    Dim Buffers As String
   
    Buffers = Space(255)
    FormatMessage FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0&, ret, LANG_NEUTRAL, Buffers, 255, ByVal 0&
    GetError = Trim$(Buffers)
   
End Function


Merci d'avance

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...

3 réponses

draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
20 sept. 2006 à 19:55
re,


J'ai trouve pour les "erreur non decrite", il fallait utiliser RtlNtStatusToDosError

Private Declare Function RtlNtStatusToDosError Lib "NTDLL.DLL" (ByVal hError As Long) As Long

et donc remplacer:

    GetKeyInfo = GetError(hResult)

par

    GetKeyInfo = GetError(RtlNtStatusToDosError(hResult))

Mais bon j'arrive toujours pas a ouvrir une cle :(

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
20 sept. 2006 à 20:36
Quel est le but de l'utilisation de ces focntions. Tu souhaiterendre invisible des processus dans le but de crer des virus, espions, keylogger ou autre ???

Google m'a trouvé un article traitant de la création de RootKit et utilisant cette fonction.

Je dois avouer que je n'ai pas compris grand chose à ce truc. Mais ça me parrait nettement bien plus complexe que le code que tu nous as donné.

Bon courage, je ne sais pas ce que tu fais, mais j'espère que tu te complique pas la vie pour rien.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
20 sept. 2006 à 21:00
Salut,

lol non c'est pas pour faire un RootKit! Mais c'est pour essayer d'en detecter un. Enfin pas directement je cherche d'abord a comprendre un peu les Api Nt ...

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Rejoignez-nous