Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.7.0+

Remove the Authenticode Signature from an MSI, PowerShell, or VBScript File

See more Code Signing Examples

Demonstrates how to remove the Authenticode signature from a Windows Installer package (.msi), a PowerShell file (.ps1, .psm1, .psd1), or a VBScript file (.vbs). Removing the signature from these file types requires Chilkat v11.7.0 or later.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Starting in Chilkat v11.7.0, RemoveSignature can remove the Authenticode signature from
    //   - Windows Installer packages (.msi)
    //   - PowerShell scripts, modules, and data files (.ps1, .psm1, .psd1)
    //   - VBScript files (.vbs)
    // in addition to EXE and DLL files.

    // This example removes the signature from a signed PowerShell script.
    // To remove the signature from an .msi or a .vbs, pass the path of that file instead.
    const path = "C:/someDir/Deploy.ps1";

    const code_sign = try chilkat.CodeSign.init();
    defer code_sign.deinit();

    // The file is modified in place.  Keep a copy if the signed file is still needed.
    //
    // For a PowerShell or VBScript file, the signature comment block is removed from the end of the file.
    // For an MSI, the digital signature stream and the extended signature stream (MsiDigitalSignatureEx)
    // are removed from the package.
    code_sign.removeSignature(path) catch {
        std.debug.print("{s}\n", .{try code_sign.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("The signature was removed.\n", .{});

    // The file is now unsigned, so VerifySignature returns false.
    const sig_info = try chilkat.JsonObject.init();
    defer sig_info.deinit();
    const valid = if (code_sign.verifySignature(path, sig_info)) true else |_| false;
    std.debug.print("has a valid signature: {}\n", .{valid});
}