[Console]::OutputEncoding = [Text.Encoding]::UTF8 # Extract AECH (sub=05) / AERE (sub=06) frames from cold2.tsv, diff across rounds $raw = [IO.File]::ReadAllBytes("$env:TEMP\opencode\cold2.tsv") $text = [Text.Encoding]::UTF8.GetString($raw) if ($raw[0] -eq 0xFF -and $raw[1] -eq 0xFE) { $text = [Text.Encoding]::Unicode.GetString($raw) } $lines = $text -split "`r?`n" function H2B($hex) { $h = $hex -replace " ",""; $n = $h.Length/2; $b = New-Object byte[] $n; for ($i=0; $i -lt $n; $i++) { $b[$i] = [Convert]::ToByte($h.Substring(2*$i,2),16) }; return $b } $chals = @(); $resps = @() foreach ($l in $lines) { $p = $l -split "`t" if ($p.Count -lt 5 -or -not $p[4]) { continue } $b = H2B $p[4] if ($b.Length -lt 0x30) { continue } if ($b[0] -ne 0x45 -or $b[1] -ne 0x4e -or $b[2] -ne 0x65 -or $b[3] -ne 0x74) { continue } # ENet $tag = [Text.Encoding]::ASCII.GetString($b[0x28..0x2B]) if ($tag -eq "AECH") { $chals += ,@{ t=[double]$p[0]; src=$p[1]; b=$b } } if ($tag -eq "AERE") { $resps += ,@{ t=[double]$p[0]; src=$p[1]; b=$b } } } Write-Host "AECH challenges: $($chals.Count), AERE responses: $($resps.Count)" foreach ($c in $chals) { Write-Host (" CHAL t={0,8:F3} src={1} len={2}" -f $c.t, $c.src, $c.b.Length) } foreach ($r in $resps) { Write-Host (" RESP t={0,8:F3} src={1} len={2}" -f $r.t, $r.src, $r.b.Length) } # diff rounds: varying offset runs function Diff-Frames($frames, $label) { if ($frames.Count -lt 2) { return } $len = $frames[0].b.Length $vary = @() for ($i = 0; $i -lt $len; $i++) { $v = $frames[0].b[$i]; $diff = $false foreach ($f in $frames) { if ($f.b[$i] -ne $v) { $diff = $true; break } } if ($diff) { $vary += $i } } Write-Host "`n=== $label varying offsets ($($vary.Count) bytes) ===" # group into runs $runs = @(); $start = -1; $prev = -2 foreach ($o in $vary) { if ($o -ne $prev + 1) { if ($start -ge 0) { $runs += ,"$start-$prev" }; $start = $o }; $prev = $o } if ($start -ge 0) { $runs += ,"$start-$prev" } foreach ($r in $runs) { $a, $bb = $r -split "-"; $a = [int]$a; $bb = [int]$bb $parts = @() foreach ($f in $frames) { $parts += (($f.b[$a..$bb] | ForEach-Object { $_.ToString("x2") }) -join "") } Write-Host (" 0x{0:x2}-0x{1:x2} ({2}B): {3}" -f $a, $bb, ($bb-$a+1), ($parts -join " | ")) } } Diff-Frames $chals "CHALLENGES" Diff-Frames $resps "RESPONSES"