Scriptfehler mit komplexen Passwort

  • Hallo zusammen,

    ich habe ein AutoIt Script geschrieben welches das Mounten von TrueCrypt-Container automatisieren soll. Dabei habe ich einen Testkontainer mit TrueCrypt (test.tc) mit einem einfachen Passwort 8 Zeichen (nur Zahlen und Kleinbuchstaben)
    erstellt .

    Hier ist die entscheidende Zeile aus dem Script:


    Code
    Func FuncMount()
    Return (RunWait(@ComSpec & ' /c "c:\Program Files\TrueCrypt\TrueCrypt.exe"' & " /v c:\Users\nemolyx\Desktop\test.tc /m rm /l y: /q /s /p " & $passwd, "", @SW_HIDE,4))
    
    
    EndFunc

    Die Ausführung des Scriptes mit dem einfachen Passwort ist erfolgreich. Sobald ich jedoch den realen Container mit einem sehr komplexen Passwort mit diesem Script mounten will klappt das nicht. Ich vermute, dass die zeichen im passwort für den Fehler verantwortlich sind. Denn mit dem einfachen Pw ist alles kein Problem.

    Das komplexe Passwort enthält Groß- und Kleinbuchstaben aber auch Sonderzeichen wie !"§$%&/()=?.

    Kennt jemand das Problem? Ich hoffe ihr könnt mir weiterhelfen.

    Einmal editiert, zuletzt von nemolyx (19. Februar 2012 um 11:45)

  • Das einzige Zeichen, das scheinbar Probleme bereitet ist das % Zeichen:
    Aber ist ungetestet...

    [autoit]

    Func FuncMount()
    Return (RunWait(@ComSpec & ' /c "c:\Program Files\TrueCrypt\TrueCrypt.exe"' & ' /v c:\Users\nemolyx\Desktop\test.tc /m rm /l y: /q /s /p "' & StringReplace($passwd, "%", "%%") & '"', '', @SW_HIDE,4))

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]
  • Danke für die schnelle Antwort, nur leider klappt es immer noch nicht. Das ReplaceString macht was es soll, es macht aus einem % zwei. Nur leider wird damit das Pw verändert. Kann man das Zeichen nicht durch ein Macro wie bei VBScript ersetzen? Das Zeichen muss doch irgendwie in Autoit verarbeitbar sein???

    Ist das nur Problem nur wegen der Verwendung der Konsole oder generell bei der Verwendung von AutoIt?

    Nachtrag:

    Soeben habe ich Erfolg gehabt bei der Anwendung von ACSII-Codes hier das Bsp. für %:

    Code
    Return (RunWait(@ComSpec & ' /c "c:\Program Files\TrueCrypt\TrueCrypt.exe"' & " /v c:\Users\nemolyx\Desktop\test.tc /m rm /l y: /q /s /p " & StringReplace($passwd, "%", chrw(37)), '', @SW_HIDE,4))


    Ich habe das auch mit einem 1- und 2stelligen Pw in dem das Zeichen vorkommt erfolgreich getestet. Bei meinem gesamten Pw gibt es jedoch weiterhin das Problem. Müssen denn die anderen Zeichen auch noch ersetzt werden?

    Einmal editiert, zuletzt von nemolyx (18. Februar 2012 um 19:30)

  • Nach der Try-and-Error-Methode konnte ich das störende Zeichen ermitteln. Es ist das kaufmännische Und "&". Alle anderen verwendeten Zeichen funktionieren ohne Probleme. Ich habe auch schon versucht das &-Zeichen mit ASCII-Zeichencode zu ersetzen

    Code
    $PwConvert=StringReplace($passwd, "&", chrw(38))

    Erstaunlicher Weise passiert bei der Verwendung von "&" oder "chrw(38)" gar nichts. Das Volume wird nicht gemountet und es kommt auch keine Fehlermeldung. ?(

    Ich brauche dringend eure HILFE!!! :S

  • Ich habe die Lösung gefunden. Das Passwort in der Commandline wird ohne die Verwendung von ComSpec fehlerfrei übertragen.

    Code
    Return (RunWait("c:\Program Files\TrueCrypt\TrueCrypt.exe /v c:\Users\nemolyx\Desktop\test.tc /m rm /l y: /q /s /p " & $passwd))
  • Das liegt an der Kodierung Ansi!=UTF8

    [autoit]

    StringToBinary()

    [/autoit]
  • Hallo Andy, danke für den Hinweis. Aber lässt sich das ComSpec-Problem mit dem StringToBinary beheben? Wenn ja, wie baue ich das in die Syntax ein?