Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: gil13 en 6 Mayo 2010, 21:19 pm



Título: Limitacion en un programa
Publicado por: gil13 en 6 Mayo 2010, 21:19 pm
Buenas !!

Estoy trasteando con un programa, version demo que tiene estas limitaciones:

- Te deja usarlo 90 min
- No te deja guardar lo que diseñas

He estado mirando como funciona el registro de este programa y sigue estos parametros:

Te envian una clave, la instalas en el ordenador, se te abre una ventana y tienes que meter un  nombre de usuario y contraseña, y se desbloquea.

Lo he abierto con olly a ver que veia, pero no veo nada, mejor dicho veo muchas cosas. Tengo el olly abierto con el programa funcionando a ver cuando me salen los 90 minutos.

Alguna sugerencia para lo de guardar ¿?

Tengo algunas posibilidades, puede qyue ninguna sea cierta porque no se como funciona exactamente el keyfile.

1 - Al instalar el keyfile automaticamente se te desbloquea todo.
2 - Cada vez que incias el programa comprueba que existe el archivo keyfile y que esta registrado y te habilita las opciones.


Gracias por vuestro tiempo y un saludo !!


Título: Re: Limitacion en un programa
Publicado por: MCKSys Argentina en 6 Mayo 2010, 22:03 pm
Hola!

Puedes probar con CreateFile. Asi verás qué hace cuando abre el archivo key.

Saludos!


Título: Re: Limitacion en un programa
Publicado por: gil13 en 6 Mayo 2010, 23:04 pm
La verdad esque estoy bastante verde con estos temas

Sigo mirando en Olly. No usa createfile, estoy mirando las API que usa y tampoco se muy bien que buscar.

Alguna idea ?

Mientras estoy mirando sus apis, que hace cada una etc

Ire comentando mis avances !

P.D: He pensado en comprar la licencia para poder comparar, pero cuesta mas de 1200€, asi que descartado, intentare conseguir alguna version anterior que este registrada aver si veo algo mas claro.
Gracias y un saludo !


Título: Re: Limitacion en un programa
Publicado por: tena en 6 Mayo 2010, 23:14 pm
Ctrl+G y escribi CreateFile [ENTER]

y luego pones el Bp con F2, das run y si no cae es porque no la usa jeje

Otra es esperar los 90 minutos y pausar el Olly, Alt+F9 y luego aceptas el mensaje, y caeera en oly.  Aunque aqui debes esperar hora y media :(

slds


Título: Re: Limitacion en un programa
Publicado por: biribau en 6 Mayo 2010, 23:18 pm
Tiene que comprobar el fichero, así que debería de usar CreateFile(antes de arrancar). Aunque quizá almacene un flag en el registro. También puedes probar con SetTimer, no es difícil trucar un SetTimer para no esperar los 90 minutos. Y sino desde el inicio y con paciencia, no es elegante ni rápido pero cuando estás sin ideas no suele fallar.


Título: Re: Limitacion en un programa
Publicado por: gil13 en 6 Mayo 2010, 23:48 pm
No usa CreateFile, por eso pienso que quizas una vez registrado ya no vuelve a comprobar el archivo de claves, con SetTimer como se muestra el tiempo ? es decir como tengo que encontrar los 90 min de prueba, en min, en segundos ... ?

Estoy buscando tambien los GetTimeLocal y GetSystemTime

Conseguir no lo conseguire, pero como cada cosa que me encuentro busco a ver que hace y como funciona aprender por lo menos aprendo

Gracias por la ayuda !


Título: Re: Limitacion en un programa
Publicado por: MCKSys Argentina en 7 Mayo 2010, 01:14 am
Probaste con AMBAS versiones de CreateFile ??? ANSI y UNICODE??


Título: Re: Limitacion en un programa
Publicado por: tena en 7 Mayo 2010, 01:36 am
Probaste con AMBAS versiones de CreateFile ??? ANSI y UNICODE??

Podrias buscar la constante en milisegundos de 90minutos, osea 5400000 pero en hexa, osea 005265C0.

slds


Título: Re: Limitacion en un programa
Publicado por: biribau en 7 Mayo 2010, 02:25 am
con SetTimer como se muestra el tiempo ? es decir como tengo que encontrar los 90 min de prueba, en min, en segundos ... ?

Estoy buscando tambien los GetTimeLocal y GetSystemTime
A SetTimer le pasas el tiempo en milisegundos, mira la msdn...
No creo que use las otras, pues sería por polling(espera activa) o algo similar?, esto está muy mal visto entre programadores no? y pues como que es un poco más complicado de implementar


Título: Re: Limitacion en un programa
Publicado por: gil13 en 7 Mayo 2010, 13:46 pm
Buenas, os cuento como va

Llego al SetTimer, localizo el tiempo, lo cambio a 2 min, (120s, 120000ms --> 1D4C0) Cuando me salta al ventana paro el olly, alt+F9 y me salta esto.


Código:
00512CF5  |. 48             DEC EAX                                  ;  Switch (cases 1..7)
00512CF6     83F8 06        CMP EAX,6
00512CF9  |. 0F87 8B000000  JA Capture.00512D8A
00512CFF  |. FF2485 EC2D510>JMP DWORD PTR DS:[EAX*4+512DEC]
00512D06  |> 8D7424 10      LEA ESI,DWORD PTR SS:[ESP+10]            ;  Case 1 of switch 00512CF5
00512D0A  |. C74424 08 8CD7>MOV DWORD PTR SS:[ESP+8],Capture.00BFD78>
00512D12  |. E8 99360000    CALL Capture.005163B0
00512D17  |. 8D7424 1C      LEA ESI,DWORD PTR SS:[ESP+1C]
00512D1B  |. E8 90360000    CALL Capture.005163B0
00512D20  |. B8 01000000    MOV EAX,1
00512D25  |. 5E             POP ESI
00512D26  |. C3             RETN
00512D27  |> 8D7424 10      LEA ESI,DWORD PTR SS:[ESP+10]            ;  Case 2 of switch 00512CF5
00512D2B  |. C74424 08 8CD7>MOV DWORD PTR SS:[ESP+8],Capture.00BFD78>
00512D33  |. E8 78360000    CALL Capture.005163B0
00512D38  |. 8D7424 1C      LEA ESI,DWORD PTR SS:[ESP+1C]
00512D3C  |. E8 6F360000    CALL Capture.005163B0
00512D41  |. B8 02000000    MOV EAX,2
00512D46  |. 5E             POP ESI
00512D47  |. C3             RETN
00512D48  |> 8D7424 10      LEA ESI,DWORD PTR SS:[ESP+10]            ;  Case 6 of switch 00512CF5
00512D4C  |. C74424 08 8CD7>MOV DWORD PTR SS:[ESP+8],Capture.00BFD78>
00512D54  |. E8 57360000    CALL Capture.005163B0
00512D59  |. 8D7424 1C      LEA ESI,DWORD PTR SS:[ESP+1C]
00512D5D  |. E8 4E360000    CALL Capture.005163B0
00512D62  |. B8 04000000    MOV EAX,4
00512D67  |. 5E             POP ESI
00512D68  |. C3             RETN
00512D69  |> 8D7424 10      LEA ESI,DWORD PTR SS:[ESP+10]            ;  Case 7 of switch 00512CF5
00512D6D  |. C74424 08 8CD7>MOV DWORD PTR SS:[ESP+8],Capture.00BFD78>
00512D75  |. E8 36360000    CALL Capture.005163B0
00512D7A  |. 8D7424 1C      LEA ESI,DWORD PTR SS:[ESP+1C]
00512D7E  |. E8 2D360000    CALL Capture.005163B0
00512D83  |. B8 08000000    MOV EAX,8
00512D88  |. 5E             POP ESI
00512D89  |. C3             RETN
00512D8A  |> 8B4424 10      MOV EAX,DWORD PTR SS:[ESP+10]            ;  Default case of switch 00512CF5
00512D8E  |. 8B35 BCA2B500  MOV ESI,DWORD PTR DS:[<&KERNEL32.Interlo>;  kernel32.InterlockedDecrement
00512D94  |. C74424 08 8CD7>MOV DWORD PTR SS:[ESP+8],Capture.00BFD78>
00512D9C  |. 85C0           TEST EAX,EAX

Seguire contando que ocurre.

Gracias y un saludo.


Título: Re: Limitacion en un programa
Publicado por: biribau en 7 Mayo 2010, 17:35 pm
A ver, creo que está mal enfocado, sí, vale, el programa se cierra a los 90 minutos pero también tiene otra limitación, la de guardar. O sea que ahí no encontrarás nada salvo que no se te cierre a los 90 minutos.
La comprobación de si está registrado, se hace antes del SetTimer es donde tienes que mirar, es un poco la búsqueda hacia atrás del SetTimer, no haces nada siguiendo el hook del timer, salvo que no se te cierre.
Es como, para que lo entiendas, los CrackMes más sencillos que son un salto y un MessageBox, tú miras después del MessageBox o antes? después ya se está cerrando el programa... así que poco puedes hacer


Título: Re: Limitacion en un programa
Publicado por: gil13 en 7 Mayo 2010, 17:59 pm
Buenas !

Si, eso lo tenia claro que tiene que ser antes, yo creo que incluso antes de que se cargue la interfaz del programa busca si esta o no registrado (sale un pantalla de carga antes de iniciar la interfaz).

Luego cuando tenga un poco de timpo volvere a cargarlo y probare a ver que encuentro.

En realidad lo de que se te cierre a los 90 min tampoco es mucho problema, el verdadero problema es que no te deje guardar.

Gracias por vuestro tiempo y seguire contanto lo que miro !!


Título: Re: Limitacion en un programa
Publicado por: gil13 en 7 Mayo 2010, 19:51 pm
buenas de nuevo, he sacado 10 minutillos, comento:

He encontrado un CreateFile en ANSI y 11 en Unicode, la que me ha parecido mas interesante ha sido la de ANSI, esto me dice:

Código:
00A6BC56  |. 50             PUSH EAX                                                  ; /hTemplateFile => NULL
00A6BC57  |. 50             PUSH EAX                                                  ; |Attributes => 0
00A6BC58  |. 6A 03          PUSH 3                                                    ; |Mode = OPEN_EXISTING
00A6BC5A  |. 50             PUSH EAX                                                  ; |pSecurity => NULL
00A6BC5B  |. 6A 03          PUSH 3                                                    ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
00A6BC5D  |. 68 00000040    PUSH 40000000                                             ; |Access = GENERIC_WRITE
00A6BC62  |. 68 10B9BC00    PUSH Capture.00BCB910                                     ; |FileName = "CONOUT$"
00A6BC67  |. FF15 9CA3B500  CALL DWORD PTR DS:[<&KERNEL32.CreateFileA>]               ; \CreateFileA

He estado curioseando en GetStHandle, en SetStHandle, con GetFileSize, ReadFile etc

Ningun GetFileSize me da un tamaño directamente.

Alguna idea ? Yo sigo curioseando.


Gracias y un saludo !!


Título: Re: Limitacion en un programa
Publicado por: biribau en 8 Mayo 2010, 03:08 am
CONOUT$ creo que es la forma de referirse en windows a la salida estándar, o sea, CONsole OUTput
GetStdHandle es para cosas parecidas
Ninguna creo que pueda servir para verificar si existe un fichero de registro.


Título: Re: Limitacion en un programa
Publicado por: tena en 8 Mayo 2010, 05:30 am
Exactamente que hace al intentar Guardar? Te muestra un mensaje? no hace nada?
El boton de Guardar esta deshabilitado? Como es un Demo es posible que no este esa parte del codigo de guardar.

slds


Título: Re: Limitacion en un programa
Publicado por: gil13 en 8 Mayo 2010, 13:18 pm
Me he estado leyendo los msdn y sigo sin tener muichas cosas claras.

Lam opcion guardada viene desactivada (en gris) es la demo y la extended, lo unico que hace la clave es activar el menu guardar y descativar el limite de tiempo.

Luego sigo probando !!

Gracias y un saludo !


Título: Re: Limitacion en un programa
Publicado por: tena en 8 Mayo 2010, 17:28 pm
Aha, entonces podrias tratar por ese lado.. Fijate con un editor de recurso el id del menu guardar, y luego lo buscas en olly... 


Título: Re: Limitacion en un programa
Publicado por: gil13 en 8 Mayo 2010, 21:34 pm
Probe ya y veia las capertas de lso bitmaps, cursores e iconos, y una carpeta que pone 24 con este codigo

Código:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Hasta donde yo se esto regula con que privilegios se abrira el ejecutable, con el usuario que haya inciado sesion.

El uiAccess desconocia para que funcionaba asi que mire y sirve para indicar si al aplicacion tiene que estar en una ubicacion segura del sistema de windows

Un saludo !
P.D: Uso ResHack