Steganography Code in PowerShell is not working correctly

141 Views Asked by At

In my IT class, we are currently working on Steganography and I got this code for PowerShell I am working with to hide a message in an image. The code works but our instructions say to remove a part because it is unnecessary. But if I remove this part as we are instructed to the code runs differently but then tells me there is a syntax error to the command and is not writing the message to the image. This is the code we are working with

function Hide-Msg {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $True, ValueFromPipeline = $True)]
        [string]$Path,

        [Parameter(Mandatory = $False)]
        [string]$Message
    )

    # Prompt the user for the message if not provided as an argument
    if (-not $Message) {
        $Message = Read-Host "Enter the message to hide"
    }

    # Prompt the user for confirmation before proceeding
    $confirmation = Read-Host "Are you sure you want to hide the message in '$Path'? (Y/N)"
    if ($confirmation -ne "Y") {
        Write-Host "Operation canceled."
        return
    }

    echo "`n`n $Message" > $Env:USERPROFILE\Desktop\foo.txt

    cmd.exe /c copy /b "$Path" + "$Env:USERPROFILE\Desktop\foo.txt" "$Path"

    rm $Env:USERPROFILE\Desktop\foo.txt -r -Force -ErrorAction SilentlyContinue
}

# Example usage:
# Hide-Msg -Path "C:\example.txt" -Message "This is a hidden message"

**The part we are supposed to remove is this **

param (
    [Parameter(Mandatory = $True, ValueFromPipeline = $True)]
    [string]$Path,

    [Parameter(Mandatory = $False)]
    [string]$Message
)

But then first of all the [CmdletBinding()] gives me an error so I removed the () but that led me to the problem that it does prompt me and asks me for the message I want to write and asks to confirm but eventually gives me the syntax error before it writes it. How can I fix this problem without completely changing the code?

I added

param (
        [string]$Path,
        [string]$Message
    )
    

to define the parameter but that basically brings me back to square one and to the code running the same as with the "unnecessary" code piece. Per instructions, it was supposed to run differently and write the message to the image.

0

There are 0 best solutions below