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.