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

#491
De donde sacaste la idea que no hay variables en asm?

var1 dd 0 ; variable global int

ptr1 dd var1 ; variable global puntero a int

push 0
[esp]; variable local


struct SPRITE
iX dd ?
iY dd ?
bColor db ?
iSpeed db ?
procDraw dd ?
procMove dd ?
hParent dd ?
ends

Engine rb 16 * sizeof.SPRITE  ; array de 16 estructuras



#492
Tu duda es tan facil de resolver como:
a)tomar un programa programado en asm con su codigo fuente
b)poner ese programa en ollydbg
c)comparar resultados.

Te llevara menos tiempo que escribir el post. :silbar:


la diferencia principal es la ausencia de labels. (nombres de variables, procedimientos, saltos, etc..)
#493
Si, varia en como se codifica un salto Jcc SHORT, con Jcc NEAR.  Los saltos condicionales no pueden ser FAR/LONG.

Para mas detalles, puedes referirte a: Intel Architecture Software Development Manual
http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-2a-2b-instruction-set-a-z-manual.html
#494
Muy facil, usa un compilador que genere codigo nativo para la plataforma y no la cosa del .NET

en vez de usar C#/C++.NET  usa C++.
en vez de VB .NET  usa VB X (6?)
etc..


chrome y demas navegadores no son .NET sino aplicaciones nativas para windows y linux.
#495
Habria que ver el programa en cuestion.
En el caso de "int Variable" si es cierto, es una direccion fija.

Pero que pasa si es esto:


class CClass{
public:
   int Variable
};

CClass *MiClase;


MiClase = new CClass;
MiClass->Variable = 5;


al llamar new CClass, la variable se almacena en algun lado de memoria que no es fijo. El offset del puntero de MiClass si es constante, pero a donde apunta si varia.

Hay que ver de que programa en cuestion se trata.
#496
Cita de: [ Thunder | CLS ] en 24 Octubre 2011, 22:10 PM
Por parte de la ofuscacion ha estado bueno, bastante "basura" en medio del camino para despistar y dificultar el traceo. Por parte del serial, como bien dices...es tan sencillo como:

serial + 1 = 45AC34BE
     serial = 45AC34BE - 1
     serial = 45AC34BD


Saludos

PD: Si con ese nivel de ofuscacion se le agrega un algoritmo de registro mas trabajado, el crackme seria mucho mas duro.  ;)
Lo hice asi de facil para que la peña intentara resolverlo, pero por lo visto no hubo muchos voluntarios.

Si quires resolver un keygen interesante, intenta con
http://foro.elhacker.net/ingenieria_inversa/keygenme4_console-t342421.0.html

te aseguro que el algoritmo es super novedoso y el codigo bien prolijo ^^
#497
Hola, nunca tuve que hacer algo asi, pero se me ocurre esta solucion:


Si es Objeto (instancia de una clase) de una aplicacion programada con algun lenguaje orientado a objetos, ni idea que hacer.
(seria instancia de una clase creada con new si fuera cpp)

Si es un bloque creado con HeapAlloc, malloc podrias hacer esto:
1)Agregar un segmento extra a la ejecutable con el tamaño suficiente para que entre el bloque creado. (o bien buscar un espacio vacio grande dentro de la ejecutable)
2)En el lugar que se llama HeapAlloc/Malloc, simplemente reemplazas la instruccion por
mov eax, offset_segmento_nuevo

De esta manera, la ejecutable usaria como nuevo bloque de memoria el segmento extra que le agregaste que siempre estaria en la misma direccion.


Posible problema... cuando se llame a Free la ejecutable tirará un error. Si el bloque es contantemente realocado no va servir. Solo te serviria si llama a HeapAlloc/Malloc una sola vez.


Saludos.
#498
Es que lo que haces es algo asi:


if(strcmp(codificar(user_ingresado), "c55160ccd66021e4e3ae5ff881a8302c"))
    if(strcmp(codificar(serial_ingresado), "723b83ff7548320b21bf1cc8024ddb4a"))
    {
         ....... cambiar imagenes etc....
         registrado
     }


es tan solo invertir la condicion para que el codigo de adentro se ejecute siempre sin importar si es valida la condicion o no.


para complicarlo deberias evitar str_cmp para que no sea tan obvio


#499
Ahora que estoy en casa, pude ver el crackme bien, la rutina que codifica el usuario, por lo pronto es hiper larga....te has tomado demasiado tiempo haciendo el codigo... en serio, existe algo llamado bucles para no escribir tanto codigo  ;-)

paso de analizarlo, es demasiado largo xD

Una consulta, el procedure que codifica a la cadena del usuario estra dentro de otro procedure? Es decir, un procedimiento definido dentro de otro procedimiento?
#500
Cuando el programa acepta la clave que es lo que hace?

Al lado de cada edit aparecen 2 iconos verdes OK, en vez de error?


por lo que puedo intuir, el codigo que transforma el usuario ingresado esta dentro del ocx del progressbar, nopeando los dos saltos dentro del crackme despues de los vbStrCmp termina registrado.
Los 10 segundos de espera son simplemente para molestar  :silbar:

Se hace mas tentador analizar el generador si para cada user hay un pass distinto xD, de lo contrario, el parche se hace tentador ^^