Files
8damon-Blackbird-Platform/Client/analysis/Windows/DirectSyscallSuspectWindow.xaml
T
2026-04-03 14:23:15 +10:00

424 lines
25 KiB
XML

<Window x:Class="BlackbirdInterface.DirectSyscallSuspectWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Direct Syscall Suspects"
Height="760"
Width="1360"
MinHeight="580"
MinWidth="1080"
WindowStartupLocation="CenterOwner"
WindowStyle="None"
ResizeMode="CanResize"
Background="{DynamicResource WinBgBrush}"
UseLayoutRounding="True"
SnapsToDevicePixels="True"
TextOptions.TextFormattingMode="Display"
TextOptions.TextRenderingMode="ClearType">
<Window.Resources>
<Style x:Key="SummaryLabelStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="{DynamicResource WinMutedTextBrush}"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Margin" Value="0,0,8,0"/>
<Setter Property="VerticalAlignment" Value="Top"/>
</Style>
<Style x:Key="SummaryValueStyle" TargetType="TextBlock">
<Setter Property="FontSize" Value="12"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="VerticalAlignment" Value="Top"/>
</Style>
<Style x:Key="FilterTextBoxStyle" TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Background" Value="{DynamicResource WinHeaderBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource WinBorderBrush}"/>
<Setter Property="Width" Value="260"/>
<Setter Property="MinHeight" Value="26"/>
<Setter Property="Margin" Value="0,0,8,0"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="8,3"/>
</Style>
<Style x:Key="FilterComboStyle" TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="Background" Value="{DynamicResource WinHeaderBrush}"/>
<Setter Property="Foreground" Value="{DynamicResource WinTextBrush}"/>
<Setter Property="BorderBrush" Value="{DynamicResource WinBorderBrush}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="6,2"/>
<Setter Property="MinHeight" Value="26"/>
<Setter Property="Margin" Value="0,0,8,0"/>
<Setter Property="IsEditable" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<Grid>
<Border x:Name="SelectorBorder"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<ContentPresenter Margin="8,1,26,1"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Content="{TemplateBinding SelectionBoxItem}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}"
IsHitTestVisible="False"/>
<Path HorizontalAlignment="Right"
VerticalAlignment="Center"
Margin="0,0,8,0"
Data="M 0 0 L 8 0 L 4 4 Z"
Fill="{DynamicResource WinTextBrush}"
IsHitTestVisible="False"/>
<ToggleButton Background="Transparent"
BorderThickness="0"
Focusable="False"
IsChecked="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
ClickMode="Press">
<ToggleButton.Template>
<ControlTemplate TargetType="ToggleButton">
<Border Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"/>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
<Popup x:Name="PART_Popup"
Placement="Bottom"
IsOpen="{TemplateBinding IsDropDownOpen}"
Focusable="False"
AllowsTransparency="True"
PopupAnimation="Fade">
<Border Margin="0,2,0,0"
MinWidth="{Binding ActualWidth, RelativeSource={RelativeSource TemplatedParent}}"
Background="{DynamicResource WinPanelBrush}"
BorderBrush="{DynamicResource WinBorderBrush}"
BorderThickness="1">
<ScrollViewer MaxHeight="280"
CanContentScroll="True"
Background="{DynamicResource WinPanelBrush}"
Foreground="{DynamicResource WinTextBrush}"
BorderThickness="0">
<StackPanel IsItemsHost="True"/>
</ScrollViewer>
</Border>
</Popup>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="SelectorBorder" Property="BorderBrush" Value="{DynamicResource WinAccentBrush}"/>
</Trigger>
<Trigger Property="IsDropDownOpen" Value="True">
<Setter TargetName="SelectorBorder" Property="BorderBrush" Value="{DynamicResource WinAccentBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.6"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="FilterComboItemStyle" TargetType="ComboBoxItem" BasedOn="{StaticResource {x:Type ComboBoxItem}}">
<Setter Property="Background" Value="{DynamicResource WinPanelBrush}"/>
<Setter Property="Foreground" Value="{DynamicResource WinTextBrush}"/>
<Setter Property="Padding" Value="8,3"/>
<Style.Triggers>
<Trigger Property="IsHighlighted" Value="True">
<Setter Property="Background" Value="#FF2A2A2A"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#33323232"/>
<Setter Property="Foreground" Value="#FFF1F1F1"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Margin="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0"
Style="{DynamicResource SecondaryWindowTitleBarBorderStyle}"
MouseLeftButtonDown="TitleBar_MouseLeftButtonDown">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock x:Name="HeaderBlock"
Style="{DynamicResource SecondaryWindowTitleTextStyle}"
Text="Direct Syscall Suspects"/>
<TextBlock x:Name="SummaryBlock"
Style="{DynamicResource SecondaryWindowSubtitleTextStyle}"
Text="No suspect entries"/>
</StackPanel>
<StackPanel Grid.Column="1"
Orientation="Horizontal"
VerticalAlignment="Top">
<Button Style="{DynamicResource SecondaryWindowTitleGlyphButtonStyle}"
Content="&#xE921;"
Click="WindowMinimize_Click"/>
<Button Style="{DynamicResource SecondaryWindowTitleGlyphButtonStyle}"
Content="&#xE922;"
Click="WindowMaximize_Click"/>
<Button Style="{DynamicResource SecondaryWindowTitleGlyphButtonStyle}"
Tag="Close"
Content="&#xE8BB;"
Click="WindowClose_Click"/>
</StackPanel>
</Grid>
</Border>
<Border Grid.Row="1"
Margin="8,8,8,0"
Style="{DynamicResource SecondaryWindowSurfaceBorderStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="96"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="96"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="96"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Style="{StaticResource SummaryLabelStyle}" Text="Summary"/>
<TextBlock x:Name="DetectionSummaryBlock" Grid.Row="0" Grid.Column="1" Style="{StaticResource SummaryValueStyle}" FontWeight="SemiBold"/>
<TextBlock Grid.Row="0" Grid.Column="2" Style="{StaticResource SummaryLabelStyle}" Text="Time Window"/>
<TextBlock x:Name="WindowRangeBlock" Grid.Row="0" Grid.Column="3" Style="{StaticResource SummaryValueStyle}"/>
<TextBlock Grid.Row="0" Grid.Column="4" Style="{StaticResource SummaryLabelStyle}" Text="Entries"/>
<TextBlock x:Name="EntryCountBlock" Grid.Row="0" Grid.Column="5" Style="{StaticResource SummaryValueStyle}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Style="{StaticResource SummaryLabelStyle}" Margin="0,4,8,0" Text="Groups"/>
<TextBlock x:Name="GroupCountBlock" Grid.Row="1" Grid.Column="1" Style="{StaticResource SummaryValueStyle}" Margin="0,4,0,0"/>
<TextBlock Grid.Row="1" Grid.Column="2" Style="{StaticResource SummaryLabelStyle}" Margin="0,4,8,0" Text="Top Actor"/>
<TextBlock x:Name="TopActorBlock" Grid.Row="1" Grid.Column="3" Style="{StaticResource SummaryValueStyle}" Margin="0,4,0,0"/>
<TextBlock Grid.Row="1" Grid.Column="4" Style="{StaticResource SummaryLabelStyle}" Margin="0,4,8,0" Text="Top Target"/>
<TextBlock x:Name="TopTargetBlock" Grid.Row="1" Grid.Column="5" Style="{StaticResource SummaryValueStyle}" Margin="0,4,0,0"/>
</Grid>
</Border>
<Border Grid.Row="2"
Margin="8,8,8,0"
Style="{DynamicResource SecondaryWindowFilterBarStyle}">
<WrapPanel>
<TextBox x:Name="SearchBox"
Style="{StaticResource FilterTextBoxStyle}"
ToolTip="Search syscall, actor, target, detection, context"
TextChanged="SearchFilter_Changed"/>
<ComboBox x:Name="SeverityFilterBox"
Style="{StaticResource FilterComboStyle}"
ItemContainerStyle="{StaticResource FilterComboItemStyle}"
Width="150"
SelectionChanged="SearchFilter_Changed"/>
<CheckBox x:Name="GroupBySyscallToggle"
Content="Group by syscall"
VerticalAlignment="Center"
Margin="0,4,8,0"
IsChecked="True"
Checked="GroupBySyscallToggle_Changed"
Unchecked="GroupBySyscallToggle_Changed"/>
</WrapPanel>
</Border>
<Grid Grid.Row="3" Margin="8,8,8,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2.25*"/>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="1.75*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Style="{DynamicResource SecondaryWindowSurfaceBorderStyle}"
Padding="0">
<DataGrid x:Name="SuspectsGrid"
Style="{DynamicResource SecondaryDenseDataGridStyle}"
AutoGenerateColumns="False"
IsReadOnly="True"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeRows="False"
CanUserSortColumns="True"
RowHeaderWidth="0"
ScrollViewer.CanContentScroll="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingPanel.VirtualizationMode="Recycling"
EnableRowVirtualization="True"
IsSynchronizedWithCurrentItem="False"
SelectedIndex="-1"
SelectionChanged="SuspectsGrid_SelectionChanged">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow" BasedOn="{StaticResource AppDataGridRowStyle}">
<Setter Property="Background" Value="{Binding RowBackground}"/>
<Setter Property="BorderBrush" Value="{Binding RowBorder}"/>
<Setter Property="BorderThickness" Value="0,0,0,1"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="BorderThickness" Value="0"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Border BorderBrush="{DynamicResource WinSubtleBorderBrush}"
BorderThickness="0,0,0,1">
<Expander IsExpanded="False"
HorizontalAlignment="Stretch"
Background="Transparent">
<Expander.Header>
<Grid Margin="6,2,6,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="138"/>
<ColumnDefinition Width="72"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
FontWeight="SemiBold"
Text="{Binding Name}"
TextTrimming="CharacterEllipsis"/>
<TextBlock Grid.Column="1"
Text="{Binding Items[0].TimestampUtc, StringFormat=HH:mm:ss.fff}"
Foreground="{DynamicResource WinMutedTextBrush}"/>
<TextBlock Grid.Column="2"
HorizontalAlignment="Right"
FontWeight="SemiBold"
Foreground="{DynamicResource WinMutedTextBrush}"
Text="{Binding ItemCount, StringFormat={}x{0}}"/>
</Grid>
</Expander.Header>
<ItemsPresenter/>
</Expander>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Time" Width="112" Binding="{Binding TimestampUtc, StringFormat=HH:mm:ss.fff}"/>
<DataGridTextColumn Header="Syscall" Width="1.05*" Binding="{Binding SyscallLabel}"/>
<DataGridTextColumn Header="Actor" Width="*" Binding="{Binding Actor}"/>
<DataGridTextColumn Header="Target" Width="*" Binding="{Binding Target}"/>
<DataGridTextColumn Header="Severity" Width="88" Binding="{Binding Severity}"/>
<DataGridTextColumn Header="Detection" Width="1.2*" Binding="{Binding Detection}"/>
</DataGrid.Columns>
</DataGrid>
</Border>
<Border Grid.Column="2"
Style="{DynamicResource SecondaryWindowSurfaceBorderStyle}"
Padding="0">
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Padding="0"
CanContentScroll="False">
<Border Padding="8" Background="Transparent">
<StackPanel>
<TextBlock Text="Details Inspector"
Style="{DynamicResource SecondaryWindowTitleTextStyle}"
FontSize="12"/>
<TextBlock Text="Overview"
Style="{DynamicResource SecondaryWindowSectionHeaderStyle}"
Margin="0,8,0,4"/>
<TextBlock x:Name="OverviewBlock"
TextWrapping="Wrap"
Foreground="{DynamicResource WinMutedTextBrush}"/>
<TextBlock Text="Arguments / Context"
Style="{DynamicResource SecondaryWindowSectionHeaderStyle}"
Margin="0,8,0,4"/>
<DataGrid x:Name="ArgumentsGrid"
Style="{DynamicResource SecondaryDenseDataGridStyle}"
Margin="0,0,0,8"
AutoGenerateColumns="False"
IsReadOnly="True"
CanUserReorderColumns="False"
CanUserSortColumns="False"
MinHeight="100"
MaxHeight="220"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTextColumn Header="Field" Width="140" Binding="{Binding Key}"/>
<DataGridTextColumn Header="Value" Width="*" Binding="{Binding Value}"/>
</DataGrid.Columns>
</DataGrid>
<TextBlock Text="Execution Context"
Style="{DynamicResource SecondaryWindowSectionHeaderStyle}"
Margin="0,0,0,4"/>
<DataGrid x:Name="ContextGrid"
Style="{DynamicResource SecondaryDenseDataGridStyle}"
Margin="0,0,0,8"
AutoGenerateColumns="False"
IsReadOnly="True"
CanUserReorderColumns="False"
CanUserSortColumns="False"
MinHeight="100"
MaxHeight="220"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<DataGrid.Columns>
<DataGridTextColumn Header="Field" Width="140" Binding="{Binding Key}"/>
<DataGridTextColumn Header="Value" Width="*" Binding="{Binding Value}"/>
</DataGrid.Columns>
</DataGrid>
<Button x:Name="OpenDisassemblyButton"
Content="Copy Disassembly"
MinWidth="148"
MinHeight="26"
HorizontalAlignment="Left"
Margin="0,0,0,8"
Click="OpenDisassemblyButton_Click"/>
<Expander Header="Raw Event" IsExpanded="False">
<Border Margin="0,6,0,0"
MinHeight="120"
Background="{DynamicResource WinHeaderBrush}"
BorderBrush="{DynamicResource WinBorderBrush}"
BorderThickness="1">
<TextBox x:Name="RawBox"
BorderThickness="0"
Padding="8"
IsReadOnly="True"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
MinHeight="120"
AcceptsReturn="True"
FontFamily="Consolas"
FontSize="12"
Background="Transparent"
Foreground="{DynamicResource WinTextBrush}"/>
</Border>
</Expander>
</StackPanel>
</Border>
</ScrollViewer>
</Border>
</Grid>
</Grid>
</Window>