firex
AutoIT Гуру
- Сообщения
- 943
- Репутация
- 208
AutoIt: >=3.3.12.0
Версия: 0.5.0
Категория: Администрирование, Интернет, Шифрование, Сеть, Разное
Описание: Работает по принципу Backdor(Back Connect); Позволяет осуществлять дистанционное выполнение AutoIt кода. Разработка может быть использована в целях создания устойчивых ко взлому ботов ( так как серверу не доступен полный исходный код ), или автоматизации операций на множестве удаленных компьютеров.
Основные возможности:
Парочка примеров: (Задание | Аргумент | Буфер)
Код/Пример:
Файл: server_v.0.5.0.au3
Снимок:
Источник: autoit-script.ru
Автор(ы): Firex
Версия: 0.5.0
Категория: Администрирование, Интернет, Шифрование, Сеть, Разное
Описание: Работает по принципу Backdor(Back Connect); Позволяет осуществлять дистанционное выполнение AutoIt кода. Разработка может быть использована в целях создания устойчивых ко взлому ботов ( так как серверу не доступен полный исходный код ), или автоматизации операций на множестве удаленных компьютеров.
Основные возможности:
- Данные передаются в зашифрованном виде
- Автоматическое восстановление соединения при его обрыве
- Поддержка Array, Int32, Int64, Binary, Bool, Ptr, Double, String, Keyword
- Возможность передачи данных любых объемов
- Относительно высокая скорость обработки принятых данных
- Открытие именованных заданий для сохранения данных в буфер
- Индексирование буфера исходя из максимального размера пакета
Парочка примеров: (Задание | Аргумент | Буфер)
Более подробно со списком заданий, их типами и аргументами вы можете ознакомиться в исходном коде.
Код:
Запрос: Execute | 0 | MsgBox( 64, '', 'Hello' )
Ответ: Кол-во пакетов|Общий размер данных
1) Поскольку тип задания Execute - сервер откроет задание "Execute" и положит данные в буфер.
2) Для получения этих данных мы отправим запрос с аргументом -100 (!Next):
Execute | -100 | 1 , где 1 - номер пакета в буфере.
3) В ответ мы получим пакет типа Custom ( реальный тип 100-Custom ) с нашей частью данных.
4) Как только мы закончили работу с этим заданием - мы можем закрыть его и освободить буфер:
CloseChallenge | 0 | Execute
Код:
Запрос: Execute_v2 | 0 | MsgBox( 64, '', 'Hello' )
Ответ: Данные возвращенные после выполнения
1) Команда Execute_v2 принадлежит классу "Instant", они игнорируют открытые задания и не создают буфер.
Код:
Запрос: Execute_v2 | -102 | MsgBox( 64, '', 'Hello' )
Ответ: Ответа нет
1) Аргумент -102(!NoResponse) указывает, что отвечать клиенту нет нужды.
Код/Пример:
Код:
#Include <WinAPI.au3>
#Include <APIConstants.au3>
#Include <Array.au3>
#Include <Crypt.au3>
#Include <GUIEdit.au3>
TCPStartup()
Opt( "TCPTimeout", 0 )
Global Const $__AUTTYPE[10][2] = [ [9], [10, "Array"], [11, "Int32"], [12, "Int64"], [13, "Binary"], [14, "Bool"], [15, "Ptr"], [16, "Double"], [17, "String"], [18, "Keyword"] ]
Global Const $tagRAUT = "DWORD rAut; UINT uId; INT iFlag; INT Error; INT Extended;", $tagRAUTSZ = 0x14
Global Const $__PARAMS[7] = [ 0x54554152, "testEncKey", @IPAddress1, 1818 ]
; << GUI CREATE
Local $hGui, $iEdit, $iDummy, $aInput[5], $aKeys[1][2] = [["{ENTER}", 0]]
; -
$hGui = GUICreate( 'client_[console] - example', 890, 320, -1, -1, 0x16CF0000, 0x00000100 )
$iEdit = GUICtrlCreateEdit( 'Build nightly Jul 08 2013.' & @CRLF, 3, 3, 884, 289, 0x50200844 )
$aInput[0] = GUICtrlCreateInput( '1', 3, 296, 29, 20 )
$aInput[1] = GUICtrlCreateInput( '10', 41, 296, 91, 20 )
$aInput[2] = GUICtrlCreateInput( 'MsgBox( 64, "Title", "Text", 5 )', 141, 296, 677, 20 )
$aInput[3] = GUICtrlCreateInput( '-101', 827, 296, 60, 20 )
$iDummy = GUICtrlCreateDummy()
$aKeys[0][1] = $iDummy
GUISetAccelerators( $aKeys )
GUISetBkColor( 0x76bbec )
GUICtrlSetBkColor( $aInput[2], 0xffff00 )
GUiCtrlSetFont( $iEdit, 11 )
GUISetState(@SW_SHOW, $hGui)
_WinAPI_RedrawWindow( GUICtrlGetHandle( $aInput[2] ) ) ;Fix AutoIt bug
; << OPEN SOCKET
Local $hSocket, $hClSock, $aClients[1][2]
; -
$hSocket = TCPListen( $__PARAMS[2], $__PARAMS[3] )
If @Error Then _
Exit MsgBox( 16, 'WSA Error', 'Code=' & @Error )
; << SETUP CRYPT
Local $hCryptKey = _Crypt_DeriveKey( $__PARAMS[1], 0x00006601 )
; << MAIN LOOP
Local $iMsg, $ClIdx, $sZ, $tBuffer, $tRaut, $tData, $vPack
; -
While 1
$iMsg = GUIGetMsg()
Switch $iMsg
Case -3 ;GUI_EVENT_CLOSE
GUIDelete( $hGui )
; -
For $ClIdx = 1 To $aClients[0][0] Step 1
__RemoveUser( $ClIdx )
Next
TCPCloseSocket( $hSocket )
TCPShutdown()
ExitLoop
Case $iDummy ;SEND PACKAGE
; HOW TO SEND PACKAGE
$tRaut = DllStructCreate( $tagRAUT )
$tRaut.rAut = $__PARAMS[0]
$tRaut.uId = Int( GUICtrlRead( $aInput[1] ) )
$tRaut.iFlag = Int( GUICtrlRead( $aInput[3] ) )
$tBuffer = DllStructCreate( "byte Buffer[" & $tagRAUTSZ & "]", DllStructGetPtr( $tRaut ) )
$vPack = $tBuffer.Buffer ;Header
$vPack &= StringTrimLeft( StringToBinary( GUICtrlRead( $aInput[2] ) ), 2 ) ;Data
$ClIdx = Int( GUICtrlRead( $aInput[0] ) )
__PackageSend( $aClients[$ClIdx][0], Binary( $vPack ) )
__ConsolePrint( ' >>> Sended: ' & $aClients[$ClIdx][1] & '> [' & $tRaut.uId & ']{' & GUICtrlRead( $aInput[2] ) & '}' & '<' & $tRaut.iFlag & '>' )
$tBuffer = 0
$tRaut = 0
EndSwitch
$hClSock = TCPAccept( $hSocket )
If $hClSock <> -1 Then
$aClients[0][0] += 1
$sZ = $aClients[0][0]
ReDim $aClients[$sZ+1][2]
$aClients[$sZ][0] = $hClSock
$aClients[$sZ][1] = __SocketToIP( $hClSock )
__ConsolePrint( 'New user [' & $aClients[$sZ][1] & '@' & $sZ & '] connected on ' & $__PARAMS[3] & ' port!' )
ContinueLoop
EndIf
For $ClIdx = 1 To $aClients[0][0] Step 1
$tBuffer = __PackageRecv( $aClients[$ClIdx][0] )
If @Error Then
__RemoveUser( $ClIdx, @Error )
If Not @Error Then _
ExitLoop ;User removed
ElseIf IsDllStruct( $tBuffer ) Then
$tRaut = DllStructCreate( $tagRAUT, $tBuffer.Pointer ) ;Get response header
$tData = DllStructCreate( "byte Buffer[" & ( $tBuffer.Size - $tagRAUTSZ ) & "]", $tBuffer.Pointer + $tagRAUTSZ ) ;Get response body
; -
__ConsolePrint( '>New package from [' & $aClients[$ClIdx][1] & ']: ' & $tRaut.uId )
__ConsolePrint( @TAB & 'DATA[' & __VarType( $tRaut.iFlag ) & ']: ' & BinaryToString( $tData.Buffer ) )
__ConsolePrint( @TAB & 'With Error code = ' & $tRaut.Error )
__ConsolePrint( @TAB & 'With Extended code = ' & $tRaut.Extended & @CRLF )
$tBuffer = 0
$tRaut = 0
$tData = 0
EndIf
Next
WEnd
Func __PackageSend( $hSocket, $vPack )
$vPack = _Crypt_EncryptData( $vPack, $hCryptKey, 0 )
If Not @Error Then _
TCPSend( $hSocket, $vPack )
Return ( @Error = 0 )
EndFunc
Func __PackageRecv( $hSocket )
Local $vRecv, $vRecvBuf = ''
; ---
Do
$vRecv = TCPRecv( $hSocket, 131072, 1 )
If @Error Then
If @Error = -1 Then _
SetError( 0 )
ExitLoop
ElseIf $vRecv <> '' Then
$vRecvBuf &= StringTrimLeft( $vRecv, 2 )
; ---
Sleep( 10 )
ContinueLoop
EndIf
Until $vRecv = ''
If $vRecvBuf And Not @Error Then
$vRecvBuf = Binary( "0x" & $vRecvBuf )
$vRecvBuf = _Crypt_DecryptData( $vRecvBuf, $hCryptKey, 0 )
If Not @Error Then
Local $iBufSize = BinaryLen( $vRecvBuf ), _
$tBuffer = DllStructCreate( "byte Buffer[" & $iBufSize & "]; uint Size; uint Pointer" )
$tBuffer.Buffer = $vRecvBuf
$tBuffer.Size = $iBufSize
$tBuffer.Pointer = DllStructGetPtr( $tBuffer )
Return $tBuffer
EndIf
EndIf
Return 0
EndFunc
Func __RemoveUser( $iClSock, $iReason = -1 )
If $iClSock <= $aClients[0][0] Then
If $iReason >= 0 Then _
__ConsolePrint( 'Remove user [' & $aClients[$iClSock][1] & '], reason: ' & $iReason )
TCPCloseSocket( $aClients[$iClSock][0] )
; ---
$aClients[0][0] -= 1
_ArrayDelete( $aClients, $iClSock )
Return True
EndIf
Return SetError( 1, 0, False )
EndFunc
Func __SocketToIP( $hSocket )
Local $tSOCKADDR, $aRet
; ---
$tSOCKADDR = DllStructCreate("short; ushort; uint; char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $hSocket,"ptr", DllStructGetPtr($tSOCKADDR), "int*", DllStructGetSize($tSOCKADDR))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($tSOCKADDR, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
Return $aRet
EndFunc
Func __ConsolePrint( $sMsg )
_GUICtrlEdit_AppendText( $iEdit, $sMsg & @CRLF)
EndFunc
Func __VarType( $iVarType )
Local $sType
; ---
For $Idx = 1 To $__AUTTYPE[0][0] Step 1
If $iVarType == $__AUTTYPE[$Idx][0] Then _
Return $__AUTTYPE[$Idx][1]
Next
Return 17
EndFunc
Файл: server_v.0.5.0.au3
Снимок:
Источник: autoit-script.ru
Автор(ы): Firex