param( [Parameter(Mandatory = $true)] [string]$Name, [Parameter(Mandatory = $true)] [string[]]$HarnessArgs ) $ErrorActionPreference = 'Stop' $Root = Resolve-Path (Join-Path $PSScriptRoot '..\..') $Harness = Join-Path $Root 'src\MxTraceHarness\bin\Release\net481\MxTraceHarness.exe' $Script = Join-Path $Root 'analysis\frida\mx-nmx-trace.js' $TraceDir = Join-Path $Root "captures\$Name" New-Item -ItemType Directory -Force $TraceDir | Out-Null $HarnessLog = Join-Path $TraceDir 'harness.log' $FridaOut = Join-Path $TraceDir 'frida.stdout.jsonl' $FridaErr = Join-Path $TraceDir 'frida.stderr.txt' $CommandFile = Join-Path $TraceDir 'frida-command.txt' if (Test-Path $HarnessLog) { Remove-Item -LiteralPath $HarnessLog -Force } if (Test-Path $FridaOut) { Remove-Item -LiteralPath $FridaOut -Force } if (Test-Path $FridaErr) { Remove-Item -LiteralPath $FridaErr -Force } $FullHarnessArgs = @($HarnessArgs + @("--log=$HarnessLog", "--client=MxFridaTrace-$Name")) $Frida = (Get-Command frida.exe -ErrorAction Stop).Source $ArgumentList = @('-f', $Harness, '-l', $Script, '--') + $FullHarnessArgs "frida=$Frida" | Out-File -Encoding UTF8 $CommandFile "harness=$Harness" | Out-File -Encoding UTF8 -Append $CommandFile ("args=" + ($ArgumentList -join ' ')) | Out-File -Encoding UTF8 -Append $CommandFile $Process = Start-Process -FilePath $Frida ` -ArgumentList $ArgumentList ` -Wait ` -PassThru ` -NoNewWindow ` -RedirectStandardOutput $FridaOut ` -RedirectStandardError $FridaErr "exit_code=$($Process.ExitCode)" | Out-File -Encoding UTF8 (Join-Path $TraceDir 'frida-exit.txt') Get-ChildItem $TraceDir | Select-Object Name, Length, LastWriteTime