Resultados 1 al 5 de 5

pregunta asm rutina

  1. #1 pregunta asm rutina 
    Iniciado
    Fecha de ingreso
    Jul 2006
    Mensajes
    6
    Descargas
    0
    Uploads
    0
    hola me gustaria que me explicara sobre el siguiente trozo de codigo.
    porque en realidad no consigo comprender exactamente lo que hace:

    00446890 /$ 55 PUSH EBP
    00446891 |. 8BEC MOV EBP,ESP
    00446893 |. 53 PUSH EBX
    00446894 |. 56 PUSH ESI
    00446895 |. 57 PUSH EDI
    00446896 |. 33C0 XOR EAX,EAX -->¿limpio el registro solamente?
    00446898 |. E9 00000000 JMP INSTALL.0044689D
    0044689D |> 5F POP EDI
    0044689E |. 5E POP ESI
    0044689F |. 5B POP EBX
    004468A0 |. C9 LEAVE
    004468A1 \. C3 RETN

    estoy tratando de crackiar una aplicacion y me ha dado un monton de trabajo, pero = ya he avanzado bastante.
    cualquier sugerencia bienvenida. luego les hare otras preguntas que me inquietan.

    ahh el EAX apuntaba al serial que yo introduje.
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    PUSH EBP
    MOV EBP, ESP


    Es el preámbulo de la función llamada. El objetivo es preparar la pila para establecer el estado de la pila "antes" y el "despues" de la llamada. En otras palabras, existe la función que llama (la que ejecuta el CALL), y está la función llamada, que es la que nos estás mostrando el código. La función llamada debe poner el puntero EBP apuntando a ESP (el cual apunta a la cima, de forma que todo lo que esté por debajo pertenece a la función que llama, y todo lo que esté por encima pertenece a la función llamada. Es decir, [EBP+x] (está por encima de EBP) apunta a una variable de la función que llama, o bien a un parámetro que ha recibido (Nota que los parámetros que se pasan a una función se establecen antes de que la función sea llamada, es decir, antes del CALL se realizaron una serie de PUSH's). Y [EBP-x] apunta a una variable local que utiliza la función llamada, por ejemplo un contador auxiliar que pueda utilizar.

    Dicho ésto, cuando se realiza un CALL, de forma estándar la función llamada siempre tendrá estas dos instrucciones.

    Del mismo modo LEAVE equivale a MOV ESP,EBP, POP EBP, para restaurar el contexto, es decir, dejar la pila tal y como estaba antes de la llamada (CALL).

    La serie de PUSH siguientes:

    PUSH EBX
    PUSH ESI
    PUSH EDI
    son para guardar el estado actual de esos registros (salvar el contexto). Usando los estándares tradicionales (cdecl, stdcall, syscall, etc...), lo normal es salvar el contexto antes de la llamada, con lo cual deduzco que por su posición en la pila sea para inicializar variables locales de la función llamada. Es decir, esta función que muestras utilizará unas variables locales que serán inicializadas con los valores de los registros EBX, ESI y EDI. Normalmente éstos dos últimos suelen utilizarse como punteros a vectores, como puede ser el caso de una cadena de texto.

    XOR EAX, EAX

    Simplemente pone a 0 el registro EAX. No tiene otra función. Ahora bien, tras su ejecución se modifican algunos flags (ZF, CF, AF son los principales), que tal vez más adelante sean testeados por alguna instrucción de salto. Ésto tendrás que verlo cuando realices la traza, y ver si posteriormente el estado de los flags varian o no tras la ejecución del XOR, y ver qué grado de implicación afecta a tus objetivos.

    la serie de POP's:

    POP EDI
    POP ESI
    POP EBX


    Son simplemente para dejar la pila como estaba. Recuerda que una vez la función termine, se ha de volver al contexto justo antes de la llamada, y puesto que la función ha tocado la pila, metiendo 3 valores, ahora ha de quitarlos. Al quitarlos, los registros EDI, ESI y EBX tomarán los valores que contenga la pila. (Una función puede tocar la pila todo lo que quiera, pero cuando termine debe dejarlo todo como estaba). Justo después aparece una instrucción de salto incondicional (saltará si o si), y bueno, observo que la dirección de salto es justo a la siguiente instrucción (pop edi), con lo cual no tiene mucho misterio mas que consumir ciclos de reloj y unos 5 bytes de memoria.

    Tal vez ésto te sea de interés para tu cometido, y es que una vez finalice esa función el resultado de ésta se almacena en EAX:EDX, si el valor devuelto es de 64 bits o en EAX si es de 32 bits o menos. Por lo que me dices y si es cierto eso de que EAX apunta al serial, puede parecer a priori que esa función ha sido llamada porque el serial introducido es inválido y la función devuelve 0 (o lo que se puede traducir como falso). Prueba a cambiar el registro EAX a 1 cuando finalice la ejecución de la función (después del RETN), y sigue traceando.

    Con esas lineas de código tampoco se puede decir mucho más.

    Un saludo.
    Última edición por hystd; 03-06-2009 a las 05:34
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Jul 2006
    Mensajes
    6
    Descargas
    0
    Uploads
    0
    te agradesco la ayuda, es que no comprendia esa funciom pues pense que no hacia nada util.
    veras.. ya llevo como 2 semanas tratando de crackear un programa: factorylink 6.0, que me llego, este pide:
    *numero serial
    *secuencia de configuracion

    ambas las tengo (reales)
    luego genera un codigo de registracion.

    en teori, por lo que se, toda esta info se debe mandar a la empresa, para que te devuelva un codigo de autorizacion (con el que se finaliza la instalacion).

    ya encontre el area chico malo (donde sale el msgbox), pero este sale repetido en el codigo un monton de veces, como metodo de distraccion, pero poniendo un BP lo econtre

    me puse a trazar el codigo desde bien atras en el codigo, y por lo que vi hay unos calls a funciones que van testeando el codigo de autorizacion falso.

    primero hay uno que verifica el largo como ditinto de 0 ademas combierte a mayuscala los caracteres en minusculas, pero hay varias funciones que no comprendo... mas adelante vi que se genera un serial.... en fin me gustaria que me ayudaras a comprender mejor el codigo, siempre he leido mucho de todo , y ahora no es la excepcion he hecho varios crackmes pero como sabemos no es lo mismo.. mi comprencion de asm no es tan avanzado, conozco otros lenguajes, pero maquina nunca le dado duro, por ejemplo derepente aparecen lieneas que no entiendo muy bien..

    quisiera enseñar te algo de codigo para que me orientes.
    cualquier ayuda sera bienvenida. de antemano muchas gracias.
    Citar  
     

  4. #4  
    Iniciado
    Fecha de ingreso
    Jul 2006
    Mensajes
    6
    Descargas
    0
    Uploads
    0
    hola nuevamente.
    sabes me di cuenta que captura el serial falso:
    CALL DWORD PTR DS:[<&USER32.GetDlgItemTe>; \GetDlgItemTextA

    pero ademas antes de eso lo va almacenando letra a letra con captura de pulsacion de teclado..

    tu que tienes experiencia, esto sera para contrarestar un posible ataque por fuerza bruta, porque veo cierta logica en la informacion de registro y autorizacion que tengo de antes (instalaciones antiguas):

    USDATA Serial Number: 74022NTI

    USDATA Configuration Sequence: GRPZ S3SI VYKR NQHN DSTI 3VSF TJQH EBWY BD

    --------------------------------------------------------------------

    (1) Registration Number: CIVZ 5MM2 3AQF VKQT Z55S XGIE ND
    (1) Authorization Number: EJYZ 7MST 2IQT 8IRT YBM2 PD4F SB
    -----------------------
    ahora te va otra (solo tengo 2)
    -----------------------
    (2) Registration Number: CI7Z R2VJ 52QE 7KQT Z55S XGIE ND
    (2) Authorization Number: EJ5Z P2SJ 4QQA 9IRT YBM2 PD4F SB
    ------------------------------------------------------------------

    si te fijas hay una relacion entre el num de reg. que se genera y el de autorizacion que uno ingresa, ademas hay trozos que se mantienen intactos para (1 y 2).
    me di cuenta por ejemplo:
    se mantiene
    CI ... KQT Z55S XGIE ND en el de registro
    EJ ... IRT YBM2 PD4F SB en el de autorizacion
    ademas para lo que esta en "..." (el resto) ahy un vinculo de desplazamiento.
    dentro del desensamblado encontre un conjunto de caracteres (abecedario), pero donde le faltan letras:

    00471E40 41 42 43 44 45 46 47 48 49 4A 4B 4D 4E 50 51 52 ABCDEFGHIJKMNPQR
    00471E50 53 54 55 56 57 58 59 5A 32 33 34 35 36 37 38 39 STUVWXYZ23456789

    y dentro del codigo asm se aprecia que se accede a esta area para generar un serial..
    si te interesa guiarme en esta tarea, me dice para hacerte mas preguntas.

    gracias por tu tiempo.
    Citar  
     

  5. #5  
    Iniciado
    Fecha de ingreso
    Jul 2006
    Mensajes
    6
    Descargas
    0
    Uploads
    0
    ahhh, se me olvidaba..

    ahora que lo instalo en mi maquina me genera lo siguiente:

    Registration Number: CIVZ 5MM2 3AQF VKQT Z55S XGIE ND
    ------------------------------------------------
    lo que puse aqui

    (1) Registration Number: CIVZ 5MM2 3AQF VKQT Z55S XGIE ND
    (1) Authorization Number: EJYZ 7MST 2IQT 8IRT YBM2 PD4F SB
    esta mal, seria asi:

    (1) Registration Number: CISZ 9MVT 38QX 6KQT Z55S XGIE ND
    (1) Authorization Number: EJYZ 7MST 2IQT 8IRT YBM2 PD4F SB
    eso seria, es que se me paso
    Citar  
     

Temas similares

  1. Pregunta
    Por carballeira en el foro TV CABLE
    Respuestas: 2
    Último mensaje: 13-05-2008, 17:05
  2. Ayuda con rutina
    Por Danilo51 en el foro PROGRAMACION WEB
    Respuestas: 2
    Último mensaje: 03-03-2008, 14:32
  3. Rutina Antidebugging
    Por laska25346 en el foro INGENIERIA INVERSA
    Respuestas: 2
    Último mensaje: 03-11-2005, 09:10
  4. Respuestas: 1
    Último mensaje: 15-05-2005, 02:07
  5. ¿como puedo hacer una rutina de marcacion telefonica?
    Por luigij1 en el foro REDES Y TECNOLOGIAS WIRELESS
    Respuestas: 1
    Último mensaje: 28-01-2002, 16:48

Marcadores

Marcadores