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 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 ):
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
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)) { 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)) { } else { if (helpPage.FirstUseDate.HasValue) { int days = (DateTime.Now.Date - helpPage.FirstUseDate.Value.Date).Days; } } } return result; }
Destaco la siguiente línea:
Código
int num = 14;
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