Seite 1 von 1

LanManHash + NTHash

Verfasst: 05.08.2005 03:41
von Deeem2031
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:

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] 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 ;) )

Verfasst: 05.08.2005 08:45
von stbi
möglicherweise hilft Dir dieser Artikel weiter ...

Verfasst: 05.08.2005 12:00
von Deeem2031
Thx, in dem Link steht unter anderen wer als erster die Syskey-Verschlüsselung gebrochen hat, allerdings ist das ein chinese und naja, sucht mal nach "FlashSky Syskey" auf google, dann wisst ihr was ich meine ;)
Hoffe aber der Beispielcode hilft mir weiter.