Versión VB.Net
1. Veamos lo que sucede al intentar utilizar los miembros de esta librería en un nuevo proyecto WinForms, utilizando el siguiente código:
Public Class Form1
Private WithEvents clipboardMonitor As New Greatis.Nostalgia.ClipboardMonitor With
{
.Active = True
}
Private Sub ClipboardMonitor_ClipboardChanged(ByVal sender As Object, ByVal e As EventArgs) _
Handles clipboardMonitor.ClipboardChanged
Dim data As IDataObject = Clipboard.GetDataObject()
If data.GetDataPresent(DataFormats.Text) Then
Debug.
WriteLine(DirectCast
(data.
GetData(DataFormats.
Text),
String)) End If
End Sub
End Class
Al iniciar la aplicación, nos saldrá este molesto aviso:
2) Abrimos la aplicación .Net Reflector, activamos el plugin Reflexil (Tools > Reflexil), cargamos la librería Greatis.Nostalgia.dll, expandimos el namespace Greatis.Nostalgia,
y encontramos dos Classes con nombres muy intuitivos, que nos señalan la funcionalidad de la licencia:
3) Expandimos la Class NostalgiaLP y encontramos la función GetLicense, la cual muestra el MessageBox que nos apareció en el paso nº1.
4) Nuestra intención será reemplazar el código para eliminar todas las instrucciones menos la del valor de retorno:
5) Cómo la Class NostalgiaLicense es un miembro con visibilidad privada, para poder reemplazar el código mediante Reflexil primero debemos modificar la visivilidad de dicha class para hacerla pública:
6) Para que el cambio de visibilidad del miembro tenga efecto, debemos guardar los cambios efectuados en el ensamblado a un nuevo archivo.
7) Cargamos el ensamblado parcheado en .Net reflector con el cambio de visibilidad de la class NostalgiaLicense, nos dirigimos de nuevo al método GetLicense en la Class NostalgiaLP,
seleccionamos TODAS las instrucciones, pulsamos click derecho para abrir el menú del Reflexil y seleccionamos la opción "Replace all with code"
8) Nos aparecerá un Form de edición con el código reemplazable,
y lo que debemos hacer ahora es modificar el valor de retorno del método GetLicense para devolver una nueva instancia de la Class NostalgiaLicense, pasándole el parámetro "granted" al Constructor de la Class:
Tras compilar la modificación, así es cómo quedarán los
OpCodes del método
GetLicense:
9) Por último, guardamos los cambios en el ensamblado a un nuevo archivo cómo hicimos en el paso nº6.
Ya hemos finalizado de bypassear esta protección que solo consistía en eliminar la llamada al mensaje de texto, ahora la librería no molestará con ningun aviso.