diff options
Diffstat (limited to 'ReverseEngineering/Get-Strings.ps1')
| -rw-r--r-- | ReverseEngineering/Get-Strings.ps1 | 98 | 
1 files changed, 98 insertions, 0 deletions
| diff --git a/ReverseEngineering/Get-Strings.ps1 b/ReverseEngineering/Get-Strings.ps1 new file mode 100644 index 0000000..87f5f6a --- /dev/null +++ b/ReverseEngineering/Get-Strings.ps1 @@ -0,0 +1,98 @@ +function Get-Strings
 +{
 +<#
 +.SYNOPSIS
 +
 +Gets strings from a file.
 +
 +PowerSploit Module - Inject-Shellcode
 +Author: Matthew Graeber (@mattifestation)
 +License: BSD 3-Clause
 +Required Dependencies: None
 +Optional Dependencies: None
 +
 +.DESCRIPTION
 +
 +The Get-Strings cmdlet returns strings (Unicode and/or Ascii) from a file. This cmdlet is useful for dumping strings from binary file and was designed to replicate the functionality of strings.exe from Sysinternals.
 +
 +.PARAMETER Path
 +
 +Specifies the path to an item.
 +
 +.PARAMETER Encoding
 +
 +Specifies the file encoding. The default value returns both Unicode and Ascii.
 +
 +.PARAMETER MinimumLength
 +
 +Specifies the minimum length string to return. The default string length is 3.
 +
 +.EXAMPLE
 +
 +C:\PS> Get-Strings C:\Windows\System32\calc.exe
 +
 +Description
 +-----------
 +Dump Unicode and Ascii strings of calc.exe.
 +
 +.EXAMPLE
 +
 +C:\PS> Get-ChildItem C:\Windows\System32\*.dll | Get-Strings -MinimumLength 12 -Encoding Ascii
 +
 +Description
 +-----------
 +Dumps Ascii strings of at least length 12 of every dll located in C:\Windows\System32.
 +
 +.NOTES
 +
 +This cmdlet was designed to intentionally use only PowerShell cmdlets (no .NET methods) in order to be compatible with PowerShell on Windows RT (or any ConstrainedLanguage runspace).
 +
 +.LINK
 +
 +http://www.exploit-monday.com
 +#>
 +
 +    Param
 +    (
 +        [Parameter(Position = 1, Mandatory = $True, ValueFromPipelineByPropertyName = $True)]
 +        [ValidateNotNullOrEmpty()]
 +        [ValidateScript({Test-Path $_ -PathType 'Leaf'})]
 +        [String[]]
 +        [Alias('PSPath')]
 +        $Path,
 +
 +        [ValidateSet('Default','Ascii','Unicode')]
 +        [String]
 +        $Encoding = 'Default',
 +
 +        [UInt32]
 +        $MinimumLength = 3
 +    )
 +
 +    BEGIN
 +    {
 +        $FileContents = ''
 +    }
 +    PROCESS
 +    {
 +        foreach ($File in $Path)
 +        {
 +            if ($Encoding -eq 'Unicode' -or $Encoding -eq 'Default')
 +            {
 +                $UnicodeFileContents = Get-Content -Encoding 'Unicode' $File
 +                $UnicodeRegex = [Regex] "[\u0020-\u007E]{$MinimumLength,}"
 +                $Results += $UnicodeRegex.Matches($UnicodeFileContents)
 +            }
 +            
 +            if ($Encoding -eq 'Ascii' -or $Encoding -eq 'Default')
 +            {
 +                $AsciiFileContents = Get-Content -Encoding 'UTF7' $File
 +                $AsciiRegex = [Regex] "[\x20-\x7E]{$MinimumLength,}"
 +                $Results = $AsciiRegex.Matches($AsciiFileContents)
 +            }
 +
 +            $Results | ForEach-Object { Write-Output $_.Value }
 +        }
 +    }
 +    END {}
 +}
\ No newline at end of file |