Ayuda para modificar una dll .NET

Iniciado por Eleкtro, 7 Enero 2014, 06:54 AM

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

.:UND3R:.

Si intentamos registrar con un serial incorrecto, nos aparecerá lo siguiente:


Arrancamos SAE y buscamos métodos interesantes, uno de ellos es el encargado de checkear la licencia:


Este siempre debe devolver true, por lo cual si nopeamos todas las instrucciones y agregamos la mostrada en la imagen, siempre retornará true:


Buscamos por la string registered:


Una vez encontrado lo visualizamos en C#, desconozco este lenguaje pero se me hace muy familiar por Java:


NOTA: Notamos dos métodos muy interesantes, los cuales están marcados con un círculo rojo.

Si hacemos clic en el método WSRegister, veremos que retorna un archivo XML con contenido, siempre y cuando la String text no retorne vacío:


Si nos fijamos text, obtiene el valor de acuerdo a lo que retorna Register, por lo que nos dirigimos a el:


Si lo cambiamos a lenguaje MSIL/CIL veremos lo siguiente:


El método debe retornar una String, y como vimos este debe ser un XML así que Eleкtro me obligó!! a tener que aprender una sintaxis básica de XML junto con .NET miren que lindo, por lo que pongo la siguiente sintaxis (ya explicaré como descubrí que era esa):

Código (xml) [Seleccionar]

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<License>
<UserName>UND3R</UserName>
<CompanyName>UND3R</CompanyName>
<LicenseType>40</LicenseType>
<HardwareId>0123456789</HardwareId>
<MachineName>UND3R</MachineName>
<UserCount>100</UserCount>
</License>


Quedándo más menos así:


Si nos vamos a GetRegistrationData (segundo método encerrado en rojo) veremos la estructura del xml (LicenseType parsea 40 por la licencia más cara  :silbar:):


Ya podremos registrarnos con cualquier serial (siempre y cuando tenga el tamaño correcto):





Link DLL:http://www.mediafire.com/download/bgyfn67ffis0mtj/RapidDesign.dll
Tipo Licencia: Corporate license
(No he probado esta DLL por favor dime si funciona)

Curiosidades:
- El programador se tomó la molestia de crear tan solo dos errores, los cuales eran lanzados cuando se producía una excepción, por lo cual cuando se crackeaba mal se producía una excepción, por lo cual estábamos forzados a recibir el XML.

- El proceso de validación era más menos el siguiente:
Se generaba un hardwareid o fingerprint, este se enviaba junto con la licencia introducida, si coincidían los datos, el servidor retornaba un archivo .xml junto con los datos correctos, ahora la validación de estos se hace por el método CheckLicence.

- Quise hacer el juego más divertido, tras algunas horas encontré lo siguiente:
Código (csharp) [Seleccionar]
public static int? CheckTrialDaysLeft(RapidDesignPackage package)
{
   int? result = null;
   int num = 14;
   RapidDesignHelpPage helpPage = package.HelpPage;
   XmlDocument licenseXml = package.RegistrationConfigPage.LicenseXml;
   if (!RegistrationManager.CheckLicense(licenseXml))
   {
       result = new int?(num);
       if ((helpPage.FirstUseDate.HasValue && !string.Equals(helpPage.FirstUseDateVerify, helpPage.GetDateVerifyString(helpPage.FirstUseDate.Value))) || (!helpPage.FirstUseDate.HasValue && !string.IsNullOrEmpty(helpPage.FirstUseDateVerify)) || (helpPage.LastUseDate.HasValue && !string.Equals(helpPage.LastUseDateVerify, helpPage.GetDateVerifyString(helpPage.LastUseDate.Value))) || (!helpPage.LastUseDate.HasValue && !string.IsNullOrEmpty(helpPage.LastUseDateVerify)) || (helpPage.FirstUseDate.HasValue && helpPage.FirstUseDate.Value > DateTime.Now) || (helpPage.LastUseDate.HasValue && helpPage.LastUseDate.Value > DateTime.Now))
       {
           result = new int?(0);
       }
       else
       {
           if (helpPage.FirstUseDate.HasValue)
           {
               int days = (DateTime.Now.Date - helpPage.FirstUseDate.Value.Date).Days;
               result = new int?(Math.Max(0, num - days));
           }
       }
   }
   return result;
}


Destaco la siguiente línea:

Código (csharp) [Seleccionar]
int num = 14;  :silbar:

Eso ha sido todo. Creo que debería funcionar a la perfección, en caso que no por favor coméntame.

Bueno todo esto lo he hecho por que (mi memoría no es una de las mejores pero si recuerda los buenos actos) una vez requería de un script muy puntual, sinceramente creo que era específicamente para mi servidor y tu me ayudaste sin problemas, sin contar que llevas años en el foro y estuvimos en el tiempo de guerra con los moderadores y el-brujo (las cuentas siempre estaban baneadas). Saludos.

No hacía un tutorial hace más de un año uff

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

Eleкtro

#11
Cita de: .:UND3R:. en  8 Enero 2014, 07:20 AM
Link DLL:http://www.mediafire.com/download/bgyfn67ffis0mtj/RapidDesign.dll
Tipo Licencia: Corporate license
(No he probado esta DLL por favor dime si funciona)

Maravilloso:


Parece que funciona a la perfección, aunque por otro lado no me permite remover la licencia, solo espero que si pasan esos "14" días la licencia no expire o algo parecido, me imagino que no, pero me da miedo xD

Tu investigación ha sido mucho más profundizada que la mía, claro, tu eres el experto,
Además de haberme ayudado he aprendido bastante con tus explicaciones y las de McKsys, os lo agradezco infinítamente.

Cita de: .:UND3R:. en  8 Enero 2014, 07:20 AMBueno todo esto lo he hecho por que (mi memoría no es una de las mejores pero si recuerda los buenos actos) una vez requería de un script muy puntual, sinceramente creo que era específicamente para mi servidor y tu me ayudaste sin problemas, sin contar que llevas años en el foro y estuvimos en el tiempo de guerra con los moderadores y el-brujo (las cuentas siempre estaban baneadas). Saludos.

No debías tomarte tantas molestias por algo así, de nuevo Gracias,
y por supuesto que sí, si algún día te puedo ayudar con alguno de los lenguajes que conozco no dudes en pedirme ayuda.

Puedes cerrar el post si quieres

Un saludo!








.:UND3R:.

Lo dejaré abierto por si se expira, en cuanto a la eliminación de la licencia es normal, mira lo siguiente:

Código (csharp) [Seleccionar]
// RapidDesignAddIn.Configuration.UcRegistration
private void btnRemoveLicense_Click(object sender, EventArgs e)
{
   RegistrationData registrationData = RegistrationManager.GetRegistrationData(this.LicenseXml);
   string text = string.Empty;
   LicenseType licenseType = registrationData.LicenseType;
   if (licenseType <= LicenseType.MultiUser)
   {
       if (licenseType != LicenseType.SingleUser)
       {
           if (licenseType == LicenseType.MultiUser)
           {
               text = "A multi-user license allows you to transfer license from one computer to another 6 times per year per user.";
           }
       }
       else
       {
           text = "A single-user license allows you to transfer license from one computer to another 6 times per year.";
       }
   }
   else
   {
       if (licenseType != LicenseType.Team)
       {
           if (licenseType == LicenseType.Corporate)
           {
               text = "A corporate license allows you to transfer license from one computer to another unlimited number of times.";
           }
       }
       else
       {
           text = "A team license allows you to transfer license from one computer to another 60 times per year.";
       }
   }
   DialogResult dialogResult = MessageBox.Show(string.Concat(new string[]
   {
       "Removing license allows you to register RapidDesign on another computer.",
       Environment.NewLine,
       text,
       Environment.NewLine,
       Environment.NewLine,
       "Do you want to remove your license from this computer?"
   }), "Removing license key", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
   if (dialogResult == DialogResult.Yes)
   {
       try
       {
           int num;
           if (RegistrationManager.WSUnregister(this.LicenseXml, out num))
           {
               this.LicenseXml = null;
               this.OnProductRegistered(EventArgs.Empty);
               this.ShowRegistrationInformation();
               string str = string.Empty;
               if (registrationData.LicenseType != LicenseType.Corporate)
               {
                   str = string.Concat(new object[]
                   {
                       Environment.NewLine,
                       "You can transfer your license for another: ",
                       num,
                       " times this year."
                   });
               }
               MessageBox.Show("Your license information has been successfuly removed." + str, "Remove license", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
           }
           else
           {
               MessageBox.Show("Cannot remove your license. You have probably expired your transfer license limit.", "Remove license", MessageBoxButtons.OK, MessageBoxIcon.Hand);
           }
       }
       catch (Exception ex)
       {
           MessageBox.Show(string.Concat(new string[]
           {
               "There has been an unexpected error while trying to remove RapidDesign license.",
               Environment.NewLine,
               "Please try again later, and if the problem still occours, contact the product vendor.",
               Environment.NewLine,
               Environment.NewLine,
               "The error details: ",
               ex.Message
           }));
       }
   }
}


Un Zoom:

Código (csharp) [Seleccionar]
if (registrationData.LicenseType != LicenseType.Corporate)
               {
                   str = string.Concat(new object[]
                   {
                       Environment.NewLine,
                       "You can transfer your license for another: ",
                       num,
                       " times this year."
                   });
               }
               MessageBox.Show("Your license information has been successfuly removed." + str, "Remove license", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
           }
           else
           {
               MessageBox.Show("Cannot remove your license. You have probably expired your transfer license limit.", "Remove license", MessageBoxButtons.OK, MessageBoxIcon.Hand);
           }


como vez la versión corporate no se puede eliminiar algo extraño  :rolleyes:

Y se cumplió lo que te comenté nunca se sabe que tan difícil puede ser un programa, aunque este me dio una impresión de que fuese fácil y terminé demorándome más de lo habitual.

Saludos

PD: Experto no soy, aquí considero 3 personas superiores años luz a mi nivel, yo solo pedí la moderación para limpiar el foro (barrendero)  :xD

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

Eleкtro

#13
Ahora me toca a mi poner un pequeño (muy pequeño) granito de arena...

Para generar una registración automática (desatendida) con la dll craqueada es tan simple como agregar esta clave de registro:

Para VisualStudio 2013:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\DialogPage\ZUIINFRAspzoo.RapidDesign.Configuration.RapidDesignRegistrationPage]
"LicenseXmlString"="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><License><UserName>UND3R</UserName><CompanyName>UND3R</CompanyName><LicenseType>40</LicenseType><HardwareId>0123456789</HardwareId><MachineName>UND3R</MachineName><UserCount>100</UserCount></License>"


Para VisualStudio 2012:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\DialogPage\ZUIINFRAspzoo.RapidDesign.Configuration.RapidDesignRegistrationPage]
"LicenseXmlString"="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><License><UserName>UND3R</UserName><CompanyName>UND3R</CompanyName><LicenseType>40</LicenseType><HardwareId>0123456789</HardwareId><MachineName>UND3R</MachineName><UserCount>100</UserCount></License>"


Y así no es necesario tener que introducir la clave maunálmente. Esto me sirve mucho porque mi instalación de VisualStudio es totálmente desatendida.


Además, en otra clave de registro se almacena el número de usos, la primera fecha de uso y la última fecha de uso del plugin, al cambiar cualquiera de las fechas el plugin lo toma como válido y genera el string cifrado, así que he forzado las fechas de expiraciones y el número de usos para verificar si funciona todo corréctamente, y así es, la licencia sigue siendo válida y sin expirar ni nada extraño:



No hay de que preocuparse, funciona bien!

EDITO:
Hice un instalador SFX automático que autoregistra el plugin: https://www.mediafire.com/?rrfrtqq6arn2qdm

Saludos!