Underc0de

Programación General => ASM => Mensaje iniciado por: ProcessKill en Febrero 24, 2010, 04:00:05 PM

Título: Terminar un proceso en ASM
Publicado por: ProcessKill en Febrero 24, 2010, 04:00:05 PM
Código (asm) [Seleccionar]

;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'
Título: Re:Terminar un proceso en ASM
Publicado por: casca2011 en Junio 22, 2011, 02:40:50 AM
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
Título: Re:Terminar un proceso en ASM
Publicado por: _DauT_ en Junio 22, 2011, 02:51:04 AM
Quiero que el fiel user haga más aportes con la WinAPI, aunque ya esté documentada ::)