Red de conocimiento informático - Aprendizaje de código fuente - Enseñarte cómo descifrar VisualSVN

Enseñarte cómo descifrar VisualSVN

Acabo de descargar la última versión previa de VisualSVN del sitio web oficial, pero no pude encontrar una versión descifrada después de buscar en GOOGLE. No tuve más remedio que descifrarla yo mismo. VisualSVN está escrito en .net sin ninguna ofuscación de código, por lo que es fácil modificar el código IL directamente a través de herramientas de reflexión. VisualSVN tiene varios métodos de descifrado. Simplemente busque la posición clave del código y modifíquela. Si no comprende el código IL, le recomiendo leer tutoriales en línea, que son muy fáciles de comenzar para las personas que conocen la programación .NET. Encontré VisualSVN.Core.L.dll ubicado en el directorio bin, usé .NET Reflector para cargar el ensamblaje y encontré el método Key-to-Key-to-LocenseConverter de la clase VisualSVN.Core.Licensing.LocenseConverter.

Aquí está el código IL sin modificar: método público hidebysig clase estática VisualSVN.Core.Licensing.License KeyToLicenseUnsafe (decodificador classVisualSVN.Core.IDecoder, clave de cadena) cil administrado { .maxstack 3 .localsinit ([0] charch, [1] stringstr, [2] classVisualSVN.Core.Licensing.PlainLicenseUnsafe (decodificador classVisualSVN.Core.IDecoder, clave de cadena) cil administrado { ..Licensing.NewLicenseSerializerserializer3, [5] charch2) L_0000: ldarg.1 L_0001: ldloca.sch L_0003: callstringVisualSVN. .Licensing.OldLicenseSerializerserializer2L_0008: stloc.1 L_0009: ldloc.1 L_000a: brtrue.s L_000e L_000c: ldnull L_000d: ret L_000e.L_000f: stloc.sch2 L_0011: ldloc.sch2 L_0013: i4.s0x43 L_0015: beq.s L_003d. L_0017: ldloc.sch2 L_0019: ldc.i4.s0x4e L_001b: sub L_001c: interruptor (L_004c, L_005d, L_002f) L_002d: br.s L_005d L_002f: newobjinstancevoidVisualSVN.Core.Licensing.Plain LicenseSerializer::. ctor() L_0034: ubicación estándar .2L_0035: ldloc.2 L_0036: ldloc.1 L_0037: callvirtinstanceclassVisualSVN.Core.Licensing.L_0037: callvirtinstanceclassVisualSVN.Core.Licensing.PlainLicenseSerializer::Deserialize(string) L_003c: ret L_003d: newobjinstancevoidVisualS V N.Core.Licensing.OldLicenseSerializer::. ctor () L_0042: stloc.3 L_0043: ldloc.3 L_0044: ldloc.1 L_0045: ldarg.0 L_0046: callvirtinstanceclassVisualSVN.Core.Licensing.PlainLicenseSerializer: :Deserialize(string) L_0048: newobjinstancevoidVisualSVN.Core.Licensing.O ld LicenciaSerializador::

.ctor()Core.Licensing.OldLicenseSerializer::Deserialize(cadena, classVisualSVN.Core.IDecoder) L_004b: ret L_004c: newobjinstancevoidVisualSVN.Core.Licensing.OldLicenseSerializer::Deserialize(cadena, classVisualSVN.Core.IDecoder)Core.Licensing.NewL icenseSerializer ::.ctor() L_0051: stloc.sserializer3 L_0053: ldloc.sserializer3 L_0055: ldloc.1 L_0056: ldarg.0L_0057. (cadena, claseVi sualSVN. Core. IDecoder) L_005c: ret L_005d: ldnull L_005e: ret } Traducción Obtener clave de licencia pública estática KeyToLicenseUnsafe (decodificador IDecoder, clave de cadena) { char ch string str = ExtractKeyBody(key, out ch); switch ( ch) { case 'N': { NewLicenseSerializer serializer3 = new NewLicenseSerializer(); return serializer3.Deserialize(str, decodificador); { case 'P': { PlainLicenseSerializer serializer = new PlainLicenseSerializer(); ); } case 'C': { OldLicenseSerializer serializer2 = new OldLicenseSerializer(); return serializer2.Deserialize(str, decoder); own Crea un objeto de licencia y úsalo para devolver el objeto.

Cambie el código de la siguiente manera: licencia pública estática KeyToLicenseUnsafe(decodificador IDecoder, clave de cadena) { Licencia licencia2 = nueva Licencia { StartTime = DateTime.MinValue, Binding = LicenseBinding.Backup.Backup.Backup.Backup.Backup.Backup.Backup.Backup. Copia de seguridad = LicenseBinding.Seat, Capacidad = 0x7ffffffe, EndTime = DateTime.MaxValue, Type = LicenseType.Corporate, PurchaseId = "100", LicensedTo = Environment.UserName }; devolver licencia ;}.

Dado que el código IL debe modificarse, debe escribirse como el siguiente código IL: método público hidebysig clase estática VisualSVN.Core.Licensing.License KeyToLicenseUnsafe(clase decodificador VisualSVN.Core.IDecoder, clave de cadena) cil administrado { .maxstack 2 .localsinit ( [ 0] clase VisualSVN.Core.Licensing.License licencia, [1] clase VisualSVN.Core.Licensing.LicenseUnsafe(clase VisualSVN.Core.IDecoder decodificador, clave de cadena) cil administrado { .maxstack 2 .[2] clase VisualSVN.Core. Licensing.License licencia3) L_0000: nop L_0001: instancia de newobj nula VisualSVN.Core.Licensing.License::.ctor() L_0006: stloc.1 L_0007: ldloc.1L_0014: tipo de valor stfldVisualSVN.Core.Licensing. LicenseBindingVisualSVN.Core. 2f: ldloc.1L_0030: ldc.i4 2 L_0031: stfldvaluetypeVisualSVN.Core.Licensing.LicenseTypeVisualSVN.Core.Licensing.License::Tipo L_0036: ldloc.1 L_0037: ldstr "100" L_003c: stfldstringVisualSVN.Core.Licensing.License::Purcha. seId L_0041: ldloc. 1L_0042: cadena de llamada [mscorlib] System.Environment::get_UserName() L_0047: stfldstring VisualSVN.Core.Licensing.License:: LicensedTo L_004c: ldloc.1 L_004d: stloc.0 L_004e: ldloc.0L_004c: ldloc.1 L_004d: stloc. 0 L_004e: ldloc.0 L_004f: ​​​​ldloc.0 0050: ldfldvaluetype[mscorlib]System.DateTimeVisualSVN.Core.Licensing.License::StartTime L_0055:s

tfldvaluetype[mscorlib]System.DateTimeVisualSVN.Core.Licensing.License::StartTimeDateTimeVisualSVN.Core.Licensing.License::PurchaseDate L_005a: ldloc.0 L_005b: stloc.2 L_005c: br.s L_005e L_005e: ldloc.2 05 f:ret } Una vez que haya hecho esto, puede crear una nueva licencia utilizando el software propietario de Microsoft.

Todo lo que tienes que hacer es utilizar las herramientas de compilación y descompilación IL propias de Microsoft.