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

  • 0 Respuestas
  • 4036 Vistas

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

Desconectado BlackBlex

  • *
  • Underc0der
  • Mensajes: 49
  • Actividad:
    0%
  • Reputación 4
  • Skype: blackblex
  • Twitter: blackblex
    • Ver Perfil

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

  • 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
  • Compatible con Cramel: 2.0.0.362
  • Librerías requeridas: You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login

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.         [email protected] = [email protected]
  71.         [email protected]  = [email protected]
  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    = "[email protected]"
  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í[email protected]"
  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.         [email protected] = [email protected]
  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.         [email protected] = [email protected]
  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

Información
  • Compatible con Cramel: 2.0.0.362
  • Librerías requeridas: You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login

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.         [email protected]  = [email protected]
  53.         [email protected]  = [email protected]
  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), [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.

 

Source Go Dork Scan Beta v0.3 by ReiGel_ado

Iniciado por reigelado

Respuestas: 2
Vistas: 2428
Ú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: 2063
Ú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: 2365
Ú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: 3890
Ú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: 3896
Último mensaje Abril 10, 2017, 04:25:47 pm
por BlackBlex