Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 16 Septiembre 2009, 22:11 pm



Título: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 16 Septiembre 2009, 22:11 pm
Código
  1. 'NTDLL
  2. Private Declare Function RtlGetVersion Lib "NTDLL" (ByRef lpVersionInformation As Long) As Long
  3.  
  4. Private Function NativeGetVersion() As String
  5.    Dim tOSVw(&H54)     As Long
  6.  
  7.    tOSVw(0) = &H54 * &H4
  8.    Call RtlGetVersion(tOSVw(0))
  9.  
  10.    NativeGetVersion = Join(Array(tOSVw(4), tOSVw(1), tOSVw(2)), ".")
  11. End Function
  12.  
  13. Public Function VersionToName(ByVal sVersion As String) As String
  14.    Select Case sVersion
  15.        Case "1.0.0":     VersionToName = "Windows 95"
  16.        Case "1.1.0":     VersionToName = "Windows 98"
  17.        Case "1.9.0":     VersionToName = "Windows Millenium"
  18.        Case "2.3.0":     VersionToName = "Windows NT 3.51"
  19.        Case "2.4.0":     VersionToName = "Windows NT 4.0"
  20.        Case "2.5.0":     VersionToName = "Windows 2000"
  21.        Case "2.5.1":     VersionToName = "Windows XP"
  22.        Case "2.5.3":     VersionToName = "Windows 2003 (SERVER)"
  23.        Case "2.6.0":     VersionToName = "Windows Vista"
  24.        Case "2.6.1":     VersionToName = "Windows 7"
  25.        Case Else:        VersionToName = "Unknown"
  26.    End Select
  27. End Function

Ejemplo para llamarla:
Código:
MsgBox VersionToName(NativeGetVersion)

Esta en distintas funciones para que, por ejemplo, el servidor envie solo lo que devuelve NativeGetVersion y luego el cliente interprete los numeros con VersionToName... :rolleyes:

Lleva un tiempo en HackHound y en AdvanceVB... se me olvido ponerla aqui.... lo siento :-[ :xD

Código:
http://www.advancevb.com.ar/?p=255
http://hackhound.org/forum/index.php?topic=21559.msg133308#msg133308

Saludos ;)


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Jaixon Jax en 17 Septiembre 2009, 01:20 am
Gracias ... una buena manera de saber exactamente el SO ....




Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: agus0 en 17 Septiembre 2009, 02:29 am
Gracias Esta mejor que el que hice yo  ;-) ;-) ;-)


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: YST en 17 Septiembre 2009, 03:29 am
Yo opino que si es NT es mejor sacarlo directo del registro :P


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: agus0 en 17 Septiembre 2009, 06:39 am
y como sabes que es nt o no?

y por que decis que es mejor?


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: YST en 17 Septiembre 2009, 07:06 am
y como sabes que es nt o no?

y por que decis que es mejor?
Con el mismo registro puedes saber si es NT o no(si falla no es NT ) :xD , digo que es mejor por que en el registro ya esta escrito directamente que version del SO es entre otras cosas ( si es ultimate o home basic aparece en el registro por ejemplo ) :P

Para ser mas expesifico en la clave :
Código:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: BlackZeroX en 17 Septiembre 2009, 07:27 am
y como sabes que es nt o no?

y por que decis que es mejor?
Con el mismo registro puedes saber si es NT o no(si falla no es NT ) :xD , digo que es mejor por que en el registro ya esta escrito directamente que version del SO es entre otras cosas ( si es ultimate o home basic aparece en el registro por ejemplo ) :P

Para ser mas expesifico en la clave :
Código:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName

no lo creo, es muy inesacto, si hay un soft malisioso en dicha pc y cambia ese campo, realmente te la crees?


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 17 Septiembre 2009, 14:45 pm
Como dice BlackZeroX esa clave es modificable... en cambio usando RtlGetVersion seria 'mas' complicado de engañar...



Otro metodo:
Código
  1. 'NTDLL
  2. Private Declare Function NtCurrentTeb Lib "NTDLL" () As Long
  3. 'MSVBVM60
  4. Private Declare Sub GetMem4 Lib "MSVBVM60" (ByVal Addr As Long, ByRef RetVal As Long)
  5.  
  6. Public Function PEBGetWinVersion() As String
  7.    Dim lPEB        As Long 'Pointer to PEB
  8.    Dim lOSMa       As Long 'OSMajorVersion     [PEB+0xA4]
  9.    Dim lOSMi       As Long 'OSMinorVersion     [PEB+0xA8]
  10.    Dim lOSPlat     As Long 'OSPlatformId       [PEB+0xB0]
  11.  
  12.    Call GetMem4(NtCurrentTeb + &H30&, lPEB)
  13.    Call GetMem4(lPEB + &HA4, lOSMa)
  14.    Call GetMem4(lPEB + &HA8, lOSMi)
  15.    Call GetMem4(lPEB + &HB0, lOSPlat)
  16.  
  17.    PEBGetWinVersion = Join(Array(lOSPlat, lOSMa, lOSMi), ".")
  18. End Function
  19.  
  20. Public Function VersionToName(ByVal sVersion As String) As String
  21.    Select Case sVersion
  22.        Case "1.0.0":     VersionToName = "Windows 95"
  23.        Case "1.1.0":     VersionToName = "Windows 98"
  24.        Case "1.9.0":     VersionToName = "Windows Millenium"
  25.        Case "2.3.0":     VersionToName = "Windows NT 3.51"
  26.        Case "2.4.0":     VersionToName = "Windows NT 4.0"
  27.        Case "2.5.0":     VersionToName = "Windows 2000"
  28.        Case "2.5.1":     VersionToName = "Windows XP"
  29.        Case "2.5.3":     VersionToName = "Windows 2003 (SERVER)"
  30.        Case "2.6.0":     VersionToName = "Windows Vista"
  31.        Case "2.6.1":     VersionToName = "Windows 7"
  32.        Case Else:        VersionToName = "Unknown"
  33.    End Select
  34. End Function


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: YST en 17 Septiembre 2009, 18:21 pm
y como sabes que es nt o no?

y por que decis que es mejor?
Con el mismo registro puedes saber si es NT o no(si falla no es NT ) :xD , digo que es mejor por que en el registro ya esta escrito directamente que version del SO es entre otras cosas ( si es ultimate o home basic aparece en el registro por ejemplo ) :P

Para ser mas expesifico en la clave :
Código:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName

no lo creo, es muy inesacto, si hay un soft malisioso en dicha pc y cambia ese campo, realmente te la crees?
Claro y si hay un malware que te hace hoock a la api tambien ningun metodo funcionaria ,pero hay que ser realista ;)


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 17 Septiembre 2009, 18:28 pm
Claro y si hay un malware que te hace hoock a la api tambien ningun metodo funcionaria ,pero hay que ser realista ;)
El ultimo metodo que he posteado si que funcionaria por mucho Hook que haya...


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: YST en 17 Septiembre 2009, 18:30 pm
Claro y si hay un malware que te hace hoock a la api tambien ningun metodo funcionaria ,pero hay que ser realista ;)
El ultimo metodo que he posteado si que funcionaria por mucho Hook que haya...

El PEB tambien se puede modificar ;)


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 17 Septiembre 2009, 18:31 pm
El PEB tambien se puede modificar ;)
Claro que se puede modificar... pero...
Con un Hook? :xD


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: YST en 17 Septiembre 2009, 18:37 pm
El PEB tambien se puede modificar ;)
Claro que se puede modificar... pero...
Con un Hook? :xD
LA idea es lo mismo que un hoock api solo que solo inyectas el modificador del PEB que no modique la api, pero en idea es un hoock api ya que estas haciendo que la api haga lo que tu quieras y mediante el PEB te fallarian todas las api's que lo saquen :P .


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 17 Septiembre 2009, 18:44 pm
LA idea es lo mismo que un hoock api solo que solo inyectas el modificador del PEB que no modique la api, pero en idea es un hoock api ya que estas haciendo que la api haga lo que tu quieras y mediante el PEB te fallarian todas las api's que lo saquen :P .
Para hacerlo con el PEB tendrias que ir proceso por proceso, obtener privilegios y muchas cosas mas...

Zanjando el tema... no creo que a ningun Malware le interese cambiar la version de W$ :xD


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: BlackZeroX en 17 Septiembre 2009, 18:48 pm
LA idea es lo mismo que un hoock api solo que solo inyectas el modificador del PEB que no modique la api, pero en idea es un hoock api ya que estas haciendo que la api haga lo que tu quieras y mediante el PEB te fallarian todas las api's que lo saquen :P .
Para hacerlo con el PEB tendrias que ir proceso por proceso, obtener privilegios y muchas cosas mas...

Zanjando el tema... no creo que a ningun Malware le interese cambiar la version de W$ :xD

+1


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: el_c0c0 en 18 Septiembre 2009, 01:20 am
che, interesante.. pero me parece jodido una cosa, por logica:
Código
  1.        Case "1.0.0":     VersionToName = "Windows 95"
  2.        Case "1.1.0":     VersionToName = "Windows 98"
  3.        Case "1.9.0":     VersionToName = "Windows Millenium"
  4.  
Recalco, esto es una API de NT, win 95, 98, ME no tenian esta dll ni en pedo.. No es logico agregar esos sistemas, ya que el API no funcionaria en esos sistemas.

en fin, esta bueno usar apis nativas para variar de las comunes.

saludos!


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 18 Septiembre 2009, 07:42 am
Has provado el codigo en W$ 95/98/Millenium? Segun tengo entendido la DLL NTDLL esta en todos los W$ NT....


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: YST en 18 Septiembre 2009, 21:20 pm
La familia de los sistemas operativos Windows NT de Microsoft está constituida por versiones como Windows 7, Windows Vista, Windows Server 2003, Windows XP, Windows 2000 y Windows NT.


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: burbu_1 en 18 Septiembre 2009, 23:50 pm
Muchas garcias por el aporte karcrack,

como comentan por ahí, lo he probado en el win98 y no funciona................... falta la dll...........  :-(




Con el mismo registro puedes saber si es NT o no(si falla no es NT ) :xD , digo que es mejor por que en el registro ya esta escrito directamente que version del SO es entre otras cosas ( si es ultimate o home basic aparece en el registro por ejemplo ) :P

Para ser mas expesifico en la clave :
Código:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName

gracias, me es muy útil


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Jaixon Jax en 19 Septiembre 2009, 00:15 am
 ;D

  La variavle de entorno "OS" te dice si es windows NT si luego de chequear la variable de entorno y se sabe que es NT se puede utilizar el ejemplo de Karcrack....


  Saludos..


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: seba123neo en 19 Septiembre 2009, 02:41 am
;D

  La variavle de entorno "OS" te dice si es windows NT si luego de chequear la variable de entorno y se sabe que es NT se puede utilizar el ejemplo de Karcrack....


  Saludos..

si lastima que ni la variable de entorno OS existe en windows 98, por lo menos acabo de probarlo y no trae ningun dato.

la dll ntdll existe en windows 98, solo basta con ver en la carpeta del sistema,obviamente no el la misma de XP..el error no es ese...el error es que no encuntra la funcion api que usa el ejemplo, porque no existe.

saludos.


Título: Re: [SNIPPET] Get W$ Version {RtlGetVersion - Native API}
Publicado por: Karcrack en 19 Septiembre 2009, 12:51 pm
Bueno, siempre se puede hacer un LoadLibrarary&GetProcAddress para saber si existe... y sino pues devuelves que es inferior a W$ NT