
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
