;by regx
format pe console
entry main
include 'c:\fasm\include\win32ax.inc'
.data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
struct PROCESSENTRY32
dwSize dd ?
cntUsage dd ?
th32ProcessID dd ?
th32DefaultHeapID dd ?
th32ModuleID dd ?
cntThreads dd ?
th32ParentProcessID dd ?
pcPriClassBase dd ?
dwFlags dd ?
szExeFile rb MAX_PATH
ends
pInfo PROCESSENTRY32
hProcess dd ?
hProcesses dd ?
TH32CS_SNAPPROCESS equ 0x00000002
NORM_IGNORECASE equ 0x00000001
LOCALE_USER_DEFAULT equ 0x0400
CSTR_EQUAL equ 0x2
PROCESS_TERMINATE equ 0x0001
lpExe db 256 dup(0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
main:
invoke printf,"Escriba el proceso a terminar: "
invoke scanf,"%s",lpExe
push 0
push TH32CS_SNAPPROCESS
call [CreateToolhelp32Snapshot]
cmp eax,INVALID_HANDLE_VALUE
jne NoE1
push 1
call ErrorReport
jmp main@Salir
NoE1:
mov [hProcesses],eax
mov eax,sizeof.PROCESSENTRY32
mov [pInfo.dwSize], eax
push pInfo
push [hProcesses]
call [Process32First]
cmp eax,FALSE
jne NoE2
push 2
call ErrorReport
jmp main@Salir
NoE2:
bucle1:
push 0xFFFFFFFF
push lpExe
push 0xFFFFFFFF
push pInfo.szExeFile
push NORM_IGNORECASE
push LOCALE_USER_DEFAULT
call [CompareString]
cmp eax,CSTR_EQUAL
jne Next
push [pInfo.th32ProcessID]
push FALSE
push PROCESS_TERMINATE
call [OpenProcess]
cmp eax,0
je Next
mov [hProcess],eax
push 0
push [hProcess]
call [TerminateProcess]
push [hProcess]
call [CloseHandle]
Next:
push pInfo
push [hProcesses]
call [Process32Next]
cmp eax,FALSE
je FinBucle1
jmp bucle1
FinBucle1:
push [hProcesses]
call [CloseHandle]
main@Salir:
leave
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,
proc ErrorReport,raz
call [GetLastError]
cmp [raz],1
je @0
cmp [raz],2
je @1
cmp [raz],3
je @2
jmp @def
@0:
invoke printf,"Error Handle Invalido code %d ",eax
jmp Error@Salir
@1:
invoke printf,"Error cannot open the process ",eax
jmp Error@Salir
@2:
jmp Error@Salir
@def:
invoke printf,"Error desconocido code %d ",eax
Error@Salir:
call [GetLastError]
invoke printf,"%d",eax
leave
ret
endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section '.idata' import data readable
library k32,'kernel32.dll',msv,'msvcrt.dll'
import k32,CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
GetLastError,'GetLastError',Process32First,'Process32First',\
CompareString,'CompareStringA', OpenProcess,'OpenProcess',\
TerminateProcess,'TerminateProcess', \
CloseHandle,'CloseHandle',Process32Next,'Process32Next'
import msv,printf,'printf',scanf,'scanf'
yeah buen aporte fiel user
tambien recuerda que puedes usar EnumProcesses, ZwQueryInformation para obtener el pid del proceso a cerrar, al igual que se pueden usar metodos alternativos para terminar un proceso.
yeah fuck.
voten en el top users
Quiero que el fiel user haga más aportes con la WinAPI, aunque ya esté documentada ::)