elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 27 28
251  Programación / Ingeniería Inversa / Re: Eliminar Palabra DEMO en Programa en: 15 Diciembre 2007, 03:59 am
bueno... estuve mirando tu programa y logré hacerlo funcionar (al parecer no quiere funcionar desde "Archivos de prog...", tonces lo copié a C y le puse un nombre de menos de 8 caracteres), la cosa es que lo que hace es muy simple, llama al segundo programa para que haga los cambios con los 2 argumentos, pero que pasa si falta uno? funciona correctamente (va en realidad vi que solo modifica unos datos pero no pone el mencionado argumento) como podes probar esto? lo abrís con el olly, y cuando va a llamar a "winexec" te vas a "Follow in Dump" de eax (el argumento a ser enviado) y eliminas el 2º argumento haciendo doble clic sobre el espacio y pones 0, te queda así:

00A66D0C  63 73 61 69 6E 74 2E 65 78 65 20 43 3A 5C 63 61  csaint.exe C:\ca
00A66D1C  6D 62 69 6F 00 44 45 4D 4F 53 54 52 41 43 49 4F  mbio DEMOSTRACIO
00A66D2C  4E 5F 4E 4F 5F 46 41 4C 4C 41 5F 30 34 31 34 2D  N_NO_FALLA_0414-
00A66D3C  34 33 34 38 37 31 31                             4348711

y entonces que pasa si el cartel no existe?

abrís el programa con un editor hexadecimal, buscás el cartelito y cuando lo encontrás remplazás la primera letra con 00

00076a00h: FF FF FF FF 22 00 00 00 00 45 4D 4F 53 54 52 41 ; ÿÿÿÿ"....EMOSTRA
00076a10h: 43 49 4F 4E 5F 4E 4F 5F 46 41 4C 4C 41 5F 30 34 ; CION_NO_FALLA_04

y listo... cuando quiera unir el segundo argumento este va a ser nulo... prueba esto y dime que onda...

S2
252  Programación / Ingeniería Inversa / Re: Eliminar Palabra DEMO en Programa en: 7 Diciembre 2007, 04:53 am
mov dl, 01 copia al registro dl "01", habría que ver el código para darte una explicación mas completa... te convendría subirlo a algún server gratuito y si alguien tiene tiempo que lo vea y te de una mano...

S2
253  Programación / Ingeniería Inversa / Re: Consulta: UPolyx 0.5 o Themida, o los 2? en: 26 Noviembre 2007, 16:26 pm
Da el nombre del programa (o subilo y pasá el link)... así lo vemos y capaz alguno le encuentra la vuelta...

S2
254  Programación / Ingeniería Inversa / Re: Puede un programa bajo DOS detectar que esta siendo copiado? en: 21 Noviembre 2007, 21:59 pm
Básicamente se basa en 2 condiciones... la 1º con el tema del archivo de LOG que te expliqué anteriormente... (lo de leer, borrar, escribir) y el 2º en la siguiente línea:

call    @DiskSize$q4Byte ; DiskSize(Byte) <- Tamaño de disco?

con esta función obtiene el tamaño del disco que luego compara con un valor guardado, o sea... disco de distinto tamaño, programa copiado...

S2
255  Programación / Ingeniería Inversa / Re: Saber q api's usa el task manager 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
256  Programación / Ingeniería Inversa / Re: Saber q api's usa el task manager 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
257  Programación / Ingeniería Inversa / Re: Puede un programa bajo DOS detectar que esta siendo copiado? en: 20 Noviembre 2007, 13:49 pm
Bueno ya logre modificar los saltos...

Muchas gracias, aunque al iniciar me lanza unos errorcitos que en el equipo normal no salen de igual forma probare esta noche la funcionalidad a ver si no se ve comprometida de ninguna forma.

Errorcitos??? No tendría que tirar ningún tipo de error, acá cuando lo ejecuto se abre normalmente, habrás modificado bien? El tema de los saltos era el siguiente:

jnz     short loc_4D38         ->       jz    short loc_4D38

entonces abrías el debugger, ibas a las direcciones que te dí, te fijabas en la barra de estado del IDA, y te aparecía un número (offset), abrías el archivo en un editor hexa, ibas al offset que te decía el IDA, y cambiabas:

cseg01:4CC3 75 73 -> 74 73
cseg01:4CC9 75 6D -> 74 6D
cseg01:4CD6 75 60 ->  74 60
cseg01:4CDC 75 5A  -> 74 5A

Acá te dejo el link de descarga... lo terminé subiendo para que veas como queda:

http://rapidshare.com/files/71013947/P20042.rar.html

Una ultima pregunta, por ejemplo se puede a traves de un desensamblador descifrar una contraseña? ya que por lo menos yo tengo contraseña de usuario pero imagino que debe haber una de Administrador para configurar los parametros generales.

Si, en realidad con un debugger... pero en este momento no tengo ningún debugger de 16 bits...

S2
258  Programación / Ingeniería Inversa / Re: Puede un programa bajo DOS detectar que esta siendo copiado? en: 19 Noviembre 2007, 19:07 pm
Con respecto a los archivos que el programa busca quizas el mismo los crea y los borra ya que en el equipo donde el programa si funciona no logre encontrarlos....

Si, el programa o el instalador del mismo... aunque por ahí leí algo de registro, me parece que el programa se puede instalar dándole algún argumento... si quieres puedes revisar el código...

Lograste hacer correr el programa? O son inevitablemente necesarios esos archivos a los que haces mencion para poner en funcionamiento el software?

Si, logré hacer correr el programa, y no necesitas ningún archivo... osea... ya están en la carpeta que posteaste... el tema es la ubicación, el programa tiene que estar en C:\, por ejemplo:

C:\P2004\P2004.exe
C:\P2004\SYSTEM\INFSYS00.SYS <-está dentro del archivo que posteaste
C:\DOS\WIN386.SWP

o sea... tenes que descomprimirlo en C:\, no puede estar en otro lado... modificando los 4 saltos e instalándolo en C: el programa funciona...

Las modificaciones de los saltos pueden ser hechas desde el mismo IDA pro?

Desconozco... yo utilicé un editor hexadecimal (UltraEdit)... pero no sé si el IDA permite modificar ejecutables...

S2
259  Programación / Ingeniería Inversa / Re: Puede un programa bajo DOS detectar que esta siendo copiado? en: 19 Noviembre 2007, 17:20 pm
Acabo de analizar tu programa con el IDA Pro y encontré lo siguiente:

1º No es un programa de DOS (aunque lo parezca), es un programa de Win16 (win 3.1 posiblemente), osea NE, y en el código:

Código:
cseg01:4BDC:
mov     di, offset aInfsys00_sys ; "INFSYS00.SYS"
...
mov     di, offset aCP2004System ; "C:\\P2004\\SYSTEM"
...
call  @FSearch$q7PathStr6String ; FSearch(PathStr,String)
...
jnz     short loc_4BF6  <- si lo encuentra salta
jmp     loc_4D42 <- sinó [b]error "01"[/b]

Luego: Open file, read file, close file... busca un archivo de log... lo lee... (desconozco que busca en el) y lo elimina, pero si no lo encuentra resetea una variable que se utiliza más adelante... por lo que creo el funcionamiento es el siguiente:

al ejecutarse lee el archivo LOTLOG.LOG, y lo elimina, si sobrepasa todos los checkeos(con la información en el), lo crea de nuevo, mientras que si no, no lo crea y la próxima vez ni siquiera realiza los checkeos... va directamente al mensaje de error... luego tenés:

Código:
cseg01:4CB8:
mov     ax, word_9DC6A <- lo leido en "INFSYS00.SYS"
mov     dx, word_9DC6C <- lo leido en "LOTLOG.LOG"
cmp     dx, word_9CC5A <- variable reseteada (lo mencionado arriba)
jnz     short loc_4D38 <- [b]error "02"[/b]
cmp     ax, word_9CC58 <- variable reseteada (lo mencionado arriba)
jnz     short loc_4D38 <- [b]error "02"[/b]
push   3
call    @DiskSize$q4Byte ; DiskSize(Byte) <- Tamaño de disco?
cmp     dx, word_9DC70 <- leido de "INFSYS00.SYS"
jnz     short loc_4D38 <- [b]error "02"[/b]
cmp     ax, word_9DC6E <- leido de "INFSYS00.SYS"
jnz     short loc_4D38 <- [b]error "02"[/b]
...
mov     di, offset aWin386_swp ; "WIN386.SWP"
...
mov     di, offset aCDos ; "C:\\DOS"
...
call    @FSearch$q7PathStr6String ; FSearch(PathStr,String)
...
cmp     byte ptr es:[di], 0
jz      short loc_4D38 <- no lo encuentra? [b]error "02"[/b]

Luego comienza el programa... con lo que modificando todos los:

jnz     short loc_4D38         ->       jz    short loc_4D38

y teniendo los archivos que te pide ya podes acceder al programa, pero de todas formas, al entrar en el programa te solicita un nombre de usuario y contraseña, los cuales al parecer son de seguridad de los datos... lo cual desconozco si los tienes...

S2

PD: las direcciones de los saltos a modificar son:

cseg01:4CC3 75 73
cseg01:4CC9 75 6D
cseg01:4CD6 75 60
cseg01:4CDC 75 5A
260  Programación / Ingeniería Inversa / Re: CrackMe if you can II (Reloaded) en: 9 Noviembre 2007, 18:55 pm
jejeje... si... eso de los threads lo están utilizando ahora porque es una forma simple de "ocultar código" (en programas grandes se complica llevarle el hilo) eliminando la secuencialidad...  :o ... me alegra que les haya gustado mi crackme... después algún otro día que esté al dopes armaré otro con las cosas que veo en distintos programas...  ;)

S2
Páginas: 1 ... 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [26] 27 28
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines