PDA

Ver la versión completa : Ayuda para serial



chato_sat
16-07-2010, 22:13
Hola a todos.
Este es mi primer post y quisiera decir que hace varios días que me intento iniciar en el mundo de la ingeniería inversa. Ya me he leído varios tutos y solucionado varios crackmes (casi todos ellos en delphi y unos pocos en vb), pero ahora tengo un problema y es que no se sacar el serial de uno de ellos que está escrito en c#.
Tengo ya localizado el punto donde hace la comprobación del serial y permite activar el botón de registrar, lo que pasa es que no sé mucho c# y no se sacarlo (veo que estudiar la carrera de informática no me ha servido de mucho jeje).

Aquí pongo el código de la función licenseInfoChanged, que es la que hace la comprobación del serial introducido:



private void licenseInfoChanged(object sender, EventArgs e)
{
try
{
string input = this.licenseKey.Text.Trim();
if (!Regex.IsMatch(input, @"[A-Za-z0-9\/\+]{4}-[A-Za-z0-9\/\+]{5}-[A-Za-z0-9\/\+]{4}-[A-Za-z0-9\/\+]{5}-[A-Za-z0-9\/\+]{4}"))
{
this.ok.Enabled = false;
}
else
{
byte[] buffer2;
FileEncryption.ExtractKey(FileEncryption.RecoverPr ivateKey(input.Replace("-", ""), this.fullname.Text, this.email.Text), out this._ExpireDate, out buffer2);
buffer2 = Encryption.Encrypt(buffer2, FileEncryption.FriendlyBase64(Convert.ToBase64Stri ng(buffer2)));
if (buffer2.Length != Data.Length)
{
this.ok.Enabled = false;
}
else
{
for (int i = 0; i < Data.Length; i++)
{
if (Data[i] != buffer2[i])
{
this.ok.Enabled = false;
return;
}
}
this.ok.Enabled = true;
}
}
}
catch
{
this.ok.Enabled = false;
}
}

y aquí el Data al que debe ser igual:


static RegistrationDialog()
{
Data = new byte[] { 0xa9, 0x24, 0x2e, 0xa5, 14, 0xcb, 50, 0xbc, 0x40, 0xf9, 0x8d, 0xab, 0x68, 0xa4, 0x3e, 0xfc };
RegData = new byte[] {
13, 0xc4, 0xb1, 6, 0xd6, 0xf9, 0x6f, 0x77, 0x93, 0x63, 0x4b, 0x30, 0x4f, 0x63, 0x2e, 0xc6,
0x19, 0x44, 0xad, 0x62, 0x69, 40, 0xac, 0x95, 210, 0xa3, 0x43, 0x4d, 13, 0x6f, 0xb1, 0xc2,
0xe8, 0x7b, 150, 0x63, 0xf4, 0xa5, 0xa2, 0xc3, 0x9a, 0x99, 0xce, 0xfd, 0x27, 0x38, 0xed, 0x9d,
0x48, 0x5d, 200, 0xa1, 10, 0x74, 0xd4, 0x20, 0xa4, 0x3b, 0x72, 0x2f, 0x4d, 0xcd, 0xba, 0xc4,
20, 0x84, 0x5f, 0x31, 11, 0xe2, 0xf5, 210, 0xf1, 200, 0x67, 0x4c, 4, 0xcb, 0x2b, 0x45,
0xe7, 0xf1, 0x25, 0x11, 0x8b, 0x97, 0x4d, 0x3e, 0xf8, 0x17, 0xec, 0xf1, 0x4e, 0x13, 0x16, 0x6a
};
RenewData = new byte[] {
13, 0xc4, 0xb1, 6, 0xd6, 0xf9, 0x6f, 0x77, 0x93, 0x63, 0x4b, 0x30, 0x4f, 0x63, 0x2e, 0xc6,
0x19, 0x44, 0xad, 0x62, 0x69, 40, 0xac, 0x95, 210, 0xa3, 0x43, 0x4d, 13, 0x6f, 0xb1, 0xc2,
0xe8, 0x7b, 150, 0x63, 0xf4, 0xa5, 0xa2, 0xc3, 0x9a, 0x99, 0xce, 0xfd, 0x27, 0x38, 0xed, 0x9d,
0x48, 0x5d, 200, 0xa1, 10, 0x74, 0xd4, 0x20, 0xa4, 0x3b, 0x72, 0x2f, 0x4d, 0xcd, 0xba, 0xc4,
0xf6, 0xb7, 0xec, 0x58, 250, 0x12, 0x8f, 30, 0x1d, 0xc4, 190, 0x6f, 0xb7, 0x5b, 0x9d, 0xa1,
60, 0x2e, 0xae, 0x26, 0xc7, 0xd1, 0xce, 9, 0x7e, 0x4d, 0x74, 0xa3, 0x81, 0xee, 0xc6, 0x17
};
}

Espero que me puedan echar alguna ayudilla, ya que estoy más perdido que una aguja en un pajar XD.

Gracias de antemano.

Jony Menter0
16-08-2010, 21:52
¿Con qué programa estas tratando de ver la rutina del serial?

Dá un poco más de pistas a ver lo qeu se puede hacer.

Si usas el OllyDBG ¿Has puesto Breakpoints? ¿No puedes ver los datos de los Registros AX,BX,CX, DX?.

Saludetes

Danilo51
18-08-2010, 09:52
Buenas chato_sat,
Una pregunta, tienes opción de modificar el código??

En el caso afirmativo, es tan facil como invertir la condición a la hora de evaluar el password introducido ó entrar en el primer if y cambiarle this.ok.Enabled a True.

Un saludo.

tincopasan
30-08-2010, 04:35
pareciera que ves un código de un .net en reflector, pero por lo poco que entiendo está usando una cadena en base 64, te recomendaría que leas tutoriales y busques tools que convierten las cadenas a este sistema de encriptación