LanManHash + NTHash
Verfasst: 05.08.2005 03:41
So, mal was aus den tiefen der Windows-Codes, eine Procedure die LM-Hashs berechnet. Wem das nichts sagt: Per LanManager-Hash werden die Passwörter von Windows95/98/ME gespeichert. Meistens werden diese aber auch unter WindowsNT und aufwärts noch benutzt, nur kommt dann noch der NTLM-Hash dazu (den man aber einfach igronieren kann, wenn der LM-Hash gesetzt ist). Wenn man Pech hat ist unter WindowsXP auch noch eine SYSKEY-Verschlüsselung angeschaltet, dann bringt einem der ganze Code überhaupt nichts 
So, nu aber zum Code:
[EDIT] Da hab ich glatt FreeMemory vergessen.
[EDIT] Nun hab ich es doch geschafft den NT-Hash zu berechnen, nun gehst der SYSkey-Verschlüsselung an den Kragen
[EDIT] Kleinen Fehler behoben der bei Passwörtern länger als 14 Zeichen auftrat. (Oder besser: aufgetreten wäre, sowas benutzt ja eh keiner
)

So, nu aber zum Code:
Code: Alles auswählen
Structure HASHLM
Data.b[16]
EndStructure
Structure UNICODE_STRING
Length.w
MaximumLength.w
Buffer.l
EndStructure
Procedure.s LanManHash(Password.s)
Protected lPW,Lib_advapi32,result.s, Output.HASHLM
lPW = AllocateMemory(14)
PokeS(lPW,Left(UCase(Password),14))
result = ""
Lib_advapi32 = OpenLibrary(#PB_Any,"advapi32.dll")
If CallFunction(Lib_advapi32,"SystemFunction006",lPW,@Output) = 0
For i = 0 To 15
result + RSet(Hex(Output\Data[i]&$FF),2,"0")
Next
EndIf
FreeMemory(lPW)
CloseLibrary(Lib_advapi32)
ProcedureReturn result
EndProcedure
Procedure.s NTLMHash(Password.s)
Protected Lib_advapi32,result.s, Output.HASHLM, sRtn, sRtnLen, CountedUniCode.UNICODE_STRING
sRtnLen = StrLen(Password)
sRtn = AllocateMemory(sRtnLen*2)
MultiByteToWideChar_(#CP_ACP, 0, Password, sRtnLen, sRtn, sRtnLen*2)
RtlInitUnicodeString_(CountedUniCode,sRtn)
result = ""
Lib_advapi32 = OpenLibrary(#PB_Any,"advapi32.dll")
If CallFunction(Lib_advapi32,"SystemFunction007",@CountedUniCode,@Output) = 0
For i = 0 To 15
result + RSet(Hex(Output\Data[i]&$FF),2,"0")
Next
EndIf
FreeMemory(sRtnLen)
CloseLibrary(Lib_advapi32)
ProcedureReturn result
EndProcedure
Debug LanManHash("secret")
Debug NTLMHash("secret")
[EDIT] Nun hab ich es doch geschafft den NT-Hash zu berechnen, nun gehst der SYSkey-Verschlüsselung an den Kragen

[EDIT] Kleinen Fehler behoben der bei Passwörtern länger als 14 Zeichen auftrat. (Oder besser: aufgetreten wäre, sowas benutzt ja eh keiner
