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

#51
A ver, los 4 primeros están claros, creo...   :P
En cuanto al 5º, yo pienso que es así:

He entendido que te refieres a que las 3 cartas sean consecutivas.
Pero hay 2 posibilidades:

1. Si se considera que vale cualquier carta, así si nos toca la carta 12 ó 13 por ejemplo no importa, sus consecutivos serían 13, 1 y 1, 2 respectivamente:

Entonces no importa cuál sea la primera carta, y por tanto hay un 100% de posibilidades de que salga una carta válida.
Para la siguiente, ahora hay una carta menos en la baraja (12).
Hay un (100*1/12)% de probabilidades de que toque la consecutiva.
Y con la otra -> (100*(1/12)*(1/11))% = 0.76% de que toquen 3 cartas consecutivas.

    100*          1
              _________           :silbar:
                 
                 12*11

2. Si se considera que vale cualquier carta menos la 12 y 13, ya que no tienen 3 cartas consecutivas en la baraja:

Entonces la primera carta ha de ser del 1 al 11 -> (100*11/13)%
Para la siguiente, ahora hay una carta menos en la baraja (12).
Hay un (100*(11/13)*(1/12))% de probabilidades de que toque la consecutiva.
Y con la otra -> (100*(11/13)*(1/12)*(1/11))% = 0.64% de que toquen 3 cartas consecutivas.

Como no sabía a qué caso te referías pues he puesto los 2.  :D

Por curiosidad, para que salgan las 13 seguidas hay un 0.0000000161%  :xD
#52
Con la función atoi:

Código (cpp) [Seleccionar]
char *cadena="453423";
int valor=atoi(cadena);

Incluye la biblioteca cstdlib antes.

Un saludo  ;)
#53
Programación C/C++ / Problemas con WinApi
10 Enero 2011, 21:47 PM
Hola.

Primero de todo aclarar que acabo de empezar con WINAPI y por eso puede ser que mis dos errores sean realmente una tontería.
Hasta ahora sólo me he leído algunas páginas del curso de WinApi de conclase.net.
De C++ sé bastante más, me he leído libros, tutoriales, he creado muchos programas de consola, aunque realmente sé poco y cometo siempre errores parecidos.

Volviendo al tema.
Estoy haciendo un programa que a la vez es un Crackme, ya que has de registrarte para poder desinhibir un POPUP que incialmente está en MF_GRAYED.
Como he dicho antes tengo dos problemas:

1. Cuando se pulsa la función Registrar, se crea un diálogo en el que aparecen 3 Controles Edit (ID, Nombre, Serial).
El ID es un número y para obtener el valor uso la función GetDlgItemInt, y me funciona correctamente.
El problema viene con el nombre y el serial que son caracteres (tanto letras como números), y para ellos utilizo GetDlgItemText.
No sé qué estoy haciendo mal, pero la función no me devuelve ninguna cadena.
Lo que hago es ésto:


Código (cpp) [Seleccionar]
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam,
LPARAM lParam)
...
case WM_COMMAND:
if(LOWORD(wParam) == CM_REGISTRO)
{
DialogBoxParam(hInstance, "Registro", hwnd, DlgProc, (LPARAM)&Datos);
}
...

BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
...
int numero1;
char nombre[26];
...
case WM_COMMAND:
if(LOWORD(wParam) == IDOK)
{
numero1 = GetDlgItemInt(hDlg, ID_IDENT, &NumeroOk3, FALSE);
GetDlgItemText(hDlg, ID_NOMBRE, nombre, 26);
...
}
...



Simplemente es como si no estuviera la api.
Para comprobar si me retorna valor he probado ésto:

Código (cpp) [Seleccionar]
if(nombre=="HOLA")
{
   MessageBox(hDlg, "Hola", "", MB_ICONEXCLAMATION | MB_OK);
          EndDialog(hDlg, FALSE);
}

Y cuando escribo HOLA en el Edit Nombre no me sale el cartel.
He pensado que puede ser que no he declarado correctamente la cadena nombre o la comparación se está haciendo mal, pero lo he intentado de otras formas y me salen otros errores.

2. Para volver a habilitar el POPUP Nuevo utilizo EnableMenuItem, pero Nuevo es un POPUP y no un MENUITEM, y no tiene el parámetro uEnable (o al menos eso creo xD).
Estoy pensando en deshabilitar directamente todos los Ítems que resultan de pulsar Nuevo.
Sin embargo sigo teniendo otro problema de una forma u otra, y es que utilizando el EnableMenuItem se necesita el handle del menú, y cuando llamo a la api estoy en el DlgProc y no en la función en la que se crean los menús que es donde se encuentra el handle:

Código (cpp) [Seleccionar]
void InsertarMenu(HWND hwnd)
{
HMENU hMenu1, hMenu2, hMenu3, hMenu4;
    hMenu1 = CreateMenu(); /* Manipulador de la barra de menú */
    hMenu2 = CreateMenu();
    hMenu3 = CreateMenu();
    hMenu4 = CreateMenu();
    /* Primer POP-UP */
    AppendMenu(hMenu2, MF_STRING | MF_POPUP | MF_GRAYED, (UINT)hMenu4, "&Nuevo");
...
AppendMenu(hMenu1, MF_STRING | MF_POPUP, (UINT)hMenu2, "&Archivo");
SetMenu (hwnd, hMenu1);
}


Gracias y espero que si leéis el mensaje y podéis aportar algo lo hagáis y no se quede el tema sin respuestas como ya me ha pasado varias veces...   :-(

PD: He subido lo que llevo de programa a 4shared.com.

http://www.4shared.com/file/fRXIfbsk/Programa.html
#54
Programación C/C++ / Almacenar números en cadena
19 Diciembre 2010, 15:04 PM
Hola.
Estoy intentando hacer un crackme simple, en el que cada letra del nombre haga un xor con un número, resultando el serial verdadero.
El problema es que no puedo guardar el resultado del xor en una cadena de números.
Os pongo lo que sería un ejemplo de la operación xor.

Código (cpp) [Seleccionar]
int main()
{
    char p[7]="Fran";
    int longi=strlen(p);
    int s=3;
    int r[longi-1];
    for(int c=0;c<longi;c++)
    {
    r[c]=p[c]^s;
    cout << p[c] << " XOR " << s << " = " << r[c];
    cout << endl;
    }
    cout << "Serial = ";
    for(int d=0;d<longi;d++)
    {
    cout << r[d];
    }
    cout << endl;
    cin.get();
    return 0;
}



Lo que quiero es almacenar el número entero que aparece después de "Serial = " (que sería el correcto), para después compararlo con el serial falso.
Gracias por adelantado.  :)
#55
Ingeniería Inversa / Ayuda con CrackMe
19 Diciembre 2010, 14:41 PM
Hola.
Estoy intentando hacer un crackme simple, en el que cada letra del nombre haga un xor con un número, resultando el serial verdadero.
El problema es que no puedo guardar el resultado del xor en una cadena de números.
Os pongo lo que sería un ejemplo de la operación xor.

Código (cpp) [Seleccionar]
int main()
{
   char p[7]="Fran";
   int longi=strlen(p);
   int s=3;
   int r[longi-1];
   for(int c=0;c<longi;c++)
   {
   r[c]=p[c]^s;
   cout << p[c] << " XOR " << s << " = " << r[c];
   cout << endl;
   }
   cout << "Serial = ";
   for(int d=0;d<longi;d++)
   {
   cout << r[d];
   }
   cout << endl;
   cin.get();
   return 0;
}



Lo que quiero es almacenar el número entero que aparece después de "Serial = " (que sería el correcto), para después compararlo con el serial falso.
Gracias por adelantado.  :)

PD: Muevo el tema al foro de C++.
#56
Ingeniería Inversa / Re: Crackme hardcode
17 Diciembre 2010, 20:24 PM
Bueno, ya lo he resuelto.
Resulta que las operaciones para generar el serial verdadero se realizan antes de que ingrese mi serial, y por eso no podía encontrarlo  :laugh:
De todas formas lo dejo por si alguien quiere intentarlo, ya que me ha parecido interesante de resolver, sobre todo este método de "ocultación" del serial.
#57
Ingeniería Inversa / Crackme hardcode
17 Diciembre 2010, 19:37 PM
Hola a todos.

Resulta que acabo de hacer un hardcode en teoría facilito, pero no soy capaz de crackearlo (aunque realmente se cuál es el serial).  :P
He encontrado el salto que va o al mensaje correcto o al incorrecto, pero lo que quiero ver son las operaciones y comparaciones que se hacen para poder hallar el serial, y me pierdo un poco intentándolo, más que nada porque me da la impresión que da muchas vueltas.  :-\

Está hecho en C++ y no entiendo como puede resultarme tan complicado porque el código realmente es muy corto.  :rolleyes:

A ver si me podéis ayudar un poco  :)

http://rapidshare.com/files/437868784/HardCode_C__.exe

Un saludo.
#58
Ingeniería Inversa / Re: OllyDbg
3 Noviembre 2009, 19:00 PM
Yo también acabo de empezar a leerme el tuto de Ricardo Narvaja. Está muy muy bien, tiene 1000 págs  :D :D

http://ricardonarvaja.info

Aquí lo tienes todo.
Saludos
#59
Ingeniería Inversa / Re: Crackear WinRar
1 Noviembre 2009, 12:37 PM
Como revives un tema del 2006...   :huh:
Para explicarte mejor no pongas tantas frases juntas, sepáralas por puntos, que sino cuesta mucho leer tu mensaje.
En cuanto a tu programa... pues felicidades, ya veremos si funciona.
#60
Ingeniería Inversa / Re: Novato :(
1 Noviembre 2009, 12:26 PM
Hola, gracias por responder.
Ahora mismo me pongo a leer el tutorial, aunque seguramente lo imprima, porque me gusta más leer de libros que de internet.
También me imprimiré un libro sobre ASM.
Gracias  :D