Seite 1 von 1

Batchdatei mit Kennwortabfrage

Verfasst: Mo 28. Mär 2011, 10:56
von Merlin
Hallo zusammen,
ich möchte eine Batch erstellen. In welcher per variable ein Kennwort eingelesen wird. Ich möchte aber nicht, dass das Kennwort, welches eingetippt wird sichtbar ist. Wie muss ich das anstellen oder geht das nicht ?

Mein bisheriger Ansatz sieht wie folgt aus, man kann aber noch das sehen...

Code: Alles auswählen

:PWD
set /p varPWD=Bitte Kennwort eingeben:
if "%varPWD%" =="" goto PWD
Schon mal vielen Dank für eure Hilfe....

Re: Batchdatei mit Kennwortabfrage

Verfasst: Mo 28. Mär 2011, 17:43
von freecrac
Merlin hat geschrieben:Hallo zusammen,
ich möchte eine Batch erstellen. In welcher per variable ein Kennwort eingelesen wird. Ich möchte aber nicht, dass das Kennwort, welches eingetippt wird sichtbar ist. Wie muss ich das anstellen oder geht das nicht ?

Mein bisheriger Ansatz sieht wie folgt aus, man kann aber noch das sehen...

Code: Alles auswählen

:PWD
set /p varPWD=Bitte Kennwort eingeben:
if "%varPWD%" =="" goto PWD
Schon mal vielen Dank für eure Hilfe....
Wenn die Variable "varPWD" den Inhalt von "Bitte Kennwort eingeben:" zugewisen bekommt, dann kann sie ja eigentlich niemals """ werden, so das auch niemals nach PWD gesprungen wird?

Wie erfolgt denn überhaupt die Eingabe und wo ist das Passwort zum Vergleichen der Eingabe?

Ich denke ganz ohne die Unterstüzung einer externer Anwendung ist eine Passwortabfrage innerhalb einer Batchdatei nur schwer vorstellbar.
Ggf. könnte man ein paar Opcodes dafür gleich mit in die Batchdatei einfügen, die dann temporär so eine Anwendung im aktuellen Verzeichniß anlegt und danach gestartet wird und dann von dort aus die Eingabe eines Passwortes vornimmt.
Doch unverschlüsselte Passwörter sind gegen Mißbrauch leider nicht geschützt, folglich braucht man hier einen halbwegs sicheren Verschlusselungsalgorithmus um davor geschützt zu sein.

Dirk

Re: Batchdatei mit Kennwortabfrage

Verfasst: Mo 28. Mär 2011, 17:46
von DOSferatu
Ich glaube nicht, daß das alleine mit einer Batch geht. (Batchdateien sind ja davon abgesehen auch für jeden lesbar und veränderbar.)
Ich könnte aber ein kleines Programm schreiben, das eine Paßwortabfrage macht (auch mit Sternchenausgabe und so).
Was genau soll denn passieren, nachdem man das Kennwort eingegeben hat?

Re: Batchdatei mit Kennwortabfrage

Verfasst: Di 29. Mär 2011, 09:54
von Merlin
@freecrac
Wenn die Variable "varPWD" den Inhalt von "Bitte Kennwort eingeben:" zugewisen bekommt, dann kann sie ja eigentlich niemals """ werden, so das auch niemals nach PWD gesprungen wird?
Wenn nichts eingegeben wird und trotzdem enter gedrückt wird soll noch :PWD gesprungen werden...
Also bevor es weiter geht muss das Kennwort eingegeben werden...

@Dosferatu
Ich könnte aber ein kleines Programm schreiben, das eine Paßwortabfrage macht (auch mit Sternchenausgabe und so).
Was genau soll denn passieren, nachdem man das Kennwort eingegeben hat?
Ich möchte ein Netzlaufwerk mappen. Der User soll seine ID und sein Kennwort eigeben und dann soll das Netzlaufwerk verbunden werden. Das Kennwort soll aber während der Eingabe nicht als Klartext erscheinen, damit wenn jemand hinter dem User steht und auf dem Bildschirm schaut das Kennwort nicht lesen kann.

Das ist mein vollständiger Code. Hier kann man aber das Kennwort bei der Eingabe noch lesen:

Code: Alles auswählen

echo off

:UName
set /p varName=Bitte Usernamen eingeben:
if "%varName%" =="" goto UName

:PWD
set /p varPWD=Bitte Kennwort eingeben:
if "%varPWD%" =="" goto PWD

if exist K: net use K: /delete
net use K: \\Server\Path %varPWD% /User:%varName% /persistent:no

pause
Ich hoffe es hat jemand eine Idee...
Danke

Re: Batchdatei mit Kennwortabfrage

Verfasst: Mi 30. Mär 2011, 11:28
von freecrac
Mit dem Set-Befehl (ohne Parameter) läßt sich der Inhalt jeder Umgebungsvariablen auslesen. Anstelle der Umgebungsvariablen könnte man auch den gesamten:
"net use K: \\Server\Path %varPWD% /User:%varName% /persistent:no" innerhalb einer externen Anwendung ausführen lassen(*) und anstelle der Variablen dort den eingegebenen Namen und das Passwort vor dem Ausführen eintragen.
Diese Speicherstelle mit unserem vollständigen Net-Befehl könnte man danach gleich wieder löschen, so das keine Spuren vom Namen und Passwort mehr im Speicher vorhanden sind.

(*) Child-Anwendung ausführen:
http://www.dosforum.de/viewtopic.php?f=15&t=1289

Ich stelle mir das so vor:

Code: Alles auswählen

echo off
Input.exe K: \\Server\Path
In der Input.exe wird dann die Textausgabe "Bitte Usernamen eingeben" vorgenommen. Dann in einem markierten Feld auf die Eingabe gewartet und wenn nur ein CR erfolgte, dann wird erneut auf die Eingabe gewartet,
oder wenn ein Name eingegeben wurde, dann ein weiterer Text mit "Bitte Kennwort eingeben:" ausgegeben und ein weiteres markiertes Eingabefeld erscheint, wo wieder auf eine Eingabe gewartet wird.
Danach wird der eingegebene Name und das Passwort anstelle der beiden Variablen eingetragen und damit und dem Pfad, den wir als Parameter übergegen haben, der NET-Befehl schon innerhalb der externen Anwendung ausgeführt.

@Dosferatu: Hast du schon angefangen mit dem Programmieren?
Wie soll die Eingabe erfolgen, über das direkte Auslesen des Tastaturports?

...

Beispiel um angehängte Parameter einer Anwendung auszulesen (funktioniert auch wenn als Child-Anwendung ausgeführt mit einem anderen, eigenen PSP anstelle des PSPs der Aufrufer-Anwendung ):

Code: Alles auswählen

START:    mov     ah, 62h             ; Segment des PSP's ermitteln
          int   21h
          mov     ds, bx              ; PSP-Segment nach DS
          mov     si, 80h             ; Zeiger auf Parameter
          mov     al, [si]            ; ASCII-Anzahl holen, ohne CR (0Dh)
          cmp     al, 2               ;  weniger als 2 ASCII's ?
          jb  FEHLER                  ; zu wenig = Fehler !
          cmp     al, 9               ;  mehr    als 9 ASCII's ?
          ja  FEHLER                  ; zu viel  = Fehler !
          add     si, 2               ; Zeiger auf ersten ASCII hinter SPACE
          .....
Dirk