El Crack Que faltaba : Ayuda

Iniciado por N0mada, 17 Febrero 2012, 19:39 PM

0 Miembros y 1 Visitante están viendo este tema.

N0mada

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 !

Иōҳ

por aquí;

<http://ricardonarvaja.info/WEB/OTROS/JAVA>
DPIIjava14.pdf
DPIIjava10.pdf
DPIIjava19.pdf
DPIIjava4.pdf.7z
DPIIjava2.pdf.7z
DPIIjava5.pdf
DPIIjava18.pdf
DPIIjava13.pdf
DPIIjava12.pdf
DPIIjava3.pdf.7z
DPIIjava9.pdf
DPIIjava7.pdf
DPIIjava17.pdf
DPIIjava6.pdf
CovertJava.rar
DPIIjava1.pdf.7z
DPIIjava16.pdf
DPIIjava8.pdf
DPIIjava15.pdf

Pone en el buscador:

http://ricardonarvaja.info/WEB/buscador.php

java




Una aplicación compilada en java es un conjuto de bytecodes, esto es muy diferente a un ejecutable PE, por lo tanto solo puede ser interpretado/entendido por la VM de java (JVM).

De todas maneras creo que debes empezar por aquí:
http://foro.elhacker.net/ingenieria_inversa/faq_iquesteres_nuevo-t345798.0.html


Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

w0nt0n

Buenas.

Le he echado un ojo al programa y por lo que parece está programado en Visual C++ (peid). La parte caliente del programa es muy sencilla de encontrar, pero deberías pegarte un poco con él. Traceando "a mano" puedes llegar fácilmente y si no, te dejo una pista, que no es muy reveladora y que te lleva por un camino un poco más farragoso (a parte de quitarle toda la gracia).

Pista: Strings

Saludos!
No quisiera parecer marica, pero los unicornios son una *****.

N0mada

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 !!


N0mada

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)

.:UND3R:.

CitarY 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

Para saber que función realiza cada call debes tracearlas y entenderlas.
En cuanto a entre nopear y modificar el return de la call siempre es más conveniente modificar de menor manera posible el código (evita posibles excepciones).


CitarSi 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 ?

TEST realiza un AND si modificar el operando de destino. Por lo cual solo afecta a las banderas de registros (FLAGS).

Operación AND:
V V = V
V F =  F  ; Se ignora al ser tanto el operando de origen y de destino iguales
F F =  F

o

1 1 = 1
1 0 = 0 ; Se ignora al ser tanto el operando de origen y de destino iguales
0 0 = 0


Es decir que la única manera de activar la bandera cero (FZ) a través de la instrucción nemónica TEST es cuando EAX = 0

0 0 = 0

En caso de que sea 1 FZ=0

No logro entender la parte del código que me has enviado (lo entendería mejor con el programa completo debuggeado) pero si la solución general es invertir el némonico de instrucción de salto condicional JNE por JE o JE por JNE

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

N0mada

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 !



.:UND3R:.

Claro si se invierte por lógica los serial correctos serán considerados como incorrectos, para permitir cualquiera la solución sería OR EAX,ECX o OR EAX,EDX
el operando de origen debe ser distinto de cero así supongamos que EAX es cero:

EAX = 0 0 0 0 0 0 0 0
ECX = 1 0 1 0 1 1 1 1
R=      1 0 1 0 1 1 1 1 ZF=0

Si introdujeras un serial correcto:

EAX = 0 1 0 1 1 1 1 1
ECX = 1 0 1 0 1 1 1 1
R=      1 1 1 1 1 1 1 1 ZF=0

En cuanto a las maneras de acercarse a la "zona caliente" (funciones encargadas de comprobar la validación de un serial). Depende del programa.

Puede ser con la API MessageBox, GetDlgItem, GetDlgItemText
Verificar en memoria si está la función de verificación
Tracear

Hay demasiadas formas, la diferencia entre un programa seguro e inseguro por así decirlo a mi criterio sin considerar packer es que la solución se limita a menos métodos que funcionan.

Saludos




Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

N0mada

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 !