Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - N0mada

#1
Ya pero es que este programa no tiene GUI, es de consola. Así que ni alerts ni diálogos ni nada.
Para estos casos que métodos típicos hay? (algunos como esos que me has dicho para el API de Win32)

Lo que te decía, meter una clave 123456789 y parar la ejecución cuando el EAX tenga ese valor (123456789) es posible ? Cómo se hace?

Gracias !
#2
Gracias por la info .:UND3R:.

Pues el código simplemente pretende hacer que una función a la que se llama salga siempre con 1.
Así el JE no salta porque FZ = 0

Lo de cambiar de JE a JNE no me parece opción porque entonces la clave correcta NO te registraría, y lo veo un poco chapuzilla.

Yo lo que menos me convence de mi forma de encontrar la zona caliente es lo de buscar por las cadenas de texto.
Cómo se puede hacer eso por ejemplo suponiendo que no tenemos esas cadenas de texto tan a mano?. Meter una clave 123456789 y parar la ejecución cuando el EAX tenga ese valor (123456789) es posible ?

Respecto a lo de tener el programa entero para debuguear incluyo el link (no lo puse al principio porque no se si se puede por las normas...) he usado el DOC to Any Converter Command Line
www.verydoc.com/doc-to-any.html

Por cierto w0nt0n  si la String-pista ;) es el camino farragoso, cuál era la otra aproximación ?

Saludos !


#3
Perdón por la errata,
donde dice:
JE salta si FZ = 0
quería decir
JE salta si el operando es CERO ( y por tanto FZ = 1)
#4
Buenas a todos,

a ver que me siento un poco como que tengo el pez pero sigo sin saber pescar.

He buscado "all references text strings" lo que el programa dice al convertir un archivo:
ASCII "You have %d time to evaluate this product, you may purchase a full version from...

Aparece esa y otra: ASCII "Thank you for choosing our product."

Voy a esa línea y veo:
0041BAB2  |. 68 D8316500    PUSH doc2anyO.006531D8                   ;  ASCII "Thank you for choosing our product."
y justo encima:
0041BA92  |. E8 C9E0FFFF    CALL doc2anyO.00419B60
0041BA97  |. 83C4 04        ADD ESP,4
0041BA9A  |. 85C0           TEST EAX,EAX
0041BA9C     74 21          JE SHORT doc2anyO.0041BABF
0041BA9E  |. 68 48E73201    PUSH doc2anyO.0132E748
0041BAA3  |. C705 50D83201 >MOV DWORD PTR DS:[132D850],1
0041BAAD  |. E8 DEF8FFFF    CALL doc2anyO.0041B390

el call de BAAD (irónicamente,jeje) escribe el valor correcto de la clave de registro.
(Por cierto WriteProfileString lo escribe en el win.ini y no en el registro! Win7 ya no cuenta con win.ini ?¿?¿)

Si subimos está el JE y el TEST y antes el CALL doc2anyO.00419B60
Si NOPeo ese 74 21 ya no me salta la parte buena y todo funciona bien, me quita hasta la marca de agua de publicidad.

Y aquí empiezan mis dudas:
a CALL doc2anyO.00419B60 se le llama: Local calls from 0041BA92, 0041C7AF
¿la segunda llamada para qué es? Aparentemente no afecta pero no me fío...
Otra cosa:
es mejor que NOPear hacer que la rutina de CALL doc2anyO.00419B60
haga MOV EAX,1
RETN

Si no lo he entendido mal el TEST EAX, EAX hace un AND pero no altera más que los flags, léase comprueba si EAX es 0.
JE salta si FZ = 0
así que si pongo un 1 en EAX con el TEST, FZ se queda a 0 y JE no salta.
es correcto ?

Ale voy a seguir, si alguien quiere perder un rato explicándome alguna de estas cosas se lo agradeceré.

Voy a buscarme otro programa para volver a tropezar y tostaros a dudas   :rolleyes:

Saludos !!

#5
Hola a todos,

he estado en la web de berypdf (con V) y por internet hay millones de serial keygen etc de sus productos, el caso que de uno en concreto,  ( doc 2 any) no; están de casi todos menos de ese.

Lo he bajado y veo que a diferencia del resto es que la mayoria son instalables de win32 este es un programa de consola sin GUI, tiene alguna dll y una subcarpeta con .jar de java.

Para intentar registrar le pones -$ 1234clave5678
pero si no es la correcta sin más te saca la ayuda por pantalla y ya está, no hay alert no hay más señal visible...
Cómo hago para llegar a la zona caliente ?
Que técnicas hay para estos casos, que no se por dónde tirar ...  >:(

Gracias !
#6
Bueno yo más que molesto estoy muy agradecido a gastonp por las molestias y lo que me ha ayudado, y a todos los demás también que con cada cuestión al final se aprenden cosas nuevas aunque no tengan que ver con la duda original.

;-)

#7
El problema es que cuando le paso la excepción al programa y aparnetemente todo sigue igual, si lo pauso , me salta a ntdll, si le pongo bps al código del programa, los ignora, y así no hay quien lo crackee  ;D

como te digo gastonp me dice que esa dirección es la de inicio de la rutina, a el no le da la excepción y si le pasa por ahi.
Yo le pongo el bp y el programa sigue como si nada...

He probado con el olly2 y me dice que la excepcion es no "resumeable".

No se como "volver" al programa para poder examinarlo.
#8
Hola a todos,

en el post anterior estaba intentando crackear un programa y me pasa lo siguiente:

sin más que cargando el ejecutable "victima" en Olly y dándole a correr me tira una excepción 0EEDFADE
Se la paso al programa y aparentemente todo bien.
El caso que tras esa excepción si le doy a pausa me salta como módulo a ntdll.dll y no al ejecutable, además si le pongo un bp al programa no para y gracias a gastonp que me ha echado una mano sé que esa sí es la rutina a crackear y por tanto sí que se ejecuta ... vamos que no me hace caso al bp, ni a los cambios que le hago al código.

Alguna idea ?
Si no me he sabido explicar bien decídmelo y intentaré poner más detalle.

Gracias.
#9
Cita de: gastonp en 29 Julio 2010, 20:04 PM
Disculpen mi ignorancia pero ¿qué es el SetDataFile?
Saludos

Disculpadme a mi que me equivoqué al teclearlo.
No es SetDataFile sino SetDateFile, y sirve para lo que su propio nombre indica: establecer fechas de modificación, creación etc a los archivos.
Una especie de "touch" en linux.

aquí hay varios programas para lo mismo:
http://www.online-tech-tips.com/computer-tips/how-to-change-the-last-modified-date-creation-date-and-last-accessed-date-for-files-and-folders/es/

MCKSys se las arregló para encontrar información hasta de una palabra escrita por error,  ¡es un fenómeno!  ;-) hasta de eso he aprendido yo algo...

En cualquier caso yo opté por esta solución por miedo a alguna rutina extraña y oculta por el programador que se abra los años bisiestos a las 3 y cuarto de la tarde y cosas de esas...
De todas formas el método que propone tena es el mejor para este foro al menos, que es el más educativo y la explicación de las APIS está genial.

Gracias por la ayuda !
#10
Hola,

gracias por las sugerencias gastonp.
Esa primera parte ya la tengo conseguida, de hecho el programa también comprueba que la fecha de modificación sea la del original y si no ... ExitProcess.
Yo uso el SetDateFile para poner la misma del original y así no tengo que preocuparme de cuantos checks ha puesto el programador adicionales...

El problema es que aunque el programa te dice lo de: "El programa ha sido desbloqueado con éxito en este equipo" tras parchear esa rutina con el
mov AL, 1
RETN

en la subrutina hay otra subrutina para la impresión que te dice lo de versión demo...

esa es la que no descubro  y con BP en los RegQueryValueA o RegQueryValueExA hay cientos de BPs porque carga fuentes, drivers, impresoras...

Esa es la rutina que hay que machacar !  ;D