Autor
|
Tema: [SNIPPET] Get W$ Version {RtlGetVersion - Native API} (Leído 8,603 veces)
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
'NTDLL Private Declare Function RtlGetVersion Lib "NTDLL" (ByRef lpVersionInformation As Long) As Long Private Function NativeGetVersion() As String Dim tOSVw(&H54) As Long tOSVw(0) = &H54 * &H4 Call RtlGetVersion(tOSVw(0)) NativeGetVersion = Join(Array(tOSVw(4), tOSVw(1), tOSVw(2)), ".") End Function Public Function VersionToName(ByVal sVersion As String) As String Select Case sVersion Case "1.0.0": VersionToName = "Windows 95" Case "1.1.0": VersionToName = "Windows 98" Case "1.9.0": VersionToName = "Windows Millenium" Case "2.3.0": VersionToName = "Windows NT 3.51" Case "2.4.0": VersionToName = "Windows NT 4.0" Case "2.5.0": VersionToName = "Windows 2000" Case "2.5.1": VersionToName = "Windows XP" Case "2.5.3": VersionToName = "Windows 2003 (SERVER)" Case "2.6.0": VersionToName = "Windows Vista" Case "2.6.1": VersionToName = "Windows 7" Case Else: VersionToName = "Unknown" End Select End Function
Ejemplo para llamarla: 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... Lleva un tiempo en HackHound y en AdvanceVB... se me olvido ponerla aqui.... lo siento http://www.advancevb.com.ar/?p=255 http://hackhound.org/forum/index.php?topic=21559.msg133308#msg133308 Saludos
|
|
« Última modificación: 16 Septiembre 2009, 22:14 pm por Karcrack »
|
En línea
|
|
|
|
Jaixon Jax
Desconectado
Mensajes: 859
|
Gracias ... una buena manera de saber exactamente el SO ....
|
|
|
En línea
|
|
|
|
|
|
agus0
Desconectado
Mensajes: 360
|
y como sabes que es nt o no?
y por que decis que es mejor?
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
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 ) , 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 ) Para ser mas expesifico en la clave : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName
|
|
« Última modificación: 17 Septiembre 2009, 07:14 am por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
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 ) , 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 ) Para ser mas expesifico en la clave : 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?
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Como dice BlackZero X esa clave es modificable... en cambio usando RtlGetVersion seria 'mas' complicado de engañar... Otro metodo:'NTDLL Private Declare Function NtCurrentTeb Lib "NTDLL" () As Long 'MSVBVM60 Private Declare Sub GetMem4 Lib "MSVBVM60" (ByVal Addr As Long, ByRef RetVal As Long) Public Function PEBGetWinVersion() As String Dim lPEB As Long 'Pointer to PEB Dim lOSMa As Long 'OSMajorVersion [PEB+0xA4] Dim lOSMi As Long 'OSMinorVersion [PEB+0xA8] Dim lOSPlat As Long 'OSPlatformId [PEB+0xB0] Call GetMem4(NtCurrentTeb + &H30&, lPEB) Call GetMem4(lPEB + &HA4, lOSMa) Call GetMem4(lPEB + &HA8, lOSMi) Call GetMem4(lPEB + &HB0, lOSPlat) PEBGetWinVersion = Join(Array(lOSPlat, lOSMa, lOSMi), ".") End Function Public Function VersionToName(ByVal sVersion As String) As String Select Case sVersion Case "1.0.0": VersionToName = "Windows 95" Case "1.1.0": VersionToName = "Windows 98" Case "1.9.0": VersionToName = "Windows Millenium" Case "2.3.0": VersionToName = "Windows NT 3.51" Case "2.4.0": VersionToName = "Windows NT 4.0" Case "2.5.0": VersionToName = "Windows 2000" Case "2.5.1": VersionToName = "Windows XP" Case "2.5.3": VersionToName = "Windows 2003 (SERVER)" Case "2.6.0": VersionToName = "Windows Vista" Case "2.6.1": VersionToName = "Windows 7" Case Else: VersionToName = "Unknown" End Select End Function
|
|
« Última modificación: 17 Septiembre 2009, 14:48 pm por Karcrack »
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
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 ) , 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 ) Para ser mas expesifico en la clave : 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
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
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...
|
|
|
En línea
|
|
|
|
|
|