IŠČI
Vnesite iskalni niz:

uLMHash.pas
// LM Hash on Win box for Delphi
// !!! (C)(R) by Branko Defar, All rights reserved !!!
// This code is published only!!! for academic research
// and for use it u need permison from me

// This unit is slow, couse i wonna it slow; reason: script kiddies
// It's written in delphi, couse i don't wonna it portable; reason: script kiddies
// Hint: For fast implementation write your own Bitslice DES key search in assembler

// In hacker culture, a script kiddie, occasionally script bunny, skiddie,
// script kitty, script-running juvenile (SRJ), or similar, is a derogatory
// term used to describe those who use scripts or programs developed by others
// to attack computer systems and networks. It is generally assumed that script
// kiddies are juveniles who lack the ability to write sophisticated hacking
// programs or exploits on their own, and that their objective is to try to
// impress their friends or gain credit in underground hacker communities.


unit uLMHash;

interface

procedure LMHash(var LMHashS:string;PwdS:string);

implementation

uses
Windows,SysUtils;

type ab6=array[0..5] of byte;
type ab7=array[0..6] of byte;
type ab8=array[0..7] of byte;
type ab16=array[0..15] of byte;
type ab28=array[0..27] of byte;
type ab32=array[0..31] of byte;
type ab48=array[0..47] of byte;
type ab56=array[0..55] of byte;
type ab64=array[0..63] of byte;
type ab16_48=array[0..15] of ab48;
type ab8_6=array[0..7] of ab6;

const perm1:ab56=
(57, 49, 41, 33, 25, 17, 9,
1, 58, 50, 42, 34, 26, 18,
10, 2, 59, 51, 43, 35, 27,
19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 23, 15,
7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29,
21, 13, 5, 28, 20, 12, 4);

const perm2:ab48=
(14, 17, 11, 24, 1, 5,
3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8,
16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55,
30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53,
46, 42, 50, 36, 29, 32);

const perm3:ab64=
(58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7);

const perm4:ab48=
(32, 1, 2, 3, 4, 5,
4, 5, 6, 7, 8, 9,
8, 9, 10, 11, 12, 13,
12, 13, 14, 15, 16, 17,
16, 17, 18, 19, 20, 21,
20, 21, 22, 23, 24, 25,
24, 25, 26, 27, 28, 29,
28, 29, 30, 31, 32, 1);

const perm5:ab32=
(16, 7, 20, 21,
29, 12, 28, 17,
1, 15, 23, 26,
5, 18, 31, 10,
2, 8, 24, 14,
32, 27, 3, 9,
19, 13, 30, 6,
22, 11, 4, 25);

const perm6:ab64=
(40, 8, 48, 16, 56, 24, 64, 32,
39, 7, 47, 15, 55, 23, 63, 31,
38, 6, 46, 14, 54, 22, 62, 30,
37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28,
35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26,
33, 1, 41, 9, 49, 17, 57, 25);

const sc:ab16=(1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1);

const sbox:array[0..7,0..3,0..15] of byte = (
((14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7),
(0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8),
(4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0),
(15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13)),

((15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10),
(3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5),
(0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15),
(13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9)),

((10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8),
(13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1),
(13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7),
(1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12)),

((7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15),
(13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9),
(10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4),
(3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14)),

((2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9),
(14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6),
(4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14),
(11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3)),

((12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11),
(10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8),
(9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6),
(4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13)),

((4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1),
(13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6),
(1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2),
(6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12)),

((13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7),
(1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2),
(7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8),
(2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11)));

procedure permute32(var outt:ab32;const inn:ab32;const p:ab32);
var
i:integer;
begin
for i:=0 to 31 do
outt[i]:=inn[p[i]-1];
end;

procedure permute56(var outt:ab56;const inn:ab64;const p:ab56);
var
i:integer;
begin
for i:=0 to 55 do
outt[i]:=inn[p[i]-1];
end;

procedure permute48(var outt:ab48;const inn:ab56;const p:ab48);
var
i:integer;
begin
for i:=0 to 47 do
outt[i]:=inn[p[i]-1];
end;

procedure permute64(var outt:ab64;const inn:ab64;const p:ab64);
var
i:integer;
begin
for i:=0 to 63 do
outt[i]:=inn[p[i]-1];
end;

procedure permute48v2(var outt:ab48;const inn:ab32;const p:ab48);
var
i:integer;
begin
for i:=0 to 47 do
outt[i]:=inn[p[i]-1];
end;

procedure lshift(var d:ab28;const count,n:integer);
var
outt:ab64;
i:integer;
begin
for i:=0 to (n-1) do
outt[i]:=d[(i+count) mod n];
for i:=0 to (n-1) do
d[i]:=outt[i];
end;

procedure concat28(var outt:ab56;const in1:ab28;const in2:ab28;const l1,l2:integer);
var
i,ii:integer;
begin
for i:=0 to (l1-1) do
outt[i]:=in1[i];
i:=l1;
for ii:=0 to (l2-1) do
begin
outt[i]:=in2[ii];
i:=i+1;
end;
end;

procedure concat32(var outt:ab64;const in1:ab32;const in2:ab32;const l1,l2:integer);
var
i,ii:integer;
begin
for i:=0 to (l1-1) do
outt[i]:=in1[i];
i:=l1;
for ii:=0 to (l2-1) do
begin
outt[i]:=in2[ii];
i:=i+1;
end;
end;

procedure x_or32(var outt:ab32;const in1,in2:ab32;const n:integer);
var
i:integer;
begin
for i:=0 to (n-1) do
outt[i]:=in1[i] xor in2[i];
end;

procedure x_or48(var outt:ab48;const in1,in2:ab48;const n:integer);
var
i:integer;
begin
for i:=0 to (n-1) do
outt[i]:=in1[i] xor in2[i];
end;

procedure dohash_forw(var outt:ab64;const key:ab64;const forw:integer);
const
//const sp8:ab8=($4b, $47, $53, $21, $40, $23, $24, $25);
inn:ab64=
(0,1,0,0,1,0,1,1,
0,1,0,0,0,1,1,1,
0,1,0,1,0,0,1,1,
0,0,1,0,0,0,0,1,
0,1,0,0,0,0,0,0,
0,0,1,0,0,0,1,1,
0,0,1,0,0,1,0,0,
0,0,1,0,0,1,0,1);
var
i,j,k:integer;
pk1:ab56;
c,d:ab28;
cd:ab56;
ki:ab16_48;
pd1:ab64;
l,r:ab32;
rl:ab64;

er:ab48;
erk:ab48;
b:ab8_6;
cb:ab32;
pcb:ab32;
r2:ab32;

m,n:integer;
begin
permute56(pk1, key, perm1);

for i:=0 to 27 do
c[i]:=pk1[i];
for i:=0 to 27 do
d[i]:=pk1[i+28];

for i:=0 to 15 do
begin
lshift(c,sc[i],28);
lshift(d,sc[i],28);

concat28(cd,c,d,28,28);
permute48(ki[i],cd,perm2);
end;

permute64(pd1,inn,perm3);

for j:=0 to 31 do
begin
l[j]:=pd1[j];
r[j]:=pd1[j+32];
end;

for i:=0 to 15 do
begin
permute48v2(er,r,perm4);

if (forw<>0) then
x_or48(erk, er, ki[i],48)
else
x_or48(erk, er, ki[15-i],48);

for j:=0 to 7 do
begin
for k:=0 to 5 do
b[j][k]:=erk[j*6+k];
end;

for j:=0 to 7 do
begin
m:=(b[j][0] shl 1) or b[j][5];

n:=(b[j][1] shl 3) or (b[j][2] shl 2) or (b[j][3] shl 1) or b[j][4];

for k:=0 to 3 do
begin
if (sbox[j][m][n] and (1 shl (3-k)))<>0 then
b[j][k]:=1
else
b[j][k]:=0;
end;
end;

for j:=0 to 7 do
begin
for k:=0 to 3 do
cb[j*4+k]:=b[j][k];
end;

permute32(pcb, cb, perm5);

x_or32(r2, l, pcb, 32);

for j:=0 to 31 do
l[j]:=r[j];
for j:=0 to 31 do
r[j]:=r2[j];
end; //for i:=0 to 15 do

concat32(rl,r,l,32,32);

permute64(outt,rl,perm6);
end;

procedure str_to_key(const str:ab7;var key:ab8);
var
i:integer;
begin
key[0]:= str[0] shr 1;
key[1]:=((str[0] and $01) shl 6) or (str[1] shr 2);
key[2]:=((str[1] and $03) shl 5) or (str[2] shr 3);
key[3]:=((str[2] and $07) shl 4) or (str[3] shr 4);
key[4]:=((str[3] and $0F) shl 3) or (str[4] shr 5);
key[5]:=((str[4] and $1F) shl 2) or (str[5] shr 6);
key[6]:=((str[5] and $3F) shl 1) or (str[6] shr 7);
key[7]:=str[6] and $7F;
for i:=0 to 7 do key[i]:=(key[i] shl 1);
end;

procedure des_crypt56_forw(var outt:ab8;const key:ab7;const forw:integer);
var
i:integer;
outb,keyb:ab64;
key2:ab8;
begin
str_to_key(key,key2);
FillChar(keyb, SizeOf(keyb),0);
FillChar(outb, SizeOf(outb),0);
for i:=0 to 63 do
if (key2[i div 8] and (1 shl (7-(i mod 8))))<>0 then keyb[i]:=1;
dohash_forw(outb, keyb, forw);
FillChar(outt, SizeOf(outt),0);
for i:=0 to 63 do
if outb[i]<>0 then
outt[i div 8]:=outt[i div 8] or (1 shl (7-(i mod 8)));
end;

procedure LMHash(var LMHashS:string;PwdS:string);
const
hex: array[0..$F] of char = ('0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F');
var
o1,o2:ab8;
i1,i2:ab7;
i:integer;
begin
PwdS:=UpperCase(PwdS);
FillChar(i1, SizeOf(i1),0);
FillChar(i2, SizeOf(i2),0);
i:=Length(PwdS); if i>7 then i:=7;
for i:=1 to i do i1[i-1]:=ord(PwdS[i]);
i:=Length(PwdS); if i>14 then i:=14;
for i:=8 to i do i2[i-8]:=ord(PwdS[i]);
des_crypt56_forw(o1, i1,1);
des_crypt56_forw(o2, i2,1);
LMHashS:=hex[(o1[0] and $F0) shr 4]+hex[o1[0] and $0F]+
hex[(o1[1] and $F0) shr 4]+hex[o1[1] and $0F]+
hex[(o1[2] and $F0) shr 4]+hex[o1[2] and $0F]+
hex[(o1[3] and $F0) shr 4]+hex[o1[3] and $0F]+
hex[(o1[4] and $F0) shr 4]+hex[o1[4] and $0F]+
hex[(o1[5] and $F0) shr 4]+hex[o1[5] and $0F]+
hex[(o1[6] and $F0) shr 4]+hex[o1[6] and $0F]+
hex[(o1[7] and $F0) shr 4]+hex[o1[7] and $0F]+
hex[(o2[0] and $F0) shr 4]+hex[o2[0] and $0F]+
hex[(o2[1] and $F0) shr 4]+hex[o2[1] and $0F]+
hex[(o2[2] and $F0) shr 4]+hex[o2[2] and $0F]+
hex[(o2[3] and $F0) shr 4]+hex[o2[3] and $0F]+
hex[(o2[4] and $F0) shr 4]+hex[o2[4] and $0F]+
hex[(o2[5] and $F0) shr 4]+hex[o2[5] and $0F]+
hex[(o2[6] and $F0) shr 4]+hex[o2[6] and $0F]+
hex[(o2[7] and $F0) shr 4]+hex[o2[7] and $0F];
end;


end.
29.09.2011
Ste tudi vi žrtev danskega podjetja Brunata ? Zaradi prirojene napake v brunatinih delilnikih stroškov toplote in nagnjenosti danskega podjetja Brunata k neopravičenem praznenju vaše denarnice tudi ste !
več ?

01.02.2008
Če mislite, da je v interesu proizvajalcev operacijske opreme vaša varnost, se bridko motite. V njihovem interesu je dostopnost do vaših podatkov.
več ?

Priporočite nas
Priporočite nas svojim poslovnim partnerjem
Vaš e-naslov
e-naslov prijatelja
Copyright © 2003-2011 Informacijske rešitve Branko Defar s.p.! Vse pravice pridržane!

Informacijske rešitve Branko Defar s.p., Beblerjev trg 12, 1000 Ljubljana, TEL 01 54 10 009.
Stare novice