Terminar un proceso en ASM

Iniciado por ProcessKill, Febrero 24, 2010, 04:00:05 PM

Tema anterior - Siguiente tema

0 Miembros y 3 Visitantes están viendo este tema.

Febrero 24, 2010, 04:00:05 PM Ultima modificación: Junio 03, 2013, 11:41:11 AM por Expermicid
Código: asm

;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 ::)