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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Matar procesos en WinXP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Matar procesos en WinXP  (Leído 4,024 veces)
HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Matar procesos en WinXP
« Respuesta #10 en: 21 Octubre 2007, 19:44 pm »

No hace falta buscar el directorio del sistema, al encontrarse taskkill en la carpeta system32 este se puede ejecutar sin saber la ruta de system32...
Man,fijate bien en el codigo que no uso la ruta del system32 parae ejecutar el programa:
Código
  1. Shell "taskkill.exe /IM " & ProcesoTxt.Text
  2.  

Utilizo esa api para que me retorne la ruta del directorio de systema y luego comprobar si el archivo taskkill.exe existe o no, si existe ejecuta el pedazo de codigo que puse arriba.
Lo de se puede ejecutar el programa sin saber la ruta es algo obvio...

saludos ;)


En línea

nhaalclkiemr


Desconectado Desconectado

Mensajes: 1.678


Máximo exponente 9DB9F1AEED2FADBDE 997BBE20FEDA92


Ver Perfil WWW
Re: Matar procesos en WinXP
« Respuesta #11 en: 21 Octubre 2007, 19:48 pm »

Hay si perdon no me fijara... :-X

Aún así te faltaría el Else del If

Saludos ;)


« Última modificación: 21 Octubre 2007, 19:50 pm por nhaalclkiemr » En línea

StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%
HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Matar procesos en WinXP
« Respuesta #12 en: 21 Octubre 2007, 20:01 pm »

No necesariamente tendria porq tener el else despues del if, solo es un checkeo de si el archivo existe o no, si no existe simplemente no se ejecuta nada mas...
o se podria hacer que si el archivo no existe, ejecutara el codigo que publique...
Código
  1. Option Explicit
  2. Private Const TH32CS_SNAPHEAPLIST = &H1
  3. Private Const TH32CS_SNAPPROCESS = &H2
  4. Private Const TH32CS_SNAPTHREAD = &H4
  5. Private Const TH32CS_SNAPMODULE = &H8
  6. Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
  7. Private Const TH32CS_INHERIT = &H80000000
  8. Private Const MAX_PATH As Integer = 260
  9. Private Const PROCESS_TERMINATE = &H1
  10.  
  11. Private Type PROCESSENTRY32
  12.    dwSize As Long
  13.    cntUsage As Long
  14.    th32ProcessID As Long
  15.    th32DefaultHeapID As Long
  16.    th32ModuleID As Long
  17.    cntThreads As Long
  18.    th32ParentProcessID As Long
  19.    pcPriClassBase As Long
  20.    dwFlags As Long
  21.    szExeFile As String * MAX_PATH
  22. End Type
  23. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
  24. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
  25. Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  26. Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  27. Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
  28. Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  29. Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
  30.  
  31. Public Sub MatarProceso(proceso$)
  32.    Dim hSnapShot#, ProcesoC#, ResP#, ProcesoC2#, R#, uProcess As PROCESSENTRY32
  33.    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
  34.    uProcess.dwSize = Len(uProcess)
  35.    R = Process32First(hSnapShot, uProcess)
  36.  
  37.    Do While R
  38.        If Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0)) = proceso Then
  39.            ProcesoC = uProcess.th32ProcessID
  40.            ProcesoC2 = OpenProcess(PROCESS_TERMINATE, True, ProcesoC)
  41.            ResP = TerminateProcess(ProcesoC2, 99)
  42.            CloseHandle ProcesoC2
  43.            Exit Do
  44.        Else
  45.            R = Process32Next(hSnapShot, uProcess)
  46.        End If
  47.    Loop
  48.    CloseHandle hSnapShot
  49. End Sub
  50.  
  51. Private Sub Command1_Click()
  52. Dim RutaSys$, Buffer%
  53. RutaSys = String(255, Chr$(0))
  54. Buffer = GetSystemDirectory(RutaSys, 255)
  55. RutaSys = Left$(RutaSys, Buffer)
  56. If Dir$(RutaSys & "\taskkill.exe") <> "" Then
  57.    Shell "taskkill.exe /IM notepad.exe"
  58. else
  59.    MatarProceso "notepad.exe"
  60. End If
  61. End Sub
En línea

Ch3ck


Desconectado Desconectado

Mensajes: 337


Elite


Ver Perfil
Re: Matar procesos en WinXP
« Respuesta #13 en: 21 Octubre 2007, 23:12 pm »

Ok, gracias, vere si lo puedo acortar un poco más.

Pero GRACIAS por tu aporte.  ::)
En línea

smooth.core

Desconectado Desconectado

Mensajes: 5

Yo no necesito tu IP... :O


Ver Perfil
Re: Matar procesos en WinXP
« Respuesta #14 en: 23 Octubre 2007, 03:32 am »

:) Hola gente, mi primer post en el foro :P y mi primer aporte:

Compliqué un poco más las cosas xD:

Código:
Option Explicit
Private Const TH32CS_SNAPHEAPLIST = &H1
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPTHREAD = &H4
Private Const TH32CS_SNAPMODULE = &H8
Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Private Const TH32CS_INHERIT = &H80000000
Private Const MAX_PATH As Integer = 260
Private Const PROCESS_TERMINATE = &H1
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long


Private Function GetDirectory(x)
Dim sr&, win$, sys As String
Select Case x
Case 1:
       GetDirectory = Left$(App.Path, InStr(App.Path, "\"))
Case 2:
       win = Space$(255)
       sr = GetWindowsDirectory(win, Len(win))
       win = Left$(win, sr)
       Trim (win)
       GetDirectory = win
Case 3:
       sys = Space$(255): sr = 0
       sr = GetSystemDirectory(sys, Len(sys))
       sys = Left$(sys, sr)
       Trim (sys)
       GetDirectory = sys
End Select
End Function

Function MatarProceso(proceso$)
If Dir$(GetDirectory(3) & "\taskkill.exe") <> "" Then
    Shell "taskkill.exe /IM" & Chr(32) & proceso$, vbHide
        Else
    Dim hSnapShot#, ProcesoC#, ResP#, ProcesoC2#, R#, uProcess As PROCESSENTRY32
    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
    uProcess.dwSize = Len(uProcess)
    R = Process32First(hSnapShot, uProcess)
 
    Do While R
        If Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0)) = proceso Then
            ProcesoC = uProcess.th32ProcessID
            ProcesoC2 = OpenProcess(PROCESS_TERMINATE, True, ProcesoC)
            ResP = TerminateProcess(ProcesoC2, 99)
            CloseHandle ProcesoC2
            Exit Do
        Else
            R = Process32Next(hSnapShot, uProcess)
        End If
    Loop
    CloseHandle hSnapShot
    End If
End Function
 
Private Sub Command1_Click()
MatarProceso ("notepad.exe")
End Sub


Pero, hay dos cosas nuevas en el code que pueden ser muy útiles:

1) Si existe taskkill.exe y todo eso, lo incluímos en la misma function.
2) Al ejecutar cmd.exe, lo hacemos invisiblemente, para que no se sospeche de la ejecución de la consola de comandos y el final de un proceso sin razón aparente...
3) Un code un poco más complejo para obtener más de una carpeta  :P (Este lo pueden descartar si quieren xD)
 ;) Saludos
En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Matar procesos en WinXP
« Respuesta #15 en: 23 Octubre 2007, 03:56 am »

Jeje, muy bueno tu aporte, pero trata siempre de economizar codigo, podemos quitarle a la funcion de getdirectory todos los cases, ya que solo utilizas una vez la funcion:
Código
  1. If Dir$(GetDirectory(3) & "\taskkill.exe") <> "" Then
  2.  
y meter todo lo de buscar el proceso en un sub como le hize yo ya que ayuda a entender mas facilmente el codigo.

en total tu code bien organizado quedaria asi:
Código
  1. Option Explicit
  2. Private Const TH32CS_SNAPALL = (&H1 Or &H2 Or &H4 Or &H8)
  3. Private Const MAX_PATH As Integer = 260
  4. Private Const PROCESS_TERMINATE = &H1
  5. Private Type PROCESSENTRY32
  6. dwSize As Long
  7. cntUsage As Long
  8. th32ProcessID As Long
  9. th32DefaultHeapID As Long
  10. th32ModuleID As Long
  11. cntThreads As Long
  12. th32ParentProcessID As Long
  13. pcPriClassBase As Long
  14. dwFlags As Long
  15. szExeFile As String * MAX_PATH
  16. End Type
  17. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
  18. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
  19. Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  20. Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  21. Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
  22. Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
  23. Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
  24. Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
  25.  
  26. Private Function GetDirectory() As String
  27. Dim sr&, sys$
  28. sys = Space$(255): sr = 0
  29. sr = GetSystemDirectory(sys, Len(sys))
  30. sys = Left$(sys, sr)
  31. Trim (sys)
  32. GetDirectory = sys
  33. End Function
  34.  
  35. Private Sub MatarProceso2(proceso$)
  36. Dim hSnapShot#, ProcesoC#, ResP#, ProcesoC2#, R#, uProcess As PROCESSENTRY32
  37. hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
  38. uProcess.dwSize = Len(uProcess)
  39. R = Process32First(hSnapShot, uProcess)
  40.  
  41. Do While R
  42.    If Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0)) = proceso Then
  43.        ProcesoC = uProcess.th32ProcessID
  44.        ProcesoC2 = OpenProcess(PROCESS_TERMINATE, True, ProcesoC)
  45.        ResP = TerminateProcess(ProcesoC2, 99)
  46.        CloseHandle ProcesoC2
  47.        Exit Do
  48.    Else
  49.        R = Process32Next(hSnapShot, uProcess)
  50.    End If
  51. Loop
  52. CloseHandle hSnapShot
  53. End Sub
  54.  
  55. Sub MatarProceso(proceso$)
  56. If Dir$(GetDirectory & "\taskkill.exe") <> "" Then
  57.    Shell "taskkill.exe /IM " & proceso$, vbHide
  58. Else
  59.    MatarProceso2 proceso$
  60. End If
  61. End Sub
  62.  
  63. Private Sub Command1_Click()
  64. MatarProceso "notepad.exe"
  65. End Sub
  66.  
te tengo una observacion, al realizar funciones, siempre trata de que la funcion devuelva un tipo de dato definido.
vos pusiste:
Código
  1. Private Function GetDirectory(x)
  2. ...
  3. End Function
  4.  

quedaria algo como:
Código
  1. Private Function GetDirectory(x) as String
  2. ...
  3. End Function
  4.  

gracias por el post ;)

saludos!
En línea

smooth.core

Desconectado Desconectado

Mensajes: 5

Yo no necesito tu IP... :O


Ver Perfil
Re: Matar procesos en WinXP
« Respuesta #16 en: 23 Octubre 2007, 18:27 pm »

 ;) gracias Hades... :) una corrección nunca está mal  ;) , según lo que he escuchado, hay distintas formas de matar a un proceso, y no solo esta. Hace poco vi un programita que permitía matar procesos como de 11 Formas, incluyendo overflows, inyecciones y demás

 :rolleyes: Estaba pensando en que la inyección de una DLL es posible

 :xD aunque algo compleja....


 ;D Saludos!
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines