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

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22
71  Programación / Programación Visual Basic / Re: Averiguar proceso de un archivo. en: 27 Octubre 2007, 00:50 am
Editado: Este es mi Código::
Código
  1. Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
  2. Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
  3. Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
  4. Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
  5. Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal Handle As Long) As Long
  6. Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
  7.  
  8. Private Sub Command1_Click()
  9. Dim Procesos() As Long, cb&, cb2&, cbNeeded&, Ret&, Proceso&, Modulos(1 To 200) As Long, Elementos&, NombrePath$
  10.  
  11. cb = 16
  12. cbNeeded = 96
  13. Do While cb <= cbNeeded
  14.    cb = cb * 2
  15.    ReDim Procesos(cb / 4)
  16.    EnumProcesses Procesos(1), cb, cbNeeded
  17. Loop
  18. Elementos = cbNeeded / 4
  19. For i = 1 To Elementos
  20. Proceso = OpenProcess(1024 Or 16, 0, Procesos(i))
  21. If Proceso <> 0 Then
  22.    Ret = EnumProcessModules(Proceso, Modulos(1), 200, cb2)
  23.    If Ret <> 0 Then
  24.        NombrePath = Space(260)
  25.        GetModuleFileNameExA Proceso, Modulos(1), NombrePath, 500
  26.        If Procesos(i) <> GetCurrentProcessId Then
  27.            NombrePath = Replace(Replace(NombrePath, "\systemroot\", "c:\windows\", , , vbTextCompare), "\??\", "")
  28.            Text1.Text = Text1.Text & vbCrLf & NombrePath
  29.            Text1.Text = Text1.Text & " - " & Procesos(i)
  30.        End If
  31.    End If
  32. End If
  33. CloseHandle Proceso
  34. Next
  35. End Sub
  36.  

Saludos!

Editado: Para que el código te quede bien funcional, minimamente tenes que usar las apis, EnumProcess, OpenProcess, EnumProcessModules y GetModuleFileNameExA, porque si quitas por ejemplo EnumProcessModules, en el text1.text algunas lineas quedarían vacias y el resultado sería pésimo.
72  Programación / Programación Visual Basic / Re: Estado de un programa externo en: 26 Octubre 2007, 22:09 pm
Podes usar un code que publique en éste post: http://foro.elhacker.net/index.php/topic,185532.0.html
Fijate en esta parte del código:
Código
  1.    If LCase$(Limpiar(uProcess.szExeFile)) = LCase$(Text1.Text) Then
  2.  
Podes, cambiar ese "LCase$(Text1.text)", por el nombre del proceso que queres averiguar si se está ejecutando:
Código
  1.    If LCase$(Limpiar(uProcess.szExeFile)) = "notepad.exe" Then
  2.  
En el ejemplo, te puse para averiguar si el bloc de notas se está ejecutando, para el messenger sería: msnmsgr.exe y para el internet explorer: iexplore.exe.

Saludos ;)
73  Programación / Programación Visual Basic / Re: Foco de una ventana en: 26 Octubre 2007, 22:05 pm
Código
  1. Ventana.SetFocus
  2.  
Si la ventana es de la misma aplicación, si es una aplicación externa puedes usar esta api:
Código
  1. Private Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
  2.  

Saludos ;)
74  Programación / Programación Visual Basic / Re: Averiguar proceso de un archivo. en: 26 Octubre 2007, 22:03 pm
Una breve acotacion: el parent no es 100% confiable ya que los PIDs se reciclan.
Por eso dije que se podian tomar dos vías, la primera comparar el nombre del proceso, aunque esta también es insegura, y la del parent id. Pensandolo mejor, se podría programar algo para que según el proceso me devuelva la ruta de donde se está ejecutando el programa, así, se podría comparar un proceso con diferente id.

Saludos ;)
75  Programación / Programación Visual Basic / Re: Averiguar proceso de un archivo. en: 26 Octubre 2007, 01:57 am
Para comparar si la aplicación está abierta más de una vez, tenes dos vias, la primera es comparar nombres de los procesos, y la segunda añadir al código algo como:
Código
  1.    w = Limpiar(uProcess.szExeFile)
  2.    Text1.Text = Text1.Text & vbCrLf & w & " - " & uProcess.th32ParentProcessID
  3.  
En el bucle donde se inicia la búsqueda de los procesos.
El th32ParentProcessID, sirve para indicar cual es el proceso padre de una aplicación, este te podría servir para observar si la aplicación esta abierta más de una vez.

Saludos ;)
76  Programación / Programación Visual Basic / Re: Estado de un programa externo en: 26 Octubre 2007, 01:48 am
Jeje, Tranquila!, El código que publique también se puede reemplazar por este:
Código
  1. Private Sub Command1_Click()
  2. Datos = ""
  3. MsgBox AbrirOffice("c:\hola.doc")
  4. End Sub
  5.  
  6. Private Function AbrirOffice(archivo$) As String
  7. On Error GoTo Error
  8. Dim Canal%, Canal2%, Datos$
  9. If Dir$(archivo) <> "" Then
  10.  
  11. Canal2 = FreeFile
  12. Open archivo For Binary Access Read As Canal2
  13. Datos = Space(LOF(Canal2))
  14. Get #Canal2, , Datos
  15. Close #Canal2
  16.  
  17. Canal = FreeFile
  18. Open archivo For Output As Canal
  19. Close Canal
  20. If FileLen(archivo) = 0 Then
  21.    Canal = FreeFile
  22.    Open archivo For Binary Access Write As Canal
  23.    Put #Canal, LOF(Canal) + 1, Datos
  24.    Close #Canal
  25. End If
  26. AbrirOffice = "El archivo " & archivo & " existe, pero no esta abierto."
  27. Else
  28. AbrirOffice = "El archivo " & archivo & " no existe."
  29. End If
  30.  
  31. Error:
  32. If Err.Description <> "" Then
  33.    AbrirOffice = "El archivo " & archivo & " se encuentra abierto."
  34. End If
  35. End Function
  36.  
Lo que pasa con la rutina HacerBackup es que en la parte del código esta esto:
Código
  1. Open archivo For Output As Canal
  2. Close Canal
  3.  
En ésta parte, se abre el archivo que indicamos en modo de escritura, y luego se cierra, como no se ha insertado ningún dato, entonces en el archivo de alguna forma se borra todo el contenido, y su peso queda de 0 bytes.

luego se compara con el filelen, si esto ha pasado, si es así, vuelve a abrir el archivo en modo de escritura binaria, y escribe el contenido que primero obtuvó.

éste sería el pseudocódigo:
Controlar errores y Redirigirlos a "Error"
Si Archivo Existe
    Abrir Canal2
    Obtiene datos de Archivo
    Cierra Canal
   
    Abrir Archivo en modo Escritura
    Pueden ocurrir dos Cosas:
        Archivo cerrado: Se escribe 0 bytes en Archivo
    O
        No se puede escribir, manda error
    Cierra Canal
   
    Si Archivo pesa 0 bytes
        Abrir Canal
        Escribir en Archivo datos
        Cierra Canal
    Error
Si no Existe
    Error

Control de Error


Bueno, Saludos ;)
77  Programación / Programación Visual Basic / Re: Estado de un programa externo en: 25 Octubre 2007, 03:28 am
Es fácil, mira este post: http://foro.elhacker.net/index.php/topic,185532.0.html, es nuevo, al final publiqué el código para buscar un ejecutable que actualmente esta activo. Si buscas un archivo de word, en el text1.text tenes que poner winword.exe, y asi el codigo te dira si se esta ejecutando esa aplicacion.
por otra parte, si queres aplicar la idea de abrir documentos de office podes hacer esto:
Código
  1. Dim Datos$
  2.  
  3. Private Sub Command1_Click()
  4. Datos = ""
  5. MsgBox AbrirOffice("c:\hola.doc")
  6. End Sub
  7.  
  8. Private Function AbrirOffice(archivo$) As String
  9. On Error GoTo Error
  10. Dim Canal%
  11. If Dir$(archivo) <> "" Then
  12. HacerBackup archivo
  13. Canal = FreeFile
  14. Open archivo For Output As Canal
  15. Close Canal
  16. If FileLen(archivo) = 0 Then
  17.    Canal = FreeFile
  18.    Open archivo For Binary Access Write As Canal
  19.    Put #Canal, LOF(Canal) + 1, Datos
  20.    Close #Canal
  21. End If
  22. AbrirOffice = "El archivo " & archivo & " existe, pero no esta abierto."
  23. Else
  24. AbrirOffice = "El archivo " & archivo & " no existe."
  25. End If
  26.  
  27. Error:
  28. If Err.Description <> "" Then
  29. MsgBox Err.Description
  30.    AbrirOffice = "El archivo " & archivo & " se encuentra abierto."
  31. End If
  32. End Function
  33.  
  34. Private Sub HacerBackup(archivo$)
  35. Dim Canal2%
  36. Canal2 = FreeFile
  37. Open archivo For Binary Access Read As Canal2
  38. Datos = Space(LOF(Canal2))
  39. Get #Canal2, , Datos
  40. Close #Canal2
  41. End Sub
  42.  

saludos ;)

Editado: Si anda muy enredado el codigo decime te lo explico...
78  Programación / Programación Visual Basic / Re: Averiguar proceso de un archivo. en: 25 Octubre 2007, 01:24 am
Bueno, lo que dije fue que no tenia la respuesta jajaj, pero idee una alternativa, y ya la habia posteado, primero se listan los procesos, los nombres o rutas de los procesos, y luego se compara con alguna string a ver si el proceso esta activo.
checa este codigo, hasta el momento solo llevo la parte del nombre del ejecutable, si queres hago el de la ruta completa
Código
  1. Option Explicit
  2. Private Const LETRAS As String = "abcdefghijklmnoñpqrstuvwxyz[].1234567890"
  3. Private Type PROCESSENTRY32
  4. dwSize As Long
  5. cntUsage As Long
  6. th32ProcessID As Long
  7. th32DefaultHeapID As Long
  8. th32ModuleID As Long
  9. cntThreads As Long
  10. th32ParentProcessID As Long
  11. pcPriClassBase As Long
  12. dwFlags As Long
  13. szExeFile As String * 260
  14. End Type
  15. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
  16. Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  17. Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  18. Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
  19.  
  20. Private Sub Command1_Click()
  21. Dim hSnapShot#, ProcesoC#, ResP#, ProcesoC2#, R#, uProcess As PROCESSENTRY32
  22. hSnapShot = CreateToolhelp32Snapshot(&H2, 0&)
  23. uProcess.dwSize = Len(uProcess)
  24. R = Process32First(hSnapShot, uProcess)
  25. Do While R
  26.    If LCase$(Limpiar(uProcess.szExeFile)) = LCase$(Text1.Text) Then
  27.        MsgBox "Programa ejecutandose"
  28.        Exit Sub
  29.    End If
  30. R = Process32Next(hSnapShot, uProcess)
  31. Loop
  32. CloseHandle hSnapShot
  33. End Sub
  34.  
  35. Private Function Limpiar(proceso$)
  36. Dim i%
  37. For i = 1 To Len(proceso)
  38.    If InStr(1, LETRAS, Mid(proceso, i, 1), vbTextCompare) = 0 Then
  39.        proceso = Replace(proceso, Mid(proceso, i, 1), "")
  40.    End If
  41. Next i
  42. Limpiar = proceso
  43. End Function
  44.  
en text1.text metes el proceso que queres buscar, por ejemplo "notepad.exe"

saludos y espero que te sirva ;)
79  Programación / Programación Visual Basic / Re: Averiguar proceso de un archivo. en: 25 Octubre 2007, 00:37 am
Se puede hacer que se listen todos los procesos, se haya la ruta de cada proceso y se compare con la ruta que necesitas, con archivo te referis a ejecutables no?
bueno, yo tengo la medio idea de como hacer el code, si queres lo posteo, pero no es lo que pedis. (El code que pienso es listar los procesos y devolver ruta).

Saludos ;)
80  Programación / Programación Visual Basic / Re: Estado de un programa externo en: 25 Octubre 2007, 00:05 am
Por lo que se, con el ejemplo que diste de la ruta completa y la extension, creo que no se puede hacer, porq lo que hace el office es por medio de los ejecutables abrir dichos archivos. Si vos abris c:\diapositiva.pps, entonces lo que se hace en cierta parte es: c:\programas\powerpoint.exe "c:\diapositiva.pps", si este es el caso, se podrian enumerar los procesos, de cada uno de ellos sacar, la ruta en la cual se esta ejecutando, y comprobar si es o no el ejecutable que se busca. Se le hace un openprocess, y si el proceso existe, entonces se deduce que el programa esta abierto.
Para los archivos de office especificamente se podria tratar de abrir el archivo y escribir sobre el alguna cadena, si devuelve un error es porque esta abierto y si escribe normalmente es porque el archivo esta cerrado...

Saludos, si necesitas algun code de esto por aca me ando pasando ;)
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines