-
Notifications
You must be signed in to change notification settings - Fork 76
/
Invoke-LazySign.ps1
57 lines (44 loc) · 1.84 KB
/
Invoke-LazySign.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function Invoke-LazySign{
<#
.SYNOPSIS
Easy script that Sign a Windows binary with a self-signed certificate
Ported from https://github.com/jfmaes/LazySign by Jean Maes
# Import
ipmo .\Invoke-LazySign.ps1
# Run
Invoke-LazySign [-Password <certificate password>|-Guid] <search-term>
.EXAMPLE
# Sign binary with a crafted cert (exported without password)
Invoke-LazySign -Target "target.exe" -Domain "microsoft.com"
# Sign binary with a crafted cert (exported with password)
Invoke-LazySign -Target "target.exe" -Domain "microsoft.com"-Password "Passw0rd!
#>
[CmdletBinding()]
param
(
[Parameter(Mandatory=$False)]
[string]$Password,
[Parameter(Mandatory=$True)]
[string]$Domain,
[Parameter(Mandatory=$True)]
[string]$Target
)
$SecurePassword = ConvertTo-SecureString -String $Password -AsPlainText -Force -ErrorAction SilentlyContinue
$StoreLocation = "Cert:\CurrentUser\My"
$CertPath = $(Join-Path (Get-Location) "$Domain.pfx")
$Certificate = New-SelfSignedCertificate -CertStoreLocation $StoreLocation -DnsName $Domain -Type CodeSigning -ErrorAction SilentlyContinue
if (-not (Test-Path $StoreLocation)){
Write-Output "[-] Certificate Not Found in Store"
return
}
Export-PfxCertificate -FilePath $CertPath -Password $SecurePassword -Cert $Certificate -ErrorAction SilentlyContinue
if (-not (Test-Path $CertPath)){
Write-Output "[-] Certificate Creation Failed"
return
}
Set-AuthenticodeSignature -Certificate $Certificate -Filepath $Target –TimestampServer “http://timestamp.comodoca.com/authenticode”
Remove-Item $CertPath
}
$PSDefaultParameterValues.Remove("Invoke-LazySign:Password")
$PSDefaultParameterValues.Add("Invoke-LazySign:Password", "Passw0rd!")