Tengo un codigo en visual C++ que me pasó un amigo para obtener la feca de expiración de unas licencias.
Lo que me gustaría es pasarlo a autoit, no tengo mucho código hecho, apenas la estructura de algunos datos.
OS dejo el code y seguidamente o que llevo hecho;
//returns the xml used to request the expire date of a license
wxString LicenseChecking::GetValidityXML()
{
wxPlatformInfo osInfo;
wxString languageId;
wxString OsVersion;
languageId.Printf(wxT("%ld"),( m_esetInfo != NULL ? m_esetInfo->GetLanguageId() : 0x409));
OsVersion.Printf(wxT("%d.%d"),osInfo.GetOSMajorVersion(),osInfo.GetOSMinorVersion());
wxString userPassEncoded = License::Encode2Validate(m_license->GetUsername(),m_license->GetPassword());
wxString product = ( m_esetInfo != NULL ? m_esetInfo->GetVersionType() : wxT("eav") );
wxString version = ( m_esetInfo != NULL ? m_esetInfo->GetStrVersion() : wxT("4.0.474.0") );
wxString xml = wxT("<?xml version=\"1.0\" encoding=\"utf-8\"?>") wxT("\n")
wxT("<GETLICEXP>") wxT("\n")
wxT("<SECTION ID=\"1000103\">") wxT("\n")
wxT("<LICENSEREQUEST>") wxT("\n")
wxT("<NODE NAME=\"UsernamePassword\" VALUE=\"") + userPassEncoded + wxT("\" TYPE=\"STRING\" />") wxT("\n")
wxT("<NODE NAME=\"Product\" VALUE=\"") + product + wxT("\" TYPE=\"STRING\" />") wxT("\n")
wxT("<NODE NAME=\"Version\" VALUE=\"") + version + wxT("\" TYPE=\"STRING\" />") wxT("\n")
wxT("<NODE NAME=\"Language\" VALUE=\"") + languageId + wxT("\" TYPE=\"DWORD\" />") wxT("\n")
wxT("<NODE NAME=\"UpdateTag\" VALUE=\"\" TYPE=\"STRING\" />") wxT("\n")
wxT("<NODE NAME=\"System\" VALUE=\"") + OsVersion + wxT("\" TYPE=\"STRING\" />") wxT("\n")
wxT("</LICENSEREQUEST>") wxT("\n")
wxT("</SECTION>") wxT("\n")
wxT("</GETLICEXP>") wxT("\n");
xml.Append((wxChar)0);
return xml;
}
Aqui una información adiccional de la persona que me dio el code
Lo que te deberías fijar es en el algoritmo que usa para codificar el usuario y password y enviarlo a ESET y este devuelva la fecha de expiracion.
El XML que observas es:
<?xml version="1.0" encoding="utf-8"?>
<GETLICEXP>
<SECTION ID="1000103">
<LICENSEREQUEST>
<NODE NAME="UsernamePassword" VALUE="User y Pass codificado" TYPE="STRING" />
<NODE NAME="Product" VALUE="Tipo de producto (eav, ess, essbe, eavbe)" TYPE="STRING" />
<NODE NAME="Version" VALUE="Version de nod32" TYPE="STRING" />
<NODE NAME="Language" VALUE="id del idioma" TYPE="DWORD" />
<NODE NAME="UpdateTag" VALUE="" TYPE="STRING" />
<NODE NAME="System" VALUE="Version del OS" TYPE=\"STRING\" />
</LICENSEREQUEST>
</SECTION>
</GETLICEXP>
Para llenar la propiedad VALUE de "UsernamePassword", se requiere codificar el usuario y password, el algoritmo de codificación que usa se encuentra más abajo (incluso añadí un pequeño dibujo en ASCII indicando que es lo que codifica y más abajo el código en si).
Con respecto al código en sí de la codificación del usuario y password para solicitar la fecha de expiración, no te sabría ayudar mucho en AutoIt porque no conozco como correr bytes a la derecha o a la izquierda (en C++ se lo hace con << y >>) o realizar operaciones con bits, ya sea OR, AND o XOR, que en C++ son │, & y ^ respectivamente. Además que, para entender el algoritmo, hay que entender cómo operar con bits (las operaciones or, and y xor).
Asi que esto es todo yo escribi apenas 4 lineas porque a decir verdad, me pase dos semanas dandole vueltas y no consegui nada:
Dejo también más explicaciones del autor de las funciones:
El algoritmo que me refiero es el de codificación PERO para el XML que se encuentra allí, no es el mismo de aquellas tablas en tnod.php (que por cierto, TNod actualmente no usa aquellas tablas sino el algoritmo original de decodificación/codificación en el registro, pero ese es otro tema).
Una vez que tengas todo el XML, lo envías a exp01.eset.com/getlicexp mediante un POST, los datos que se envía son:
checklic=XML
Donde XML es todo el xml donde se encuentran los datos.
Como una noticia última, ESET cambió el algoritmo de codificación (para saber la fecha de expiración), el anterior sigue valiendo pero el nuevo a largo plazo será el que sirva, por supuesto esta nueva forma de activación ya incluye muchas mejoras no tan sencillas de descifrar.
Ah, os dejo los archivos completos para mas información:Tal como lo mencionas está incorrecto, debes enviar a esta dirección:
exp01.eset.com
un POST a /getlicexp
Con los siguientes datos:
checklic=<?xml version="1.0" encoding="utf-8"?>................
Estamos hablando de una cabecera y cuerpo de un request HTTP, aquí tienes ejemplos: http://www.opencalais.com/HTTPexamples
Y respecto al problema de codificación/decodificación del registro, eso no hay problema, como dije antes TNod ya dispone de los algoritmos originales; el problema radica en la codificación para validar la licencia (y así pedir la fecha de caducidad) en un servidor (diferente a exp01.eset.com), una de las partes que lo complica es que ahora usa SSL para enviar y recibir (o sea no hay como interceptar la información que envía porque todo está codificado) a diferencia