Initial commit

This commit is contained in:
2026-09-19 16:13:20 +03:00 Unverified
commit d60d5b98d4
24 changed files with 1278 additions and 0 deletions
+157
View File
@@ -0,0 +1,157 @@
<?xml version="1.0" encoding="utf-8"?>
<UserControl
x:Class="IPClab3.Hack.Hack"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:IPClab3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:c="using:IPClab3.Converters"
mc:Ignorable="d">
<UserControl.Resources>
<c:MemoryAddressConverter x:Key="MemoryAddressConverter"/>
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Margin="12" Background="{ThemeResource LayerFillColorDefaultBrush}" CornerRadius="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Выберите и запустите процесс" Style="{ThemeResource BodyLargeTextBlockStyle}" Margin="16"/>
<Grid Grid.Row="1" HorizontalAlignment="Stretch" Margin="16,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBox IsReadOnly="True" Margin="0,0,8,0" Text="{x:Bind ViewModel.FilePath, Mode=OneWay}"/>
<Button Grid.Column="1" Content="Выбрать" Click="Button_Click"/>
</Grid>
<Button Grid.Row="2" Style="{ThemeResource AccentButtonStyle}" Margin="16" HorizontalAlignment="Stretch" Command="{x:Bind ViewModel.StartProcessCommand}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<FontIcon Glyph="&#xF5B0;" />
<TextBlock Text="Запустить процесс" Margin="8,0"/>
</StackPanel>
</Button.Content>
</Button>
</Grid>
</Border>
<TextBlock Grid.Row="1" Text="или" HorizontalAlignment="Center" Style="{ThemeResource BodyLargeTextBlockStyle}"/>
<Border Grid.Row="2" Margin="12" Background="{ThemeResource LayerFillColorDefaultBrush}" CornerRadius="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Выберите запущенный процесс" Style="{ThemeResource BodyLargeTextBlockStyle}" Margin="16"/>
<AutoSuggestBox Grid.Row="1" PlaceholderText="Введите имя процесса" HorizontalAlignment="Stretch" Margin="16,0"
TextMemberPath="ProcessName" DisplayMemberPath="ProcessName" QueryIcon="Find"
Text="{x:Bind ViewModel.SearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{x:Bind ViewModel.Suggestions, Mode=OneWay}"
SuggestionChosen="AutoSuggestBox_SuggestionChosen" TextChanged="AutoSuggestBox_TextChanged"
/>
<Button Grid.Row="2" Style="{ThemeResource AccentButtonStyle}" Margin="16" HorizontalAlignment="Stretch" PointerEntered="Button_PointerEntered" Command="{x:Bind ViewModel.AttachProcessCommand}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<FontIcon Glyph="&#xE8CE;" />
<TextBlock Margin="8,0">
<Run Text="Подключить процесс: "/><Run Text="{x:Bind ViewModel.SelectedProcess.Pid, Mode=OneWay, TargetNullValue='', FallbackValue=''}"/>
</TextBlock>
</StackPanel>
</Button.Content>
</Button>
</Grid>
</Border>
<Border Grid.Row="3" Height="1" BorderThickness="0,1,0,0" BorderBrush="{ThemeResource DividerStrokeColorDefaultBrush}"/>
<Border Grid.Row="4" Margin="12" Background="{ThemeResource LayerFillColorDefaultBrush}" CornerRadius="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="{x:Bind ViewModel.ReadData, Mode=OneWay}" Style="{ThemeResource BodyLargeTextBlockStyle}" Margin="16"/>
<Grid Grid.Row="1" HorizontalAlignment="Stretch" Margin="16,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Grid Margin="0,0,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Margin="0,0,8,0" Text="Адрес: " VerticalAlignment="Center"/>
<TextBox Grid.Column="1" VerticalAlignment="Center" PlaceholderText="0x7FFF5000 или 00401000" Text="{x:Bind ViewModel.MemoryAddress, Converter={StaticResource MemoryAddressConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<Grid Grid.Column="1" Margin="8,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Margin="0,0,8,0" Text="Длина: " VerticalAlignment="Center"/>
<NumberBox Grid.Column="1" SmallChange="1" Value="{x:Bind ViewModel.ReadLength, Mode=TwoWay}" Maximum="1024" VerticalAlignment="Center" SpinButtonPlacementMode="Compact"/>
</Grid>
</Grid>
<Button Grid.Row="2" Style="{ThemeResource AccentButtonStyle}" Margin="16" HorizontalAlignment="Stretch" Command="{x:Bind ViewModel.ReadMemoryCommand}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<FontIcon Glyph="&#xE773;" />
<TextBlock Margin="8,0" Text="Прочитать"/>
</StackPanel>
</Button.Content>
</Button>
</Grid>
</Border>
<Border Grid.Row="5" Margin="12" Background="{ThemeResource LayerFillColorDefaultBrush}" CornerRadius="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="{x:Bind ViewModel.WriteData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontSize="{ThemeResource BodyLargeTextBlockFontSize}" Margin="16"/>
<Grid Grid.Row="1" HorizontalAlignment="Stretch" Margin="16,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Grid Margin="0,0,8,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Margin="0,0,8,0" Text="Адрес: " VerticalAlignment="Center"/>
<TextBox Grid.Column="1" VerticalAlignment="Center" PlaceholderText="0x7FFF5000 или 00401000" Text="{x:Bind ViewModel.MemoryAddress, Converter={StaticResource MemoryAddressConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
<TextBlock Grid.Column="1" Margin="0,0,8,0" VerticalAlignment="Center" HorizontalAlignment="Center">
<Run Text="Длина: "/><Run Text="{x:Bind ViewModel.WriteData.Length, Mode=OneWay}"/>
</TextBlock>
</Grid>
<Button Grid.Row="2" Style="{ThemeResource AccentButtonStyle}" Margin="16" HorizontalAlignment="Stretch" Command="{x:Bind ViewModel.WriteMemoryCommand}">
<Button.Content>
<StackPanel Orientation="Horizontal">
<FontIcon Glyph="&#xE929;" />
<TextBlock Margin="8,0" Text="Записать"/>
</StackPanel>
</Button.Content>
</Button>
</Grid>
</Border>
<InfoBar Severity="Success" Grid.RowSpan="7" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Margin="16" Title="Записано успешно!" IsOpen="{x:Bind ViewModel.IsSuccessOpen, Mode=TwoWay}"/>
</Grid>
</UserControl>
+52
View File
@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using IPClab3.Models;
using IPClab3.ViewModels;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Navigation;
using Windows.Foundation;
using Windows.Foundation.Collections;
// To learn more about WinUI, the WinUI project structure,
// and more about our project templates, see: http://aka.ms/winui-project-info.
namespace IPClab3.Hack;
public sealed partial class Hack : UserControl
{
public MainWindowViewModel ViewModel;
public Window window;
public Hack()
{
InitializeComponent();
}
private void AutoSuggestBox_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
{
ViewModel.SelectedProcess = (ProcessItem)args.SelectedItem;
}
private void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
if (ViewModel.SelectedProcess?.ProcessName != sender.Text)
ViewModel.SelectedProcess = null;
}
private void Button_PointerEntered(object sender, PointerRoutedEventArgs e)
{
ViewModel.AttachProcessCommand.NotifyCanExecuteChanged();
}
private async void Button_Click(object sender, RoutedEventArgs e)
{
await ViewModel.PickFile(WinRT.Interop.WindowNative.GetWindowHandle(window));
}
}