Script de PowerShell para probar contraseñas - $ LASTEXITCODE


0

Tengo este código en el script de PowerShell:

$passwords = Get-Content "passwords.txt"
$TCPath = "c:\Program Files\TrueCrypt\TrueCrypt.exe"
$TCfile = "container.tc"
foreach ($password in $passwords)
{
    $LASTEXITCODE=99
    & $TCPath "/l z /s /q /p$password $TCfile"
    if ($LASTEXITCODE)
    {
        write-host YES
    }
    else
    {
        write-host NO
    }
}

$ LASTEXITCODE siempre es 99 después de la llamada a TCPath, por lo que el script siempre se imprime YES. Call to TC no está cambiando nada en $ LASTEXITCODE. ¿Qué debo hacer para obtener el código de salida de TrueCrypt?


¿Qué pasa si escribes IF ($LASTEXITCODE -eq 99)? Si espera un bool e intenta convertir el valor en un bool.
LotPings

Confirma la condición.
pbies

No sé qué errorlevel devuelve truecrypt, pero a menos que sea 0 siempre obtendrá un "Sí". Ejecute esta línea -5 .. 5 |%{if ($_) {write-host "yes $_"} else {write-host "no $_"} } para ver a qué me refiero.
LotPings

TC devuelve 0 si el comando tuvo éxito, valor más alto si no. Esto es posible con errorlevel en el archivo por lotes, pero parece que no en el script PS.
pbies

Aparte de las dudas sobre su objetivo para estos scripts, no parece entender que el if en su script simplemente devuelve la condición $ true si $ LASTEXITCODE es cualquier cosa menos 0. Para saber cuál es realmente el valor, debe write-host "Yes $LASTEXTICODE and $?"hacerlo en lugar de solo SÍ
LotPings

Respuestas:


0

Entonces, después de mucha investigación, puedo ver que TrueCrypt no puede establecer $ LASTEXITCODE y el problema no puede resolverse con $ ?. Entonces, la única forma de probar las contraseñas es un archivo por lotes. Un revestimiento es suficiente:

@FOR /F "tokens=*" %%A IN (passwords.txt) DO @"C:\Program Files\TrueCrypt\TrueCrypt.exe" /a /s /l z /q /v container.tc /p "%%A" & echo %%A

0

La solución adecuada para la recuperación correcta del código de salida de TC es utilizar el comando Start-Process.

$process = (Start-Process -FilePath "$TrueCrypt" -ArgumentList "/a /s /q /l z /m ro /v $container /p $password" -PassThru -Wait)
if ($process.ExitCode -eq 0)
{
    success($password)
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.