Konverter dit PowerShell modul til en .NET assembly (DLL)

Konverter dit PowerShell modul til en .NET assembly (DLL)

Når man udvikler et modul i PowerShell, bør løsningen (så vidt muligt) frigives som open-source. Microsoft gør selv en stor indsats i at udvikle og dele deres PowerShell moduler til os IT-professionelle.

Nogle gange kan det være nødvendigt at slører koden i dit PowerShell modul. Dette kan være nødvendigt hvis du f.eks. sælger din kode videre til betalende kunder, eller koden kun er beregnet til internt brug og andre ikke skal få fingrene i det.

Fordi PowerShell er beregnet til at være et open-source sprog, er der ingen indbygget funktioner til at skjule eller konvertere din kode så den skjules eller beskyttes. Det er her PS Protector kommer til undsætning!

PS Protector er et værktøj der gør det nemt at konvertere dit PowerShell modul (.psm) til en DLL-fil (dynamic-link library assembly). Programmet er udviklet af den schweiziske udvikler Stefan Soller. Lad os komme igang med at bruge værktøjet!

PowerShell modul

Lad os begynde med at lave en simpel PowerShell funktion som vi kan bruge som eksempel. Følgende funktion returnere hvornår en computer sidst blev tændt (last boot up time).

Function Get-LastBootUpTime
{
    $LastBootUpTime = Get-CimInstance -ClassName win32_operatingsystem;
    Return [datetime]($LastBootUpTime.LastBootUpTime);
}
Export-ModuleMember -Function *

Overstående PowerShell kode gemmer vi i filen “MyPowerShellModule.psm1” på skrivebordet.

Hent PS Protector

PS Protector koster pt. 49€ (euro) pr. år, i denne guide bruger vi prøveprogrammet. Begrænsningen i prøveprogrammet er at PowerShell modulet ikke må være på mere end 200 tegn.

Hent programmet her. Programmet fylder i alt 350 KB, og består af 2 filer:

  • PS Protector.exe
  • PS Protector.exe.config

Placer disse filer et sted på din computer (i dette tilfælde på skrivebordet), og åben “PS Protector.exe“.

Når programmet først åbnes, bliver du bedt om at indtaste et “UserID” og et “Password“. Da vi bruger prøveprogrammet har Stefan Soller (udvikleren) lavet en test bruger og nøgle.

  • UserID: demo
  • Password: rWf1+ccFx!p2a0e

Skriv overstående UserID og Password, tryk herefter “Login“.

Indtast userid og password

Beskyt dit modul

Nu er det tid til at beskytte vores test modul. Efter du er logget ind i PS Protector (se overstående), skal vi udfylde informationen i “Output Settings” fanen.

  • Convert
    • Input File Name: Indsæt stien til dit .PSM1 modul.
    • Destination Path: Indsæt en sti til hvor PS Protector skal placere din .DLL fil.
  • Assembly Info
    • Title: Angiv titlen på dit PowerShell modul.
    • Description: Skriv en kort beskrivelse af dit modul.
    • Company: Her skrives hvem der har lavet modulet.
    • Product: Angiv produktnavnet.
    • Copyright: Her skrives copyright tekst.
    • Version: Versionen af modulet.
  • Other
    • Your Message: Er valgfri og kan bruges til at indsætte en tekst ved importering af modulet i PowerShell.

Udfyld informationen i output settings

Der er også mulighed for at udnytte PS Protectors kommando linje interface, så vi kan automatisere beskyttelsen af vores PowerShell moduler. Det kommer vi dog ikke ind på i denne omgang.

Under fanen “License Settings” kan vi sætte en udløbs dato på .DLL-filen. Når denne dato bliver overskrevet, vil det ikke længere være muligt at bruge den kompilerede .DLL-fil.

Sæt hak i “Enable Licensing” samt “Enable Expire Date“, skriv dit navn i “Registered to (Company or User)” og sæt en dato i fremtiden.

Vælg licensering

Tilbage på fanen “Output Settings” er vi nu klar til at beskytte vores PowerShell modul. Tryk på “Protect (F7)“.

Tryk på protect

Lad os teste modulet

Åben en PowerShell terminal og kør følgende kommando. Kommandoen vil importere dit PowerShell modul via din .DLL-fil. Husk at ændre stien til hvor PS Protector placerede din beskyttede .DLL-fil.

Import-Module "C:\Users\zwable\Desktop\MyPowerShellModule.dll";

Nu kan vi prøve og eksekvere PowerShell funktionen “Get-LastBootUpTime” som er placeret i modulet via .DLL-filen. Kør følgende i samme kommando i samme terminal som overstående.

Get-LastBootUpTime;

Dette burde returnere en dato og et tidspunkt på hvornår computeren sidst blev startet.

Test modulet

Hvad bruges der til beskyttelsen?

I følge PS Protector er .DLL-filen beskyttet med den højeste kryptering, og kan beskytte mod .NET decompilers såsom Jetbrains dotPeek eller Redgate .NET Reflector.

PS Protector bruger kode beskyttelse og sløring i form af:

  • Advanced Anti-Debug and Anti-Tracer Protection
  • Advanced Overload Renaming
  • Anti-Reflection Protection
  • Anti-Decompiler Protection
  • Control Flow Obfuscation
  • Constant Value/Array Encryption
  • ILDASM Protection
  • String Encryption
  • Symbol Renaming

Man skal dog ikke se denne som 100% sikker. Der findes helt sikkert avancerede værktøjer eller højt kvalificerede personer som kan bryde denne beskyttelse.

Afsluttende bemærkninger

PS Protector er simpelt og virker efter hensigten. Jeg ser værktøjet som et godt match for firmaer, hvis forretningsmodel, kræver at kildekoden beskyttes. PowerShell virker efterhånden på flere platforme (macOS, Linux og Windows), jeg så gerne at PS Protector tog disse overvejelser med i deres produkt, så de udnyttede .NET Core (PowerShell 6+) frameworket.

Giv PS Protector en prøvetur. Softwaren har en konkurrencedygtig pris, og så slipper du selv for en større udvikling i C# eller lign. programmerings sprog.

Skriv en kommentar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

Scroll to Top

Find os

Zwable ApS
Jægersborgvej 128, kl.
DK-2820 Gentofte
Find os

Klik på dette link, for at modtage fjernsupport.

Kontakt os

Vi er på kontoret hverdage fra kl. 08:00-17:00. Med vagttelefonen åben 24 timer i døgnet året rundt.

Følg med

Tilmeld dig vores nyhedsbrev, så holder vi dig opdateret med nyheder, priser og andre tiltag.
Vi bruger cookies for at forbedre din brugeroplevelse. Du accepterer cookies ved af klikke videre på “OK“. Læs mere om vores cookie politik.