easyeyesystem
Goto Top

Batch Passwortfeld VBS

Ich habe ein Problem

Ich würde gerne in Batch ein Passwordfeld machen, wo tman ein Password eingeben kann. Jedoch habe ich nach langen suchen nix gefunden.

Gibt es evtl. ne möglichkeit dies mit Batch zu machen?

Eine zweite Idee ist mir dazu auch gekommen
Gibt es eine Möglichkeit ein VBS Fenster aufzurufen, wo man das Passwort eingibt und das vbs dies an die Batchdatei übermittelt?

BAtch
Password eingeben in VBS
---> Batch kann das Passwort verarbeiten
pragramm.exe -p Passwort


Danke schon mal für Lösungen


[Edit Biber 03.03.2008]
Thread closed und von mir auf "Beantwortet" gesetzt.
@EasyEyeSystem

4 gepostete Fragen von Dir in 2 Monaten, Dutzende von ausgearbeiteten Lösungsvorschlägen und kein Feedback... das geht so nicht.
[/Edit]

Content-ID: 76826

Url: https://administrator.de/contentid/76826

Ausgedruckt am: 15.11.2024 um 09:11 Uhr

57677
57677 31.12.2007 um 17:58:27 Uhr
Goto Top
Wenn der Benutzer auf OK klickt oder die EINGABETASTE drückt, gibt die InputBox-Funktion den Inhalt des Textfeldes zurück. Klickt der Benutzer auf Abbrechen, gibt die Funktion eine Zeichenfolge der Länge 0 ("") zurück.

Das folgende Beispiel zeigt die Verwendung der InputBox-Funktion, um ein Textfeld anzuzeigen und die eingegebene Zeichenfolge der Variablen Eingabe zuzuweisen:
Dim Eingabe
Eingabe = InputBox("Geben Sie Ihr Passwort ein")  
MsgBox ("Ihre Eingabe: " & Eingabe)  
bastla
bastla 03.01.2008 um 00:37:12 Uhr
Goto Top
Hallo EasyEyeSystem und --Mike--!

Eine Passworteingabe im klassischen Sinne ist so zwar nicht möglich (da die Eingabe als Klartext sichtbar erfolgt), aber eine Übergabe nach Batch geht natürlich:
@echo off & setlocal
set "Input=%temp%\Input.vbs"  
echo WScript.Echo InputBox("Bitte Passwort eingeben!","Passworteingabe")>%Input%  

set PW=
for /f "delims=" %%i in ('cscript //nologo %Input%') do set "PW=%%i"  

if not defined PW echo Kein Passwort eingegeben & goto :eof
echo Eingegebenes Passwort: %PW%

Grüße
bastla
EasyEyeSystem
EasyEyeSystem 03.01.2008 um 11:24:21 Uhr
Goto Top
also das es durch zeichen ersetzt wird geht nicht? (* oder auch x)
Biber
Biber 03.01.2008 um 12:43:51 Uhr
Goto Top
Moin EasyEyeSystem,

nein, es geht nicht.
Es sei denn, Du schreibst tatsächlich eine Passwort-Einlese-Routine nach dem Muster:

- Schreibe an Position Zeile/Spalte den Text "Bitte Passwort eingeben" und lasse dahinter den Cursor blinken
- Schalte die Wiedergabe der Eingabe ab (schreibe schwarz auf schwarz)
- Lese ein Zeichen
- Schalte die Wiedergabe der Eingabe ein (schreibe Nicht-Schwarz auf schwarz)
- Schreibe an Position Zeile/Spalte+Länge Text "Bitte Passwort eingeben"+Länge-bisher-eingegeben ein "*"
- gehe zu Punkt 2 bis MaxLänge Pw oder ENTER eingegeben

Solche Routinen lassen sich in C oder C# gut schreiben. Batch oder VBS sind da eher überfordert.
Evtl gibt es aber Freewaretools für ein "GetPassword" oder "GetHidden".

Grüße
Biber
pacobay
pacobay 03.01.2008 um 21:52:39 Uhr
Goto Top
Hallo Mike,
also angeblich soll es doch gehen.
Zumindest laut dem Buch von Holger Schwichtenberg (Windows Scripting 5. Auflage / Kap16).
Ist allerdings etwas von hinten durch die Brust und ich habe es noch nicht wirklich umsetzten können. Aber da ich es demnächst u.U. selber einsetzten will und just 4 fun [@biber meeep meeeep face-wink ] setze ich mich daran und mache es etwas anwenderfreundlicher.
Ist aber scheinbar nicht ganz unabhängig von dem Betriebssystem.
Schauen wir mal.

Ich hoffe ich nehme den Mund nun nicht zu voll face-smile

@Biber @bastla
Vielleicht wollt ihr ja aufholen. Wäre doch ein schöner Entwicklungsthread, oder ?
Daher ein paar Infos zu dem Lösungsansatz a la Schwichtenberg.
Einbindung der capicom.dll zur verschlüsselten Ablage des PW in der Scriptdatei
läuft bei mir schon aber noch quick and dirty und gewiss nicht anwenderfreudlich
die SCRIPTPW.dll zur eingabe (ohne Anzeige) des PW in der dosbox
Damit kämpfe ich noch. Auch will ich die Anwendung nicht wirklich als csript laufen lassen.
Aber insgesamt scheint es machbar zu sein.
Aber erst haben ein Gewehr ....

bis denne pacobay
bastla
bastla 03.01.2008, aktualisiert am 18.10.2012 um 18:35:15 Uhr
Goto Top
@pacobay

... die SCRIPTPW.dll zur eingabe (ohne Anzeige) des PW in der dosbox ...
Meinst Du sowas?

Wenn's wirklich eine grafische Oberfläche sein soll, dann entweder auf dem Umweg über den IE (etwa wie hier, allerdings besser mit ".FullScreen = False") oder analog dazu per HTA.

Da EasyEyeSystem das Passwort nur an ein Programm weiterreichen will, wäre das Verschlüsseln eine Fleißaufgabe ...

Grüße
bastla
pacobay
pacobay 06.01.2008, aktualisiert am 18.10.2012 um 18:35:16 Uhr
Goto Top
@bastla Touché! Jetzt dachte ich doch wirklich nur einmal Dir was voraus zu haben,
aber dann hast Du das Teil schon vor langer Zeit genutzt. Mmmmhhhhhh War wohl nichts! face-sad
Aber einst wird kommen der Tag! Na ja, wahrscheinlich nicht. Aber die Hoffnung stirbt ja
bekanntlich zuletzt. face-smile

Diese batch/VBS Kombination hat mich verblüfft. So was kannte ich noch nicht.
Ein (zumindest für mich völlig neuer Ansatz), und ich habe eine Weile gebraucht,
um zu verstehen was Du da eigentlich macht und noch länger habe ich gebraucht
um zu verstehen wieso es denn funktionieren kann.
Na ja, aber eines fernen Tages .... face-wink

@thread
Habe ich mir erlaubt das "sowas" von bastla noch einmal explizit hier einzustellen.
Denn der Rest des angeführten Threads ist wohl eher unter dem lol Faktor zu betrachten.

@echo off & setlocal
set "GetPW=%temp%\GetPW.vbs"  
echo WScript.Echo CreateObject("ScriptPW.Password").GetPassword()>"%GetPW%"  
echo Bitte Passwort eingeben: 
for /f "delims=" %%i in ('cscript //nologo "%GetPW%"') do set "Pass=%%i"  
del "%GetPW%"  
echo %Pass%
Pause

bastla nutzt damit genau die besagte SCRIPTPW.DLL. Und dies auch in ihrer ganzen Funktionalität. Sie hat nämlich nur eine Klasse, die ScriptPW.Password und die hat nur eine Methode: GetPassword().

Fazit: Wie wenig Code man doch braucht! Da bin ich leider eine Ecke von weg.

Denn als reines VBS (aber vom Prinzip her identisch) ist das Ganze
(selbst ohne Kommentare etc) länger.

'  
' VB Script Document  
'  
Option explicit
'  
DIM objPopUp   'Das ja notwendige Objekt  
set objPopUp = WScript.CreateObject("WScript.Shell")  
'  
'  
objPopUp.popup fktGetStrPword
'  
function fktGetStrPword
' das verwendete Objekt beruht auf der SCRIPTPW.DLL  
' diese steht unter XP/VISTA/Server2003 zur Verfügung  
' hat nur eine Methode GetPassword().  
' kann nur unter Csript.exe verwendet werden  
' beispielhafter Aufruf C:\WINDOWS\system32\cscript.exe "C:\just4Test\pw.vbs"  
'  
  DIM objPW
  set objPW = CreateObject("ScriptPW.Password")  
'  
WScript.Echo "Bitte geben Sie Ihr Kennwort ein"  
WScript.Echo "Die Eingabe wird nicht angezeigt werden"  
WScript.Echo "Beenden Sie Ihre Eingabe mit Return"  
fktGetStrPword = objPW.getPassword()
END function  'fktGetStrPword  
'  


Verschlüsseln eine Fleißaufgabe

Es kam wohl nicht ganz rüber wieso ich die Capicom einsetzten wollte. sorry

Die angedachte Verschlüsslung war nicht für das PW im Rahmen der Eingabe gedacht, sondern vielmehr um den Vergleichswert im Script verschlüsselt zu halten.

Ein im klartext vorliegender Vergleichswert kommt mir so vor, als wenn man die Tür verriegelt,
aber das daneben liegende Fenster offen lässt. Natürlich ist das auch keine absolute Sicherheit, aber wenigstens mache ich das Fenster zu.

Im Anhang A habe ich eine entsprechende Prozedurensammlung beigefügt.

Jedoch habe mich anlässlich des Thread tiefer mit dem Thema Sicherheit bei VBS auseinandergesetzt und kam zu der Überzeugung, dass es eigentlich gar keinen Sinn macht überhaupt ein PW in VBS zu verwenden.
Und dabei ist es völlig egal, welche der hier aufgezeigten Methoden man verwendet.
Mit einem PW macht man nur die Vordertür zu, mit dem Hashwert (für das PW im Script) wird
zwar das Fenster neben der Tür geschlossen. Aber der böswillige Anwender braucht nur
um das Haus zu gehen, und findet lauter offene Fenster und Türen.
Das Grundproblem ist, dass der Anwender Lesezugriff auf das Skript haben muss um
es ausführen zu können . Also kann er auch den Code bekommen und diesen einfach um den
PW-Bereich etc kürzen. Also schlicht und einfach das Script ohne lästige Kennwortabfrage etc. nutzen. face-sad

Wenn man dann doch noch zusätzliche Sicherheit erreichen will, wird häufig „to encode“ als der richtige & nächste Schritt in diese Richtung angeführt. Aber auch dies ist mit frei erhältlichen Tools umkehrbar und darf auch nicht mit einer Verschlüsslung verwechselt werden.
Vgl.: How Can I Encode Scripts Within an HTA? http://www.microsoft.com/technet/scriptcenter/resources/qanda/mar06/hey ...

Letztendlich ist Sicherheit (wenn überhaupt) nur mit sehr viel weitergehenden Konzepten zu erzielen oder möglicherweise nur durch die klassische Zuriffberechtigung via ACL.


Wenn's wirklich eine grafische Oberfläche sein soll, ...

Der HTML-Ansatz ist eher klassisch und dürfte wohl durch die fast üblichen Sicherheitseinstellungen für IE nur noch eingeschränkt funktionieren.
Hier wäre wohl wirklich eine HTA-GUI vorzuziehen. Denn HTAs werden ja in einem
anderen Sicherheitskonzept als Html-Dateien geführt. Die von bastla angeführte
Quelle wäre aber ohne wesentliche Probleme entsprechend umzubauen.

Eine PW-bezogenere HTML wäre auch zu finden unter:
Suche Batch mit unsichtbarer Kennworteingabe

Im Anhang B habe ich noch eine Art HTA-Template beigefügt, die ich im Rahmen meiner
"Fleißaufgaben" zu diesem Thread erstellt habe. face-wink

Ansonsten sei noch auf verwiesen auf folgende MS-Quellen die eine Vielzahl von Hinweisen zur Verwendung VBS/HTA zur Verfügung stellen.

http://msdn2.microsoft.com/en-us/library/ms536471(VS.85).aspx

sowie leichter verständlich: Scripting Guy! Column (wird ständig erweitert unter)
http://www.microsoft.com/technet/scriptcenter/resources/qanda/all.mspx

bzw: The Scripting Guy! Column als Download (a must2have für scripter IMHO)
The first three years of the Hey, Scripting Guy! column (give or take a month) gathered together in one fully-searchable archive. This HTML help file includes all the text, graphics, and hyperlinks for well over 800 Hey, Scripting Guy! columns.

http://www.microsoft.com/downloads/details.aspx?familyid=5f5e0bda-923a- ...

ciao pacobay

PS. versprochene Anhänge folgen erst morgen, muss sie noch um die Dinge bereinigen die Sie nur in der hiesigen Scriptumgebung laufen lassen würden.
pacobay
pacobay 06.01.2008, aktualisiert am 18.10.2012 um 18:35:16 Uhr
Goto Top
der angekündigte Anhang A
ciao pacobay
' VB Script Document  
'Erstellt als helptesk 4 Thread  
'[content:76826#296785]  
'ergänzende Treads  
'none  
'*********************************************************************  
' for               : WSH/cscript.exe  
' testet on    : XPP SP2 / WSH 5.7 für XP  
'  
' Name of File : C:\just4Test\GetPWV07.vbs  
' Last edit      : 06.01.2008 07:28:19  
' Last editor   : pacobay   
'  
'   TARGET  
' Sicherheit bei VBS durch verdeckte Kennworteingabe und Hash-Vergleichswerte  
' Jedoch ist das so zu erzielende Sicherheitsniveau relativ schwach  
' ------  
'  
' ==============================================================  
' Die Grundidee zur Verwendung der SCRIPTPW.DLL sowie von CAPICOM  
' geht zurück auf Windows Scripting, Kapitel 16, S.989ff.  
' vgl.: Windows Scripting, 5. Auflage / Addison-Wesley  
' Autor: Holger Schwichtenberg / http://www.Windows-Scripting.de  
' ==============================================================  
'  
'*********************************************************************  
'  
'  
Option Explicit
'---------------------------  
 Dim wshShell
 Set wshShell = Wscript.CreateObject("Wscript.Shell")  
'---------------------------  
'Dim fso  
'Set fso = CreateObject("Scripting.FileSystemObject")  
'--------------------------  
DIM objPopUp   'Das ja notwendige Objekt  
set objPopUp = WScript.CreateObject("WScript.Shell")  
'--------------------------  
'  
 DIM strPword        ' Sring Kennwort im Klartext  
 DIM strPWHash       ' Sring Kennwort als Hashwert  
'________________________  
' Alternative A  
' strPword = fktGetStrPword  
' strPWHash = fktHashedData(strPword)  
' fktCheckStrPword(strPWHash)  
'--------------------------  
' Alternative B  
' Aus 3 zeilen mache Eine      '@bastla Einst wird ...  ;-))  
 fktCheckStrPword(fktHashedData(fktGetStrPword))
'--------------------------  
'  
'Weiter Aktionen  
'  
objPopUp.popup "nun würden die weiteren Aktionen starten",0,"Yes GO on",64+4096  
'  
'________________________  
'  
'  
function fktGetStrPword
' das verwendete Objekt beruht auf der SCRIPTPW.DLL  
' diese steht unter XP/VISTA/Server2003 zur Verfügung  
' hat nur eine Methode GetPassword().  
' kann nur unter Csript.exe verwendet werden. Ein beispielhafter Aufruf wäre:  
' C:\WINDOWS\system32\cscript.exe "C:\just4Test\GetPWV07.vbs"  
'  
MustBeCsript ' sicherheitshalber noch wscript abfangender Aufruf des Hilfssubs  

  DIM objPW
  set objPW = CreateObject("ScriptPW.Password")  
'  
WScript.Echo "Bitte geben Sie Ihr Kennwort ein"  
WScript.Echo "Die Eingabe wird nicht angezeigt werden"  
WScript.Echo "Beenden Sie Ihre Eingabe mit Return"  
fktGetStrPword = objPW.getPassword()
END function  'fktGetStrPword  
'  
'________________________  
'  
'  Die Hilfsprozeduren  
' (sind nicht notwendigerweise unter csript.exe auszuführen)  
'________________________  
'  
Function fktCheckStrPword(strPword4check)
'in diesem Beispiel entspricht der Hashwert dem Kennwort = administrator.de  

  if strPword4check ="82701DE29C7E9BF57185DE360B9CB0F1068B6CED" then  
     objPopUp.popup "OK PW korrekt! Es kann weitergehen",5,"ERFOLG",64+4096  
    '  
  else
    objPopUp.popup "falsches PW!"&chr(13)& "Script wird abgebrochen",0,"GoHome",64+4096  
    Wscript.quit
end if
'  
END function'CheckStrPword  
'________________________  
'  
Function fktHashedData(str4Hash)
' Fkt zur Erstellung eines Hashwertes  
' m verschlüsseln und Entschlüsseln einer Zeichenkette  
' vgl.: CAPICOM Reference  
' http://msdn2.microsoft.com/en-us/library/aa375732.aspx  
'  
' der hier verwendete Algorithmus  
Const CAPICOM_HASH_ALGORITHM_SHA1 = 0
'  
    DIM objHashedData  'notwendige Objektdeklaration  
    Set objHashedData = CreateObject("CAPICOM.HashedData")  ' objektzuweisung  
        objHashedData.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1 'vgl.: Const  
        objHashedData.Hash str4Hash     ' umwandeln  
'  
    fktHashedData = objHashedData.Value ' Zuweisen des Returnwertes der Fkt  
'  
End Function  'fktHashedData  
'________________________  
'  
 'DIM strClipBoard  'text 4 copy 2 clipboard.  
'  
Sub subCopy2Clipboard(str4ClipBoard)
' kopiert übergebebenes Textargumennt in die Zwischenablage  
' je nach Sicherheitseinstellungen muss IE-Zugriff auf Zwischenablage  
' händisch (bei entsprechenden Windows-popup) freigegeben werden.  
' Achtung: Dialog nicht zwangsläufig im Vordergrund!  
'  
DIM objC2CB
Set objC2CB = CreateObject("InternetExplorer.Application")  
objC2CB.Navigate("about:blank")  
objC2CB.document.parentwindow.clipboardData.SetData "text", str4ClipBoard  
objC2CB.Quit

END SUB 'subCopy2Clipboard(strClipBoard)  
'________________________  
'  
Function fktSesamOeffneDich(sesam)
'Mehr als Gag und um den BeispielHash zu erstellen  

sesam ="administrator.de"  

' Hilfsfunktion um bestimmte Hashwerte zu erstellen  
' um diese dann z.B. in fktCheckStrPword zu verwenden  
' steht danach als Inhalt der Variable strPWHash  
' und als Rückgabewert der Funktion sowie in der  
' Zwischenablage zur Verfügung  
' verwendet andere Prozeduren aus diesem  Helpscript  
' vgl. dahere insbesondere Ausführungen zu subCopy2Clipboard  
'  
    strPWHash = fktHashedData(sesam)
    subCopy2Clipboard(strPWHash)
    fktSesamOeffneDich=strPWHash
end Function  'fktSesamOeffneDich  
'________________________  
'  
SUB MustBeCsript
' -- Erzwingen des Starts mit CSCRIPT !  
If UCASE(right(wscript.fullname,11)) = "WSCRIPT.EXE" Then  
Msgbox "Start mit WSCRIPT.EXE nicht erlaubt. "&chr(13)&_  
"Starten Sie das Script mit csript.exe "&chr(13)&_  
"Script wird abgebrochen"  
Wscript.Quit
end if
END SUB 'MustBeCsript  
'________________________  
'  
'EOF  
'  
bastla
bastla 06.01.2008 um 11:33:30 Uhr
Goto Top
@pacobay
Es kam wohl nicht ganz rüber wieso ich die Capicom einsetzten wollte. sorry
Die angedachte Verschlüsslung war nicht für das PW im Rahmen der Eingabe gedacht, sondern vielmehr um den Vergleichswert im Script verschlüsselt zu halten.
Das war mir schon klar, nur hat EasyEyeSystem (so wie ich diesen Teil:
BAtch
Password eingeben in VBS
---> Batch kann das Passwort verarbeiten
pragramm.exe -p Passwort
verstanden habe) eigentlich nur vor, das Passwort gleich an ein Programm zu übergeben ("verarbeiten" interpretiere ich eher als "übernehmen" / "verwenden"), wodurch der PW-Vergleich nicht im Script erfolgen und das Vergleichs-PW daher auch nicht im Script gespeichert werden muss ...
Diese batch/VBS Kombination hat mich verblüfft. So was kannte ich noch nicht.
Habe ich auch erstmals hier (natürlich bei Biber) vorgefunden ...
Denn als reines VBS (aber vom Prinzip her identisch) ist das Ganze (selbst ohne Kommentare etc) länger.
Vor allem, weil Du sehr "schönes" Basic schreibst - aber auch "q&d" (also ohne Deklarationen, Speichern von Objekten in eigenen Variablen, Function - wird hier ja eh nur einmal aufgerufen - etc) bekommt man/frau/kind eine VB-Lösung kaum jemals kürzer als mit Batch hin (Datumsberechnungen/-formatierungen vielleicht einmal ausgenommen).
Na ja, aber eines fernen Tages .... face-wink
So fleißig, wie Du zu sein scheinst, kannst Du "fernen" wohl gleich streichen ... face-smile

Grüße
bastla
pacobay
pacobay 07.01.2008 um 17:35:56 Uhr
Goto Top

back-to-topCapicom / HTA


nur hat EasyEyeSystem...

Ups! Da hat mich wohl mein ständiges predigen bzgl. ganzheitliche Problemlösungen quasi überholt und mich etwas über das Ziel hinaus schießen lassen.
Tja, wer richtig lesen kann, der hat klare Vorteile im Leben!

Folglich ist aber Capicom & Hash (Anhang A) und auch das HTA-Template (Anhang B) wohl überflüssig. Somit entfällt das noch ausstehende HTA-Template.

ciao pacobay


back-to-topOT @bastla
Gerne gestehe ich, dass ich für Lob immer empfänglich bin und möchte Dir daher ausdrücklichen für die Blumen danken. Das trägt sicherlich zu meiner Motivation bei! face-smile

Trotzdem ist der Tag, an dem ich solche Lösungen, mal gerade aus dem Handgelenk schütteln kann, wohl doch noch sehr fern. face-sad
Aber einst ... face-smile

in diesem Sinne
thx pacobay
bastla
bastla 07.01.2008 um 23:03:39 Uhr
Goto Top
@pacobay

Da ich auch gelegentlich ein paar Blümchen erhalte (und das durchaus schön finde), gebe ich gerne welche weiter ... face-smile

Grüße
bastla