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
  • 3884 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, [email protected], 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, [email protected], 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.construir(WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU)
  71.  
  72.         listViewConectados.PosX  = 10
  73.         listViewConectados.PosY  = 10
  74.         listViewConectados.Ancho = frame.Ancho - 30
  75.         listViewConectados.Alto  = frame.Alto - 100
  76.         listViewConectados.Padre = frame.hWnd
  77.         listViewConectados.fuente.Nombre = "Arial"
  78.         listViewConectados.fuente.Tamaño = 11
  79.         listViewConectados.construir()
  80.  
  81.         Var listColumnas[]:INFO_COLUMNA
  82.         ReDim listColumnas, 5
  83.  
  84.         listColumnas[0].Indice   = 0
  85.         listColumnas[0].Ancho    = (listViewConectados.Ancho/5)
  86.         listColumnas[0].Posición = LVCFMT_LEFT
  87.         listColumnas[0].Texto    = "Nombre"
  88.  
  89.         listColumnas[1].Indice   = 1
  90.         listColumnas[1].Ancho    = (listViewConectados.Ancho/5)
  91.         listColumnas[1].Posición = LVCFMT_CENTER
  92.         listColumnas[1].Texto    = "Dirección IP"
  93.  
  94.         listColumnas[2].Indice   = 2
  95.         listColumnas[2].Ancho    = (listViewConectados.Ancho/5)
  96.         listColumnas[2].Posición = LVCFMT_CENTER
  97.         listColumnas[2].Texto    = "[email protected]"
  98.  
  99.         listColumnas[3].Indice   = 3
  100.         listColumnas[3].Ancho    = (listViewConectados.Ancho/5)
  101.         listColumnas[3].Posición = LVCFMT_CENTER
  102.         listColumnas[3].Texto    = "SO"
  103.  
  104.         listColumnas[4].Indice   = 4
  105.         listColumnas[4].Ancho    = (listViewConectados.Ancho/5)
  106.         listColumnas[4].Posición = LVCFMT_CENTER
  107.         listColumnas[4].Texto    = "Paí[email protected]"
  108.  
  109.         listViewConectados.insertarColumnas(listColumnas)
  110.  
  111.         botonAbrirCD.Texto = "Abrir CD"
  112.         botonAbrirCD.PosX  = 10
  113.         botonAbrirCD.PosY  = frame.Alto - 80
  114.         botonAbrirCD.Ancho = (frame.Ancho/2) - 30
  115.         botonAbrirCD.Alto  = 40
  116.         botonAbrirCD.Padre = frame.hWnd
  117.         botonAbrirCD.construir()
  118.  
  119.         botonCerrarCD.Texto = "Cerrar CD"
  120.         botonCerrarCD.PosX  = (frame.Ancho - botonAbrirCD.Ancho) - 20
  121.         botonCerrarCD.PosY  = botonAbrirCD.PosY
  122.         botonCerrarCD.Ancho = (frame.Ancho/2) - 30
  123.         botonCerrarCD.Alto  = 40
  124.         botonCerrarCD.Padre = frame.hWnd
  125.         botonCerrarCD.construir()
  126.  
  127.         frame.mostrar()
  128.         frame.correr()
  129.     FinSi
  130.  
  131. Proc botonAbrirCDEventClic(hWnd:Entero,Botón:Byte,Presionado:Booleano,X,Y:Entero)
  132.     Seleccionar Botón
  133.         Caso BOTON_IZQUIERDO
  134.             Seleccionar Presionado
  135.                 Caso Falso
  136.                     Var seleccionado, iCount, clienteSocket:Entero
  137.                     Var seleccionadoTxt:Cadena
  138.                     seleccionado = listViewConectados.getItemSelected
  139.  
  140.                     Si ( seleccionado <> -1 ) Entonces
  141.                         seleccionadoTxt = listViewConectados.getItemText(seleccionado, 0)
  142.                         Contar iCount a &clientesName
  143.                             Si ( seleccionadoTxt = clientesName[iCount] ) Entonces
  144.                                 clienteSocket = clientesSocket[iCount]
  145.                                 Salir Contar
  146.                             FinSi
  147.                         Seguir
  148.  
  149.                         Si ( clienteSocket <> 0 ) Entonces
  150.                             Server.enviar(clienteSocket, "openCD|0")
  151.                         FinSi
  152.                     FinSi
  153.             FinSeleccionar
  154.     FinSeleccionar
  155. FinProc
  156.  
  157. Proc botonCerrarCDEventClic(hWnd:Entero,Botón:Byte,Presionado:Booleano,X,Y:Entero)
  158.     Seleccionar Botón
  159.         Caso BOTON_IZQUIERDO
  160.             Seleccionar Presionado
  161.                 Caso Falso
  162.                     Var seleccionado, iCount, clienteSocket:Entero
  163.                     Var seleccionadoTxt:Cadena
  164.                     seleccionado = listViewConectados.getItemSelected
  165.  
  166.                     Si ( seleccionado <> -1 ) Entonces
  167.                         seleccionadoTxt = listViewConectados.getItemText(seleccionado, 0)
  168.                         Contar iCount a &clientesName
  169.                             Si ( seleccionadoTxt = clientesName[iCount] ) Entonces
  170.                                 clienteSocket = clientesSocket[iCount]
  171.                                 Salir Contar
  172.                             FinSi
  173.                         Seguir
  174.  
  175.                         Si ( clienteSocket <> 0 ) Entonces
  176.                             Server.enviar(clienteSocket, "closeCD|0")
  177.                         FinSi
  178.                     FinSi
  179.             FinSeleccionar
  180.     FinSeleccionar
  181. FinProc
  182.  
  183. Proc ServerManager(info:Entero)
  184.     Var IDclient, idConnect:Entero
  185.     Var infoCad:Cadena
  186.     Var msg, arrayInfo[]:Cadena
  187.     infoCad = CadDePtr(info)
  188.     arrayInfo = Separar(infoCad, "|")
  189.     IDclient = CadEnt(arrayInfo[0])
  190.     idConnect = CadEnt(arrayInfo[1])
  191.     Repetir
  192.         msg = Server.recibir(IDclient)
  193.         Si ( (CadLong(msg) = 0) Or (msg = "") ) Entonces Salir Repetir
  194.         arrayInfo = Separar(msg, "|")
  195.         Seleccionar arrayInfo[0]
  196.             Caso "registro"
  197.                 registroCliente(idConnect, arrayInfo[1])
  198.             Caso "salir"
  199.                 Server.desconectar(IDclient)
  200.                 'Server.enviar(IDclient, "salir")
  201.                 Salir Repetir
  202.         FinSeleccionar
  203.         Pausar(500)
  204.     PorSiempre
  205.     clientesSocket[idConnect] = 0
  206.     Var i:Entero
  207.     i = 0
  208.     Contar i a listViewConectados.ItemsCount
  209.         Var itemComp:Cadena
  210.         itemComp = "ServerTest" + EntCad(idConnect)
  211.         Si ( listViewConectados.getItemText(i, 0) = itemComp ) Entonces
  212.             listViewConectados.eliminarItem(i)
  213.             Salir Contar
  214.         FinSi
  215.     Seguir
  216.     'ExitThread(0)
  217. FinProc
  218.  
  219. Proc registroCliente(id:Entero, txt:Cadena)
  220.     Var listItems:INFO_ITEM
  221.     Var info[]:Cadena
  222.     ReDim listItems.Texto, 5
  223.     info = Separar(txt, "=.=")
  224.     listItems.Texto[0] = info[0] + EntCad(id)
  225.     listItems.Texto[1] = info[1]
  226.     listItems.Texto[2] = info[2]
  227.     listItems.Texto[3] = info[3]
  228.     listItems.Texto[4] = info[4]
  229.     listItems.Indice   = id
  230.     clientesName[id] = listItems.Texto[0]
  231.     listViewConectados.insertarItem(listItems)
  232.     ReDim Preservar clientesName, (id+2)
  233. FinProc
  234.  
  235. Destruir botonCerrarCD
  236. Destruir botonAbrirCD
  237. Destruir listViewConectados
  238. Destruir frame
  239. 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, [email protected], Nulo, 0, [email protected])
  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.construir(WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU)
  53.  
  54.         frame.mostrar()
  55.         frame.correr()
  56.     FinSi
  57.  
  58. Proc ClienteManager
  59.     Var msg[],tempMsg:Cadena
  60.     Var command,empty:Cadena
  61.     Repetir
  62.         tempMsg = Cliente.recibir
  63.         Si ( (CadLong(tempMsg) = 0) Or (tempMsg = "") ) Entonces Salir Repetir
  64.         msg = Separar(tempMsg, "|")
  65.         Seleccionar msg[0]
  66.             Caso "Hola"
  67.                 Cliente.enviar("c")
  68.             Caso "openCD"
  69.                 command = "set CDAudio door open"
  70.                 mciSendString(StrPtr(command), StrPtr(empty), 127, 0)
  71.             Caso "closeCD"
  72.                 command = "set CDAudio door closed"
  73.                 mciSendString(StrPtr(command), StrPtr(empty), 127, 0)
  74.         FinSeleccionar
  75.         Pausar(500)
  76.     PorSiempre
  77. FinProc
  78.  
  79. Destruir frame
  80. 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), [email protected])
  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: 2292
Ú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: 1962
Ú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: 2173
Ú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: 3544
Ú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: 3620
Último mensaje Abril 10, 2017, 04:25:47 pm
por BlackBlex