LanManHash + NTHash

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

LanManHash + NTHash

Beitrag 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 ;) )
Zuletzt geändert von Deeem2031 am 05.08.2005 15:10, insgesamt 1-mal geändert.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

möglicherweise hilft Dir dieser Artikel weiter ...
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten