Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: ~~ en 20 Noviembre 2007, 16:42 pm



Título: Saber q api's usa el task manager
Publicado por: ~~ en 20 Noviembre 2007, 16:42 pm
Hola

No se muy bien si esto va aki, pero supongo q si ;)

Alguien podria indicarme q apis utiliza el administrador de tareas de windows (o decirme como puedo saberlo) para llenar la lista de procesos??

Saludos  ;)


Título: Re: Saber q api's usa el task manager
Publicado por: Shaddy en 20 Noviembre 2007, 22:22 pm
Hola

No se muy bien si esto va aki, pero supongo q si ;)

Alguien podria indicarme q apis utiliza el administrador de tareas de windows (o decirme como puedo saberlo) para llenar la lista de procesos??

Saludos  ;)

No esta mal la pregunta :).

Bueno el encargado de ejecutar el administrador de tareas es el "taskmgr.exe", y si quieres saber que APIs utilizas, jeje, mi consejo es o bien lo miras en OllyDBG, o bien si te resulta muy complicado utilizas el API Spy.

Ya nos contarás tus avances ;).

Salu2..


Título: Re: Saber q api's usa el task manager
Publicado por: ~~ en 21 Noviembre 2007, 00:34 am
Ok, pues me bajaré el Api Spy a ver si lo consigo sacar, por q con el Olly no lo e logrado (tambien es por q soy muuuuuuuuuuuuuuy newi en la ing inversa, para q negarlo  :xD)

Gracias por la info
Saludos


Título: Re: Saber q api's usa el task manager
Publicado por: Karman en 21 Noviembre 2007, 02:24 am
para no perder tiempo debuggeando el TASKMAN acabo de ir a la fuente (si, el código fuente del programa que lo bajé junto con todo el código fuente de Win2K), y lo que hace es trabajar con métodos COM bastantes complicados... que al parecer llegan hasta el kernel... pero era muy largo como para seguir todo el recorrido... te recomiendo te bajes el source del win2k si podes y te fijes ahí directamente...

S2


Título: Re: Saber q api's usa el task manager
Publicado por: Eternal Idol en 21 Noviembre 2007, 12:30 pm
Lo que yo hago normalmente es empezar por lo mas simple.

Ver las DLLs y funciones importadas: Dependency Walker. (http://www.dependencywalker.com/)

Si con eso somos capaces de identificar las probables despues solo nos queda abrir el WinDbg ...

En este caso mi apuesta es por una simple funcion: NtQuerySystemInformation, paso a cambiar su codigo por:

ntdll!ZwQuerySystemInformation:
7c90e1aa b8220000c0      mov     eax,0C0000022h
7c90e1af c21000          ret     10h

Y veo que no se actualiza mas la barra de procesos  ;D


Título: Re: Saber q api's usa el task manager
Publicado por: ~~ en 21 Noviembre 2007, 13:31 pm
Gracias a todos ;)

Probaré a hookear el api q comentas Eternal Idol a ver si consigo resultados, si no tendre q hacer lo q dice Karman....

Saludos


Título: Re: Saber q api's usa el task manager
Publicado por: Eternal Idol en 21 Noviembre 2007, 13:36 pm
Gracias a todos ;)

Probaré a hookear el api q comentas Eternal Idol a ver si consigo resultados, si no tendre q hacer lo q dice Karman....

Saludos

Probalo, el Task Manager (como la mayoria de programas - aunque no directamente -) usa esa funcion para enumerar los procesos.


Título: Re: Saber q api's usa el task manager
Publicado por: Karman en 21 Noviembre 2007, 16:55 pm
tenía razón Eternal Idol, esa es la función y acá tenés la referencia de como se usa:

Código:
/*++ CProcPage::GetProcessInfo
Class Description:
    Reads the process info table into a virtual alloc'd buffer, resizing the buffer if needed
Arguments:
Return Value:
Revision History:
      Nov-16-95 Davepl  Created
--*/

static const int PROCBUF_GROWSIZE = 4096;

HRESULT CProcPage::GetProcessInfo(){
    HRESULT  hr = S_OK;
    NTSTATUS status;
    while(hr == S_OK){
        if (m_pvBuffer){
            status = NtQuerySystemInformation(SystemProcessInformation,
                                              m_pvBuffer,
                                              m_cbBuffer,
                                              NULL);
            // If we succeeded, great, get outta here.  If not, any error other
            // than "buffer too small" is fatal, in which case we bail
            if (NT_SUCCESS(status)) break;
            if (status != STATUS_INFO_LENGTH_MISMATCH){
                hr = E_FAIL;
                break;
            }
        }
        // Buffer wasn't large enough to hold the process info table, so resize it
        // to be larger, then retry.
        if (m_pvBuffer){
            VirtualFree(m_pvBuffer, 0, MEM_RELEASE);
            m_pvBuffer = NULL;
        }
        m_cbBuffer += PROCBUF_GROWSIZE;
        m_pvBuffer = VirtualAlloc (NULL,m_cbBuffer,MEM_COMMIT,PAGE_READWRITE);
        if (m_pvBuffer == NULL){
            hr = E_OUTOFMEMORY;
            break;
        }
    }
    return hr;
}

Y para obtener los nombres de los usuarios:

Código:
// Reviewed by alhen 9 - 3 - 98
HRESULT CProcInfo::SetProcessUsername(const FILETIME *pCreateTime){
    DWORD dwError = NO_ERROR;
    // SetProcessUsername should get called only for terminal servers.
    if( !IsTerminalServer() ){
        return E_FAIL;
    }
    // in case we could not get the proc address from winsta.dll
    // set the user name to error or something.
    __try
    {
        // in case of wow tasks assign username same as its parent process's
        if( IsWowTask( ) ){
            if( m_pWowParentProcInfo->m_pszUserName != NULL ){
                m_pszUserName = ( LPTSTR )new TCHAR[ lstrlen(m_pWowParentProcInfo->m_pszUserName ) + 1 ];
                if( m_pszUserName != NULL ){
                    lstrcpy( m_pszUserName , m_pWowParentProcInfo->m_pszUserName );
                    return S_OK;
                }else{
                    return E_OUTOFMEMORY;
                }
            } else{
                return E_FAIL;
            }
        }

        if( m_UniqueProcessId == 0 )     // this is a system idle process.
        {
            const TCHAR *szIdleProcessOwner = TEXT( "SYSTEM" );
            m_pszUserName = ( LPTSTR )new TCHAR[ 7 ];
            if( m_pszUserName != NULL ){
                lstrcpy(m_pszUserName, szIdleProcessOwner);
            }
        } else {
            PSID pUserSid = NULL;
            DWORD dwSize = 0;
            if( !(*gpfnWinStationGetProcessSid)( NULL , GetRealPID( ) , *pCreateTime, ( PBYTE )pUserSid , &dwSize ) ){
                pUserSid = ( PSID ) new BYTE[ dwSize ];
                if( pUserSid != NULL ){
                    if( (*gpfnWinStationGetProcessSid)( NULL , GetRealPID( ) , *pCreateTime, ( PBYTE )pUserSid , &dwSize ) ){
                        if( IsValidSid( pUserSid ) ){
                            TCHAR szTmpName[MAX_PATH];
                            DWORD dwTmpNameSize = MAX_PATH;
                            (*gpfnCachedGetUserFromSid)( pUserSid , szTmpName , &dwTmpNameSize );
                            m_pszUserName = ( LPTSTR )new TCHAR[ sizeof( szTmpName ) + 1 ];
                            if( m_pszUserName != NULL ){
                                lstrcpy(m_pszUserName, szTmpName);
                            }
                        }
                    }
                    delete [] pUserSid;
                }else{
                    dwError = GetLastError();
                }
            } // this would mean that a sid of size zero was returned
        }
    }
    __except (EXCEPTION_EXECUTE_HANDLER)
    {
        // dprintf(TEXT("exception occured: %d",), GetExceptionCode());
        dwError = GetExceptionCode();
    }
    return HRESULT_FROM_WIN32(dwError);
}

S2


Título: Re: Saber q api's usa el task manager
Publicado por: Eternal Idol en 21 Noviembre 2007, 18:41 pm
tenía razón Eternal Idol, esa es la función y acá tenés la referencia de como se usa:

Me quedo con mi metodo, es mas generico (y mas legal ademas) ya que no solemos contar con el codigo de los programas que queremos analizar.


Título: Re: Saber q api's usa el task manager
Publicado por: ~~ en 25 Noviembre 2007, 12:44 pm
Hola, peron por la tardanza...

Eternal Idol, a riesgo de meter la pata, NtQuerySystemInformation es una api para ser usada desde el kernel? por q yo en mi msdn no la veo, ademas por google vi esto:

Citar
NtQuerySystemInformation is used to check some system informations avaiable only in KernelMode (above 0x80000000). All avaiable (or all known) information classes are described in SYSTEM_INFORMATION_CLASS.



De ser para kernel tendré q seguir buscando ya  q estoy hookeando en ring 3...

Saludos


Título: Re: Saber q api's usa el task manager
Publicado por: Eternal Idol en 25 Noviembre 2007, 14:52 pm
Eternal Idol, a riesgo de meter la pata, NtQuerySystemInformation es una api para
ser usada desde el kernel?

El que corre el riesgo  ;D Si hubieras abierto el WinDbg y hecho lo que comentaba al principio sabrias que es posible modificar esta funcion manualmente incluso.

por q yo en mi msdn no la veo, ademas por google vi esto:

Esta indocumentada como casi toda la NTDLL (DLL de modo Usuario).

http://undocumented.ntinternals.net/

De ser para kernel tendré q seguir buscando ya  q estoy hookeando en ring 3...

Mira mi mensaje anterior:

ntdll!ZwQuerySystemInformation:
7c90e1aa b8220000c0      mov     eax,0C0000022h
7c90e1af c21000          ret     10h

En modo Usuario ZwQuerySystemInformation y NtQuerySystemInformation son la misma direccion (una es alias de la otra). Y lo que hacen es pasar a modo Kernel donde la nt!NtQuerySystemInformation se encargara de retornar los valores que como bien dice lo que citas solo estan disponibles (DIRECTAMENTE) en modo Kernel.


Título: Re: Saber q api's usa el task manager
Publicado por: ~~ en 25 Noviembre 2007, 17:25 pm
Citar
En modo Usuario ZwQuerySystemInformation y NtQuerySystemInformation son la misma direccion (una es alias de la otra). Y lo que hacen es pasar a modo Kernel donde la nt!NtQuerySystemInformation se encargara de retornar los valores que como bien dice lo que citas solo estan disponibles (DIRECTAMENTE) en modo Kernel.

Aaaaaaaaaaaaaaaaaaaamm vale ok ok ahora entiendo, pues muchas gracias, a ver si saco un rato y consigo hookear esta api ;)

Gracias


Título: Re: Saber q api's usa el task manager
Publicado por: ~~ en 27 Noviembre 2007, 14:53 pm
Weno, q ya hookee la api (aunke aun no ocultado los procesos ;)) q solo pongo este post para confirmar q esa es la api, y para dar las gracias  :P

Saludos


Título: Re: Saber q api's usa el task manager
Publicado por: Eternal Idol en 27 Noviembre 2007, 16:32 pm
Weno, q ya hookee la api (aunke aun no ocultado los procesos ;)) q solo pongo este post para confirmar q esa es la api, y para dar las gracias  :P

Saludos

De nadas  ::)