|
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
|
|
|
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: /*++ 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: // 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 7 5 73 -> 7 4 73 cseg01:4CC9 7 5 6D -> 7 4 6D cseg01:4CD6 7 5 60 -> 7 4 60 cseg01:4CDC 7 5 5A -> 7 4 5A Acá te dejo el link de descarga... lo terminé subiendo para que veas como queda: http://rapidshare.com/files/71013947/P20042.rar.htmlUna 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: 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: 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... ... 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
|
|
|
|
|
|
|