Underc0de

Programación General => ASM => Mensaje iniciado por: Juan en Mayo 29, 2013, 05:35:07 PM

Título: Lista procesos de forma nativa con NtQuerySystemInformation
Publicado por: Juan en Mayo 29, 2013, 05:35:07 PM
Código (asm) [Seleccionar]
; // Lista Procesos de forma nativa con la API  NtQuerySystemInformation
; // Escrito por Juan fary (mDrinky)
; // [email protected]
; // Ensamblador: Flat Assembler

include 'win32ax.inc'
entry start

.data
        Buffer                  dd 0
        len                     dd 0
        nBytes                  dd ?

.code
start:
        add [len],0x1000

        cinvoke realloc,[Buffer],[len]
        mov [Buffer],eax

        invoke NtQuerySystemInformation,5,[Buffer],[len],addr nBytes

        cmp eax,0xC0000004
        je start

        ListarProcesos:

        mov eax,[Buffer]
        mov eax,[eax+0x3C] ; Nombre del proceso
        ;mov eax,[eax+0x44]   ; ID del proceso

        test eax,eax
        je SiguienteProceso

        push eax
        invoke MessageBoxW,0,eax,0,0
        pop eax

        mov eax,[Buffer]   ; puntero a estructura
        mov eax,[eax]      ; Distancia que habria que recorrer hasta la siguiente estructura

        cmp eax,0          ; Si es 0 no hay mas estructuras
        je salir

        SiguienteProceso:

        mov eax,[Buffer]

        mov edx,eax    ; Puntero a estructura en EDX
        mov eax,[eax]  ; EAX =  NextEntryDelta
        add edx,eax    ; Sumamos la distancia de la siguiente estructura

        mov [Buffer],edx ; Siguiente Estructura

        jmp ListarProcesos

        salir:

        ret

section '.idata' data readable import

        library msvcrt,'msvcrt.dll',\
                NTDLL,'NTDLL.DLL',\
                USER32,'USER32.DLL'

        import msvcrt,\
               realloc,'realloc'

        import NTDLL,\
               NtQuerySystemInformation,'NtQuerySystemInformation'

        import USER32,\
               MessageBoxW,'MessageBoxW' 


Me costo crear el código ya que hay poca documentación y mucha de la que hay es erronea, asique tuve que debuguear la API en un proceso externo y ver finalmente como eran las estructuras y en que posición estaba el ID del proceso y el nombre.

un saludo!
Título: Re:Lista procesos de forma nativa con NtQuerySystemInformation
Publicado por: Expermicid en Mayo 29, 2013, 07:12:03 PM
Gran codigo mDrinky :)

Gracias, Saludos.
Título: Re:Lista procesos de forma nativa con NtQuerySystemInformation
Publicado por: Juan en Mayo 30, 2013, 10:28:01 AM
Dejo la estructura Correcta, en C (El código de las estructuras no es mio lo saque de por ahí.)

    typedef struct {
    USHORT Length;
    USHORT MaxLen;
    USHORT *Buffer;
    }UNICODE_STRING;

    struct process_info {
    ULONG NextEntryDelta;
    ULONG ThreadCount;
    ULONG Reserved1[6];
    LARGE_INTEGER CreateTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER KernelTime;
    UNICODE_STRING ProcessName;
    ULONG BasePriority;
    ULONG ProcessId;
    };


un saludo!
Título: Re:Lista procesos de forma nativa con NtQuerySystemInformation
Publicado por: 79137913 en Mayo 30, 2013, 01:05:20 PM
HOLA!!!

Felicitaciones Lo LOGRASTE!

GRACIAS POR LEER!!!
Título: Re:Lista procesos de forma nativa con NtQuerySystemInformation
Publicado por: Karcrack en Mayo 30, 2013, 02:16:00 PM
Aquí está el código en VB6 por si a alguien le interesa ;D
http://foro.elhacker.net/programacion_visual_basic/ntdll_systemprocessesandthreadsinformation-t303891.0.html
Título: Re:Lista procesos de forma nativa con NtQuerySystemInformation
Publicado por: Danyfirex en Mayo 30, 2013, 04:48:25 PM
Gracias  mDrinky muy bonito código a estudiar un ratito  ;D