Obfuskacja PowerShell z VSCode i Cursor

Dzisiaj opublikowałem rozszerzenie mojego obfuscatora PowerShell dla edytora Visual Studio Code (VS Code) oraz kompatybilnych z Open VSX, jak np. Cursor.

Po instalacji wystarczy kliknąć prawym klawiszem zakładkę skryptu PowerShell i wybrać Obfuscate lub wpisać komendę /obfuscate

I tyle, wszystko gra i buczy :). A jeszcze jakby ktoś chciał sobie podejrzeć źródła rozszerzenia, to dostępne są na GitHubie:

https://github.com/PELock/PowerShell-Pro-Obfuscator-VSCode-Extension

Pozdro hakery.

PowerShell Pro Obfuscator na PowerShell Gallery

Natywny moduł dla PowerShell Pro Obfuscator, opublikowany na PowerShell Gallery, umożliwiający wykorzystanie obfuscatora bezpośrednio w kodzie PowerShell.

https://www.powershellgallery.com/packages/PowerShellProObfuscator/1.0.0

Obfuskacja PowerShell z PowerShell

###############################################################################
#
# PowerShell Pro Obfuscator WebApi interface usage example.
#
# In this example we will obfuscate sample source with custom options.
#
# Version        : v1.0.0
# Language       : PowerShell
# Author         : Bartosz Wójcik
# Web page       : https://www.pelock.com
#
###############################################################################

# install once:
# Install-Module -Name PowerShellProObfuscator -Scope CurrentUser

Import-Module PowerShellProObfuscator

#
# source code in PowerShell format
#
$scriptSourceCode = @'
function Get-Greeting {
    param([string]$Name)
    Write-Host "Hello World from $Name!"
}
Get-Greeting "PowerShell Pro Obfuscator"
'@

#
# select obfuscation strategies explicitly (only listed switches are enabled)
#
try
{
    $output = Invoke-PowerShellProObfuscate `
        -Source $scriptSourceCode `
        -ActivationCode 'ABCD-ABCD-ABCD-ABCD' `
        -EnableCompression:$false `
        -SelfDefending `
        -ProtectionLinker `
        -RenameVariables `
        -RenameParameters `
        -RenameFunctions `
        -ShuffleFunctions `
        -ControlFlowFlatten `
        -StateMachine `
        -VmStrategy `
        -EncryptIntegers `
        -SplitStrings `
        -EncryptStrings `
        -IntegersToArrays `
        -FloatsToArrays `
        -InsertDeadCode `
        -ComplexifyBooleans `
        -IntegersToFloating `
        -EncryptFloating `
        -DecoyFunctions `
        -DetectDebugger `
        -FakeDotSourceMarkers `
        -OpaqueBranches `
        -ScriptblockDecoys `
        -LiteralPadding `
        -ReflectInvokeCommands `
        -StringCharArrayVault `
        -TryFinallyNoise `
        -AffineIntegerMask `
        -EventStub `
        -RemoveComments

    Write-Host $output
}
catch
{
    throw "An error occurred while trying to obfuscate the code: $_"
}

PowerShell Pro Obfuscator – Obfuskator i Wirtualizer dla PowerShell

Mój nowy projekt zaawansowanego obfuskatora i wirtualizera dla skryptów PowerShell o nazwie PowerShell Pro Obfuscator. Oferuje ogromną ilość opcji obfuskacyjnych, wirtualizację kodu, transformacje do tzw. finite-state automata, sprawdzenie integralności kodu (czyli self-crc, gdzie klucz weryfikacji jest używany jako klucz odszyfrowania w innych elementach obfuskacji), detekcję debuggowania i masę innych strategii utrudniających odtworzenie oryginalnego skryptu.

Dostępny jako obfuscator online, z osobnym klientem dla Windows i Linux (plus wersja CLI), oraz jako pakiety programistyczne dla Python, C#, JS, Rust, PHP.

Główne okienko obfuscatora

PowerShell Pro Obfuscator & Virtualizer

Opcje obfuskacji skryptów PowerShell

Opcje obfuskacji i wirtualizacji kodu w narzędziu PowerShell Pro Obfuscator.

Kod PowerShell po obfuskacji

Kod skryptu PowerShell po obfuskacji.

Wersja CLI, pozwalająca na szybką automatyzację

Wersja konsolowa obfuskatora dla PowerShell.

Zasada działania obfuskatora PowerShell Pro Obfuscator

Engine bazuje na zaawansowanym parsowaniu i transformowaniu drzewa AST skryptów PowerShell. Nie ma tu żadnych zawodnych RegExów. W dużym skrócie wygląda to tak:

Projekt przeszedł ogromną liczbę testów oraz wykorzystuje znane i mniej znane (jak FSA) metody obfuskacji oraz innowacyjne metody, które utrudniają odbudowę zobfuskowanych skryptów.

AutoIt Obfuscator v2.2

Claude Opus v4.8 trochę popracował nad analizą silnika mojego AutoIt Obfuscatora i znalazł masę błędów, a także znacznie przyspieszył jego działanie, zachowując 100% kompatybilność.

Obfuskacja kodu źródłowego AutoIt

Zmiany w v2.2

  • Znaczne przyspieszenie silnika — przepisane bajtowe operacje wejścia/wyjścia leksera, buforowana długość kodu źródłowego, wyszukiwanie symboli oparte na tablicach mieszających oraz lżejsze przechodzenie drzewa AST sprawiają, że obfuskacja jest znacznie szybsza, dając identyczny bajtowo wynik
  • Naprawiono awarię parsera w blokach Switch / Select — instrukcje umieszczone przed pierwszym Case zwracają teraz czysty błąd parsowania zamiast wyjątku krytycznego
  • Naprawiono parsowanie deklaracji z wieloma modyfikatorami np. Local Static Const $var = 1 (wcześniej uwzględniany był tylko pierwszy modyfikator)
  • Naprawiono generowanie nieprawidłowych nazw zmiennych, które mogą zaczynać się od cyfry, np. $9abc, co jest niedozwolone w AutoIt
  • Naprawiono błąd, w którym liczbowe wartości warunków Case / If były emitowane jako błędne zmienne np. $123456789 podczas mieszania przepływu kodu
  • Naprawiono błędne obliczanie poziomu zagnieżdżenia pętli dla ContinueLoop / ExitLoop przy wielu przebiegach mieszania przepływu kodu
  • Naprawiono szyfrowanie ciągów znaków: literał "0" jest teraz poprawnie szyfrowany, a nieudane szyfrowanie nie wstawia już uszkodzonej procedury deszyfrującej
  • Rozpoznawanie funkcji wbudowanych, makr i stałych bez uwzględniania wielkości liter (AutoIt jest niewrażliwy na wielkość liter), aby uniknąć błędnej zmiany nazw i podmiany stałych
  • Poprawiono kilka wartości stałych wbudowanych (flagi atrybutów plików) oraz usunięto zduplikowane / błędne wpisy z tablic wewnętrznych
  • Zwiększono odporność leksera: poprawna obsługa pustych plików, zakończeń linii typu LF oraz wykrywanie niezamkniętych ciągów znaków
  • Wyłączone opcje obfuskacji są teraz ściśle respektowane zamiast powracać do wartości domyślnych
  • Liczne wewnętrzne usprawnienia odporności i poprawki zgodności typów z PHP 8 w silniku obfuskacji

Obfuscator dostępny jest pod adresem:

https://www.pelock.com/pl/produkty/autoit-obfuscator

Integracja AutoIt Obfuscatora z SciTE

Dodałem integrację AutoIt Obfuscatora i procesu obfuskacji do domyślnego edytora AutoIt – SciTE.

Wystarczy zainstalować AutoIt Obfuscator korzystając z instalatora, a plik konfiguracyjny edytora, znajdujący się w folderze %USERPROFILE%\SciTEUser.properties zostanie automatycznie zaktualizowany.

Zmiana ta doda nową komendę Obfuscate do menu edytora Tools, dzięki czemu jednym kliknięciem można obfuskować skrypty *.au3.

Integracja AutoIt Obfuscator z domyślnym edytorem AutoIt - SciTE.

Wprowadzone zmiany do pliku konfiguracyjnego:

### AutoItObfuscator Section Start

#
# Menu extension for AutoIt Obfuscator for SciTE editor
#
# 1. Open SciTE editor
# 2. Click menu -> Options -> Open User Options File
# 3. Paste the content of this script into the user options file
# 4. Setup extra obfuscation parameters, activation key, and output file path
# 5. Save file
# 6. You will find a new "Obfuscate" command in Tools menu for *.au3 files
#
# https://www.pelock.com/products/autoit-obfuscator
# https://www.scintilla.org/SciTEDoc.html
#

# Activate the obfuscator menu for *.au3 files only (* for all files)
command.name.11.*.au3=Obfuscate

# Setup your obfuscation parameters, enter your activation key, output path etc.

#
# overwrite existing file (SciTE fill refresh the view, you can always undo it CTRL-Z)
#
command.11.*.au3=C:\Program Files (x86)\AutoIt Obfuscator\AutoItObfuscatorCmd.exe /InputFilePath="$(FilePath)" /OutputFilePath="$(FilePath)"
#command.11.*.au3=C:\Program Files (x86)\AutoIt Obfuscator\AutoItObfuscatorCmd.exe /ActivationCode="ENTER-YOUR-CODE-HERE" /InputFilePath="$(FilePath)" /OutputFilePath="$(FilePath)"

#
# create a new file
#
#command.11.*.au3=C:\Program Files (x86)\AutoIt Obfuscator\AutoItObfuscatorCmd.exe /InputFilePath="$(FilePath)" /OutputFilePath="$(FilePath).obfuscated.au3"


# Save any script before obfuscation (1 - save before obfuscation, 2 - use previously saved file content)
command.save.before.11.*.au3=1

# Specify the subsystem (0 Console, 2 = Windows GUI Executable / Web Link)
command.subsystem.11.*.au3=0

# Obfuscation command shortcut
command.shortcut.11.*.au3=Ctrl+F12

### AutoItObfuscator Section End

Można je edytować w SciTE, klikając w menu Options i Open User Options File, np. zmieniając parametry obfuskacji czy dodając tam swój klucz aktywacyjny.

Jakby kogoś ciekawiło (wątpię), jakie są dostępne opcje konfiguracji — warto zajrzeć do oficjalnej dokumentacji projektu SciTE.