# encoding: ascii
# api: powershell
# title: Office Pass SaveAs
# description: Use known password cache to open and save unprotected copies of documents. – work in progress
# version: 0.1
# author: Steele Stenger
# license: CC0
# x-poshcode-id: 5073
# x-archived: 2014-04-13T13:00:28
# x-published: 2014-04-11T21:15:00
#
#
$ErrorActionPreference = "SilentlyContinue"
CLS
# Paths
$encrypted_path = "C:\Password_Recovery\Encrypted"
$decrypted_Path = "c:\Password_Recovery\Decrypted\"
$original_Path = "c:\Password_Recovery\Originals\"
$password_Path = "c:\Password_Recovery\Passwords\Passwords.txt"
# Load Password Cache
$arrPasswords = Get-Content -Path $password_Path
# Load File List
$arrFiles = Get-ChildItem $encrypted_path
# Create counter to display progress
[int] $count = ($arrfiles.count -1)
# Loop through each file
$arrFiles| % {
$file = get-item -path $_.fullname
# Display current file
write-host "Processing" $file.name -f "DarkYellow"
write-host "Items remaining: " $count `n
# Word docx
if ($file.Extension -eq ".docx") {
# Loop through password cache
$arrPasswords | % {
$WordObj = $null
# New Word Object
$WordObj = New-Object -ComObject Word.Application
$WordObj.Visible = $false
$WordObj.Options.WarnBeforeSavingPrintingSendingMarkup = $false
$passwd = $_
# Attempt to open file
$WordDoc = $WordObj.Documents.Open($file.fullname, $null, $false, $null, $passwd, $passwd)
$WordDoc.Activate()
$content = $null
$content = $WordDoc.content
# if password is correct - Save new file without password to $decrypted_Path
if ($content -ne $null) {
write-host "opened " -f "Yellow"
$WordDoc.Password=$null
$savePath = $decrypted_Path+$file.Name
write-host "Decrypted: " $file.Name -f "DarkGreen"
$WordDoc.SaveAs([ref]$savePath)
# Close document and Application
$WordDoc.Close()
$WordObj.Application.Quit()
# Move original file to $original_Path
move-item $file.fullname -Destination $original_Path -Force
}
else {
# Close document and Application
$WordDoc.Close()
$WordObj.Application.Quit()
}
}
}
# Excel xlsx
elseif ($file.Extension -eq ".xlsx") {
# Loop through password cache
$arrPasswords | % {
$ExcelObj = $null
# New Excel Object
$ExcelObj = New-Object -ComObject Excel.Application
$ExcelObj.Visible = $false
$passwd = $_
# Attempt to open file
$Workbook = $ExcelObj.Workbooks.Open($file.fullname,1,$false,5,$passwd)
$Workbook.Activate()
# if password is correct - Save new file without password to $decrypted_Path
if ($Workbook.Worksheets.count -ne 0) {
$Workbook.Password=$null
$savePath = $decrypted_Path+$file.Name
write-host "Decrypted: " $file.Name -f "DarkGreen"
$Workbook.SaveAs($savePath)
# Close document and Application
$ExcelObj.Workbooks.close()
$ExcelObj.Application.Quit()
# Move origanl file to $original_Path
move-item $file.fullname -Destination $original_Path -Force
}
else {
# Close document and Application
$ExcelObj.Close()
$ExcelObj.Application.Quit()
}
}
}
$count--
# Next File
}
Write-host "`n Complete" -f "Green"