Ejemplo n.º 1
0
        public void SendPacket(Packet packet)
        {
            // Выделяем место под пакет, который мы будем посылать
            int packetAddress = _client.Mem.AllocateMemory(packet.Data.Length);

            // Записываем пакет
            _client.Mem.WriteBytes(packet.Data, packetAddress);

            // Переводим адрес, куда мы записали пакет в массив байт
            var packetLocation = BitConverter.GetBytes(packetAddress);

            // Если код не загружен ранее, загружаем его в память
            if (_sendPacketOpcodeAddress == 0)
            {
                LoadSendPacketOpcode();
            }

            // Записываем адрес, где лежит пакет в тело нашего инжекта
            _client.Mem.WriteBytes(packetLocation, _packetAddressLocation);
            // Записываем длину пакета
            _client.Mem.WriteBytes(new[] { (byte)packet.Data.Length }, _packetSizeAddress);

            // Запускаем инжект
            IntPtr threadHandle = _client.Mem.CreateRemoteThread(_sendPacketOpcodeAddress);

            // Ждем окончания выполнения потока
            _client.Mem.WaitForSingleObject(threadHandle);
            // Уничтожаем поток
            WinApi.CloseHandle(threadHandle);

            // Освобождаем память, выделенную под пакет
            _client.Mem.FreeMemory(packetAddress, packet.Data.Length);
            // Освобождаем память, выделенную под код отправки пакета
            _client.Mem.FreeMemory(_sendPacketOpcodeAddress, _sendPacketOpcode.Length);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Закрывает дескриптор открытого процесса.
 /// </summary>
 public static void CloseProcess()
 {
     WinApi.CloseHandle(OpenProcessHandle);
 }