Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Cramel] Gestión de conexiones [Ejemplo + Source]

  • 0 Respuestas
  • 2991 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BlackBlex

  • *
  • Underc0der
  • Mensajes: 49
  • Actividad:
    0%
  • Reputación 4
    • Ver Perfil
  • Skype: blackblex
  • Twitter: blackblex
« en: Julio 05, 2017, 10:42:32 pm »
Les traigo el siguiente ejemplo o ejercicio sobre sockets, en este caso les traigo un gestor de pc (clientes), en el cual podremos abrirle la disquera y cerrarsela.





Nota: el ejemplo es algo básico, y podemos decir que podría ser los principios de un "Troyano" al tener un servidor que se pone en escucha, y un cliente que se intenta conectar a X ip, con X puerto; Igual cabe recalcar que puede ser inestable en el uso de esté.


Código fuente del Servidor.cml

Información

Archivo Servidor.cml
Código: Text
  1. '/**
  2. ' * Servidor del gestor de conexiones
  3. ' *
  4. ' * @author  Jovani Pérez Damián (@BlackBlex)
  5. ' *
  6. ' * ==============Information==============
  7. ' *      Filename: Servidor.cml
  8. ' * ---------------------------------------
  9. '*/
  10.  
  11. Importar "Cramel.cml"
  12. Importar "MSVBVM60\MSVBVM60.cml"
  13. Importar "Propio\Cramel2\Sockets\Socket.cml"
  14. Importar "Propio\Cramel2\Interfaz\Interfaz.cml"
  15.  
  16. Var Server:SocketServer
  17.  
  18. Var clientesSocket[]:Entero
  19. Var clientesName[]:Cadena
  20. ReDim clientesSocket, 1
  21. ReDim clientesName, 1
  22.  
  23. Var ServerIniciado:Booleano
  24. ServerIniciado = Falso
  25.  
  26. Var frame:CMLframe
  27. Var listViewConectados:CMLListview
  28. Var botonAbrirCD, botonCerrarCD:CMLBotón
  29.  
  30. Proc iniciarServer
  31.     Repetir
  32.         Var connections, newConnect:Entero
  33.         Var infoThread:Cadena
  34.         newConnect = Server.aceptar
  35.         infoThread = EntCad(newConnect) + "|" + EntCad(connections)
  36.         clientesSocket[connections] = newConnect
  37.         CreateThread(Nulo, 0, ServerManager@, StrPtr(infoThread), 0, 0)
  38.         connections = connections + 1
  39.         ReDim Preservar clientesSocket, (connections+1)
  40.     PorSiempre
  41. FinProc
  42.  
  43. Proc frameEventoGanarFoco(hWnd:Entero)
  44.     Si ( ServerIniciado = Falso ) Entonces
  45.         ServerIniciado = Verdad
  46.         CreateThread(Nulo, 0, iniciarServer@, Nulo, 0, 0)
  47.     FinSi
  48. FinProc
  49.  
  50. Proc frameEventoTerminar(hWnd:Entero, Referencia Cancelar:Booleano)
  51.     Server.detener
  52. FinProc
  53.  
  54. Crear Server
  55. Crear frame
  56. Crear listViewConectados
  57. Crear botonAbrirCD
  58. Crear botonCerrarCD
  59.  
  60.     Server.iniciar
  61.     Si (Server.escuchar(666) = SOCKET_ERROR) Entonces
  62.         Mensaje("Error al iniciar el socket")
  63.         ExitProcess(0)
  64.     SiNo
  65.         frame.Texto = "Gestor de conexiones - En escucha"
  66.         frame.Ancho = 700
  67.         frame.Alto = 400
  68.         frame.Padre = 0
  69.         frame.Centrar = 1
  70.         frame.eventos.GanarFoco@ = frameEventoGanarFoco@
  71.         frame.eventos.Terminar@  = frameEventoTerminar@
  72.         frame.construir(WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU)
  73.  
  74.         listViewConectados.PosX  = 10
  75.         listViewConectados.PosY  = 10
  76.         listViewConectados.Ancho = frame.Ancho - 30
  77.         listViewConectados.Alto  = frame.Alto - 100
  78.         listViewConectados.Padre = frame.hWnd
  79.         listViewConectados.fuente.Nombre = "Arial"
  80.         listViewConectados.fuente.Tamaño = 11
  81.         listViewConectados.construir()
  82.  
  83.         Var listColumnas[]:INFO_COLUMNA
  84.         ReDim listColumnas, 5
  85.  
  86.         listColumnas[0].Indice   = 0
  87.         listColumnas[0].Ancho    = (listViewConectados.Ancho/5)
  88.         listColumnas[0].Posición = LVCFMT_LEFT
  89.         listColumnas[0].Texto    = "Nombre"
  90.  
  91.         listColumnas[1].Indice   = 1
  92.         listColumnas[1].Ancho    = (listViewConectados.Ancho/5)
  93.         listColumnas[1].Posición = LVCFMT_CENTER
  94.         listColumnas[1].Texto    = "Dirección IP"
  95.  
  96.         listColumnas[2].Indice   = 2
  97.         listColumnas[2].Ancho    = (listViewConectados.Ancho/5)
  98.         listColumnas[2].Posición = LVCFMT_CENTER
  99.         listColumnas[2].Texto    = "Usuario@Host"
  100.  
  101.         listColumnas[3].Indice   = 3
  102.         listColumnas[3].Ancho    = (listViewConectados.Ancho/5)
  103.         listColumnas[3].Posición = LVCFMT_CENTER
  104.         listColumnas[3].Texto    = "SO"
  105.  
  106.         listColumnas[4].Indice   = 4
  107.         listColumnas[4].Ancho    = (listViewConectados.Ancho/5)
  108.         listColumnas[4].Posición = LVCFMT_CENTER
  109.         listColumnas[4].Texto    = "País@Idioma"
  110.  
  111.         listViewConectados.insertarColumnas(listColumnas)
  112.  
  113.         botonAbrirCD.Texto = "Abrir CD"
  114.         botonAbrirCD.PosX  = 10
  115.         botonAbrirCD.PosY  = frame.Alto - 80
  116.         botonAbrirCD.Ancho = (frame.Ancho/2) - 30
  117.         botonAbrirCD.Alto  = 40
  118.         botonAbrirCD.Padre = frame.hWnd
  119.         botonAbrirCD.eventos.Mouse.Clic@ = botonAbrirCDEventClic@
  120.         botonAbrirCD.construir()
  121.  
  122.         botonCerrarCD.Texto = "Cerrar CD"
  123.         botonCerrarCD.PosX  = (frame.Ancho - botonAbrirCD.Ancho) - 20
  124.         botonCerrarCD.PosY  = botonAbrirCD.PosY
  125.         botonCerrarCD.Ancho = (frame.Ancho/2) - 30
  126.         botonCerrarCD.Alto  = 40
  127.         botonCerrarCD.Padre = frame.hWnd
  128.         botonCerrarCD.eventos.Mouse.Clic@ = botonCerrarCDEventClic@
  129.         botonCerrarCD.construir()
  130.  
  131.         frame.mostrar()
  132.         frame.correr()
  133.     FinSi
  134.  
  135. Proc botonAbrirCDEventClic(hWnd:Entero,Botón:Byte,Presionado:Booleano,X,Y:Entero)
  136.     Seleccionar Botón
  137.         Caso BOTON_IZQUIERDO
  138.             Seleccionar Presionado
  139.                 Caso Falso
  140.                     Var seleccionado, iCount, clienteSocket:Entero
  141.                     Var seleccionadoTxt:Cadena
  142.                     seleccionado = listViewConectados.getItemSelected
  143.  
  144.                     Si ( seleccionado <> -1 ) Entonces
  145.                         seleccionadoTxt = listViewConectados.getItemText(seleccionado, 0)
  146.                         Contar iCount a &clientesName
  147.                             Si ( seleccionadoTxt = clientesName[iCount] ) Entonces
  148.                                 clienteSocket = clientesSocket[iCount]
  149.                                 Salir Contar
  150.                             FinSi
  151.                         Seguir
  152.  
  153.                         Si ( clienteSocket <> 0 ) Entonces
  154.                             Server.enviar(clienteSocket, "openCD|0")
  155.                         FinSi
  156.                     FinSi
  157.             FinSeleccionar
  158.     FinSeleccionar
  159. FinProc
  160.  
  161. Proc botonCerrarCDEventClic(hWnd:Entero,Botón:Byte,Presionado:Booleano,X,Y:Entero)
  162.     Seleccionar Botón
  163.         Caso BOTON_IZQUIERDO
  164.             Seleccionar Presionado
  165.                 Caso Falso
  166.                     Var seleccionado, iCount, clienteSocket:Entero
  167.                     Var seleccionadoTxt:Cadena
  168.                     seleccionado = listViewConectados.getItemSelected
  169.  
  170.                     Si ( seleccionado <> -1 ) Entonces
  171.                         seleccionadoTxt = listViewConectados.getItemText(seleccionado, 0)
  172.                         Contar iCount a &clientesName
  173.                             Si ( seleccionadoTxt = clientesName[iCount] ) Entonces
  174.                                 clienteSocket = clientesSocket[iCount]
  175.                                 Salir Contar
  176.                             FinSi
  177.                         Seguir
  178.  
  179.                         Si ( clienteSocket <> 0 ) Entonces
  180.                             Server.enviar(clienteSocket, "closeCD|0")
  181.                         FinSi
  182.                     FinSi
  183.             FinSeleccionar
  184.     FinSeleccionar
  185. FinProc
  186.  
  187. Proc ServerManager(info:Entero)
  188.     Var IDclient, idConnect:Entero
  189.     Var infoCad:Cadena
  190.     Var msg, arrayInfo[]:Cadena
  191.     infoCad = CadDePtr(info)
  192.     arrayInfo = Separar(infoCad, "|")
  193.     IDclient = CadEnt(arrayInfo[0])
  194.     idConnect = CadEnt(arrayInfo[1])
  195.     Repetir
  196.         msg = Server.recibir(IDclient)
  197.         Si ( (CadLong(msg) = 0) Or (msg = "") ) Entonces Salir Repetir
  198.         arrayInfo = Separar(msg, "|")
  199.         Seleccionar arrayInfo[0]
  200.             Caso "registro"
  201.                 registroCliente(idConnect, arrayInfo[1])
  202.             Caso "salir"
  203.                 Server.desconectar(IDclient)
  204.                 'Server.enviar(IDclient, "salir")
  205.                 Salir Repetir
  206.         FinSeleccionar
  207.         Pausar(500)
  208.     PorSiempre
  209.     clientesSocket[idConnect] = 0
  210.     Var i:Entero
  211.     i = 0
  212.     Contar i a listViewConectados.ItemsCount
  213.         Var itemComp:Cadena
  214.         itemComp = "ServerTest" + EntCad(idConnect)
  215.         Si ( listViewConectados.getItemText(i, 0) = itemComp ) Entonces
  216.             listViewConectados.eliminarItem(i)
  217.             Salir Contar
  218.         FinSi
  219.     Seguir
  220.     'ExitThread(0)
  221. FinProc
  222.  
  223. Proc registroCliente(id:Entero, txt:Cadena)
  224.     Var listItems:INFO_ITEM
  225.     Var info[]:Cadena
  226.     ReDim listItems.Texto, 5
  227.     info = Separar(txt, "=.=")
  228.     listItems.Texto[0] = info[0] + EntCad(id)
  229.     listItems.Texto[1] = info[1]
  230.     listItems.Texto[2] = info[2]
  231.     listItems.Texto[3] = info[3]
  232.     listItems.Texto[4] = info[4]
  233.     listItems.Indice   = id
  234.     clientesName[id] = listItems.Texto[0]
  235.     listViewConectados.insertarItem(listItems)
  236.     ReDim Preservar clientesName, (id+2)
  237. FinProc
  238.  
  239. Destruir botonCerrarCD
  240. Destruir botonAbrirCD
  241. Destruir listViewConectados
  242. Destruir frame
  243. Destruir Server


Código fuente del Cliente.cml


Archivo Cliente.cml
Código: Text
  1. '/**
  2. ' * Cliente del gestor de conexiones
  3. ' *
  4. ' * @author  Jovani Pérez Damián (@BlackBlex)
  5. ' *
  6. ' * ==============Information==============
  7. ' *      Filename: Cliente.cml
  8. ' * ---------------------------------------
  9. '*/
  10.  
  11. Importar "Cramel.cml"
  12. Importar "MSVBVM60\MSVBVM60.cml"
  13. Importar "Constantes.cml"
  14. Importar "APIS.cml"
  15. Importar "Socket.cml"
  16. Importar "Interfaz\Interfaz.cml"
  17. Importar "HTTPRequest.cml"
  18. Importar "Regedit.cml"
  19. Importar "Funciones.cml"
  20.  
  21. Var Cliente:SocketClient
  22. Var frame:CMLframe
  23. Var hilo, hiloID:Entero
  24.  
  25. Proc frameEventoCargar(hWnd:Entero)
  26.     Var info[]:Cadena
  27.     info = obtenerIPPais
  28.     Cliente.enviar("registro|ServerTest=.=" + info[0] + "=.=" + Usuario + "@" + UsuarioDominioSO + "=.=" + SO + "=.=" + info[1] + "@" + LenguajeSO)
  29. FinProc
  30.  
  31. Proc frameEventoTerminar(hWnd:Entero, Referencia Cancelar:Booleano)
  32.     Cliente.enviar("salir|0")
  33.     Cliente.detener
  34.     ExitProcess(0)
  35. FinProc
  36.  
  37. Crear Cliente
  38. Crear frame
  39.     Cliente.iniciar
  40.     Si (Cliente.conectar("127.0.0.1", 666) = SOCKET_ERROR) Entonces
  41.         Mensaje("Error al iniciar conectarse al servidor")
  42.         ExitProcess(0)
  43.     SiNo
  44.         hilo = CreateThread(Nulo, 0, ClienteManager@, Nulo, 0, hiloID@)
  45.  
  46.         frame.Texto = "Cliente en espera"
  47.         frame.PosX  = 10
  48.         frame.PosY  = 10
  49.         frame.Ancho = 100
  50.         frame.Alto  = 100
  51.         frame.Padre = 0
  52.         frame.eventos.Cargar@  = frameEventoCargar@
  53.         frame.eventos.Terminar@  = frameEventoTerminar@
  54.         frame.construir(WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU)
  55.  
  56.         frame.mostrar()
  57.         frame.correr()
  58.     FinSi
  59.  
  60. Proc ClienteManager
  61.     Var msg[],tempMsg:Cadena
  62.     Var command,empty:Cadena
  63.     Repetir
  64.         tempMsg = Cliente.recibir
  65.         Si ( (CadLong(tempMsg) = 0) Or (tempMsg = "") ) Entonces Salir Repetir
  66.         msg = Separar(tempMsg, "|")
  67.         Seleccionar msg[0]
  68.             Caso "Hola"
  69.                 Cliente.enviar("c")
  70.             Caso "openCD"
  71.                 command = "set CDAudio door open"
  72.                 mciSendString(StrPtr(command), StrPtr(empty), 127, 0)
  73.             Caso "closeCD"
  74.                 command = "set CDAudio door closed"
  75.                 mciSendString(StrPtr(command), StrPtr(empty), 127, 0)
  76.         FinSeleccionar
  77.         Pausar(500)
  78.     PorSiempre
  79. FinProc
  80.  
  81. Destruir frame
  82. Destruir Cliente

Archivo Funciones.cml
Código: Text
  1. '/**
  2. ' * Funciones
  3. ' *
  4. ' * @author  Jovani Pérez Damián (@BlackBlex)
  5. ' *
  6. ' * ==============Information==============
  7. ' *      Filename: Constantes.cml
  8. ' * ---------------------------------------
  9. '*/
  10.  
  11. Proc SO():Cadena
  12.     Var registro:Regedit
  13.     Crear registro
  14.     registro.hClave = HKEY_LOCAL_MACHINE
  15.     registro.sClave = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
  16.     registro.Clave  = "ProductName"
  17.     Resultado = registro.leerClaveCadena
  18.     Destruir registro    
  19. FinProc
  20.  
  21. Proc Usuario():Cadena
  22.     Var len:Entero
  23.     len = MAX_PATH
  24.     Resultado = Espacio(len)
  25.     GetUserName(StrPtr(Resultado), len@)
  26.     Resultado = TruncarCadena(Resultado)
  27. FinProc
  28.  
  29. Proc LenguajeSO():Cadena
  30.     Var registro:Regedit
  31.     Crear registro
  32.     registro.hClave = HKEY_CURRENT_USER
  33.     registro.sClave = "Control Panel\\International"
  34.     registro.Clave  = "LocaleName"
  35.     Resultado = registro.leerClaveCadena
  36.     Destruir registro    
  37. FinProc
  38.  
  39. Proc UsuarioDominioSO():Cadena
  40.     Var registro:Regedit
  41.     Crear registro
  42.     registro.hClave = HKEY_CURRENT_USER
  43.     registro.sClave = "Volatile Environment"
  44.     registro.Clave  = "USERDOMAIN"
  45.     Resultado = registro.leerClaveCadena
  46.     Destruir registro    
  47. FinProc
  48.  
  49. Proc UsuarioPathSO():Cadena
  50.     Var registro:Regedit
  51.     Crear registro
  52.     registro.hClave = HKEY_CURRENT_USER
  53.     registro.sClave = "Volatile Environment"
  54.     registro.Clave  = "USERPROFILE"
  55.     Resultado = registro.leerClaveCadena
  56.     Destruir registro    
  57. FinProc
  58.  
  59. Proc obtenerIPPais:Cadena[]
  60.     Var request:HTTP
  61.     Crear request
  62.         request.Metodo = "GET"
  63.         request.Puerto = INTERNET_DEFAULT_HTTP_PORT
  64.         request.Servidor = "aruljohn.com"
  65.         request.Dirección = "/details.php"
  66.         Var codigoFuente,partes[]:Cadena
  67.         ReDim Resultado, 2
  68.  
  69.         Si ( request.Conectar ) Entonces
  70.             Si ( request.Enviar ) Entonces
  71.                 Si ( request.StatusCode = HTTP_STATUS_OK ) Entonces
  72.                     codigoFuente = request.LeerRespuesta
  73.  
  74.                     'IP'
  75.                     partes = Separar(codigoFuente, "IP address</td><td>")
  76.                     partes[0] = partes[1]
  77.                     partes = Separar(partes[0], "</td></tr>")
  78.                     Resultado[0] = TruncarCadena(partes[0])
  79.                     'País'
  80.                     partes = Separar(codigoFuente, "Country</td><td valign=\"top\">")
  81.                     partes[0] = partes[1]
  82.                     partes = Separar(partes[0], "<img src=")
  83.                     Resultado[1] = TruncarCadena(partes[0])
  84.                 FinSi
  85.             FinSi
  86.         FinSi
  87.     Destruir request
  88. FinProc


Cualquier sugerencia, o error, comenten.

 

¿Te gustó el post? COMPARTILO!



Source Go Dork Scan Beta v0.3 by ReiGel_ado

Iniciado por reigelado

Respuestas: 2
Vistas: 1540
Último mensaje Enero 11, 2016, 09:15:09 pm
por reigelado
Source Go Dork Scan Beta v0.5 by ReiGel_ado

Iniciado por reigelado

Respuestas: 0
Vistas: 1362
Último mensaje Enero 20, 2016, 10:46:02 pm
por reigelado
Como trabajar Cramel con Sublime Text | Actualizado [Cramel2| 20/Junio/17]

Iniciado por BlackBlex

Respuestas: 1
Vistas: 1401
Último mensaje Febrero 23, 2017, 08:18:21 am
por ANTRAX
[Cramel] Regedit.cml ~ Crea, Edita y Elimina claves del Registro

Iniciado por BlackBlex

Respuestas: 0
Vistas: 2472
Último mensaje Julio 05, 2017, 08:30:39 pm
por BlackBlex
[Cramel] Componentes para Ventanas | 5 de Julio del 2017

Iniciado por BlackBlex

Respuestas: 0
Vistas: 2585
Último mensaje Abril 10, 2017, 04:25:47 pm
por BlackBlex